реклама на сайте
подробности

 
 
> GCC и Simulator AVR Studio 4.17, развертывание контекста при выходе из прерывания
AVR38
сообщение Sep 3 2009, 14:19
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 3-09-09
Пользователь №: 52 181



Здравствуйте!
Запарился на такой простой с виду штуке, написанной в самообучающих целях:

контроллер ATmega32, AVR Studio 4.17, WinAVR-20090313
в обработчике прерывания от TCNT0 была сделана ассемблерная вставка. В эмуляторе при выходе из прырывания не восстаналивается из стека адрес возврата и происходит сброс программы. Даже при урезнии ассемблерной вставки до вида:

ISR(TIMER0_COMP_vect)
{
asm("reti""\n");
};

баг не пропадает.
Подскажите, где нагрешил?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Sep 4 2009, 07:10
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



ассемблерные вставки в AVR-GCC - это совсем не так просто.... компилятор запросто может самостоятельно обрамлять вашу вставку дополнительными командами (типа push-pop), поэтому ваш reti из середины вставки очень запросто может рушить весь стек!

и если уж очень хочется использовать ассемблерно-вставленный вариант обработчика прерываний, то используйте атрибут ISR_NAKED, что ли... но, конечно, прежде изучите документацию на WinAVR!!!


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Sep 4 2009, 11:22
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Есть выход - писать обработчики прерываний полостью на ASM в отдельном *.s файле (если ASM _действительно необходим_).
Напишите для начала на чистом С. Вдруг это вас устроит. Зачем лишняя морока...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 18:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016