Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Meag128 ресетится после выхода из обработчика прерывания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Solo_M
Помогите, пожалуйста. Используется WinAVR, при выходе из обработчика прерывания mega128 перезагружается (ресетится).
adc
да уж... хороший вопрос... :-(
Раскажите поподробнее, что за прерывания, что за обработчик,... здесь ясновидящих и экстрасенсов нет, есть только шаманы :-) Стек инициализируете? Что с собакой (WDT)?
alexander55
Цитата(Solo_M @ Nov 1 2007, 08:18) *
Помогите, пожалуйста. Используется WinAVR, при выходе из обработчика прерывания mega128 перезагружается (ресетится).

Попробуйте увеличить размер стека, псов тоже надо подкармливать. smile.gif
Solo_M
Используется язык С, Watchdog не используется (изначально Watchdog отключен, если ошибаюсь, сообщите). Как изменить размер стека в WinAVR 20060421?
aesok
Цитата(Solo_M @ Nov 1 2007, 10:14) *
Как изменить размер стека в WinAVR 20060421?


Никак.
Solo_M
Используется внешнее прерывание INT0, обработчик
ISR(SIG_INTERRUPT0)
{
Вывод цифры в LCD (используется _delay_ms)
}
aesok
Цитата(Solo_M @ Nov 1 2007, 10:23) *
Используется внешнее прерывание INT0, обработчик
ISR(SIG_INTERRUPT0)
{
Вывод цифры в LCD (используется _delay_ms)
}


Уровень оптимизации? Состояние фюза M103C?

Анатолий.
alexander55
Цитата(aesok @ Nov 1 2007, 09:22) *
Никак.

С WinAVR никогда не работал, но не поверю в то, что размер стека нельзя никак изменить.
Не верю (Станиславский).
ReAl
Цитата(alexander55 @ Nov 1 2007, 08:50) *
С WinAVR никогда не работал, но не поверю в то, что размер стека нельзя никак изменить.
Не верю (Станиславский).
У avr-gcc стек один, а не два, как у IAR, указатель сразу устанавливается на верхушку памяти данного контроллера, все переменные заполняют память снизу - итого после сборки проекта стек автоматически получается максимально возможного для данной программы размера.

p.s. а вообще, насколько я понимаю, ты в этом посте не того человека выбрал для того, чтобы по avr-gcc "не работать и не верить" :-)


Нет, ну если совсем строго, то, переопределив символ __stack (ключ линкеру --defsym __stack=значение), можно изменить начальное положение указателя стека, но увеличить таким образом стек можно только при наличии внешней памяти, так как по умолчанию стек ставится во внутреннюю. При наличии только накристальной памяти стек так можно только уменьшить.
Т.е. в подавляющем большинстве случаев работы с AVR совет увеличить стек не имеет смысла.

Solo_M, а есть уверенность, что выход на 0 происходит именно при выходе и именно из этого прерывания?
Нет ли каких-то включенных прерываний с неназначенным обработчиком? Или забыл обработчик назначить, или с именем ошибся - тогда подлинкуется переход на __bad_interrupt из которого делается JUMP 0
Переопредели ловушку неназначенных прерываний:
Код
ISR(__bad_interrupt)
{
    for(;;) PORTB ^= 0x01; // или на какую-то другую незанятую ногу
}

и посмотри.
Solo_M
Уровень оптимизации - s

Состояние фюза M103C? - Не изменяется, т.е используется по умолчанию (=0, т.е. programmed)


Благодарю за столь подробную информацию!
Со стеком все понятно, так я и предполагал.

Не назначенных обработчиков нет. Использовал другие прерывания
(INTERRUPT1 и т.д.) - ситуация аналогичная, т.е. Mega ресетится
после выхода из обработчика прерывания
=AVR=
Фуз M103C нужно сразу убрать в "1" как кошмарный сон. Убедись в том, что WD действительно отключен, настрой BOD, позаботься о правильном питании, удостоверься в том, что при выходе из ISR у тебя внешним образом никто не просаживает питание - и твои волосы станут мягкими и шелковистыми
mse
Цитата(ReAl @ Nov 1 2007, 10:36) *
У avr-gcc стек один, а не два, как у IAR, указатель сразу устанавливается на верхушку памяти данного контроллера, все переменные заполняют память снизу - итого после сборки проекта стек автоматически получается максимально возможного для данной программы размера...

Ну прально. Он в м103C, стек у него с 0x1060. А ГЦЦ ставит как для м128 с 0x1100...
Andrey_3
У меня такое было когда установил маску прерваний, а процедуру для обработки прерывания случайно забытого не создал.
Solo_M
Цитата(mse @ Nov 1 2007, 12:12) *
Ну прально. Он в м103C, стек у него с 0x1060. А ГЦЦ ставит как для м128 с 0x1100...



Огромное вам спасибо!!!
Убрал M103C и все заработало нормально.

Цитата(=AVR= @ Nov 1 2007, 11:53) *
Фуз M103C нужно сразу убрать в "1" как кошмарный сон. Убедись в том, что WD действительно отключен, настрой BOD, позаботься о правильном питании, удостоверься в том, что при выходе из ISR у тебя внешним образом никто не просаживает питание - и твои волосы станут мягкими и шелковистыми




Премного благодарен!!!

Проблема была в M103C, в остальном - все ОК. Убрал M103C и все заработало нормально.
Кстати, в PROTEUS'е работало без проблем.
mse
Цитата(Solo_M @ Nov 1 2007, 14:24) *
Кстати, в PROTEUS'е работало без проблем.

Дык, вы бы ГЦЦ сказали, что у вас м103, и тоже было бы всё нормально. ;О)
=AVR=
Уж больно многое этот М103С кастрирует - нуивона...smile.gif
mse
Цитата(=AVR= @ Nov 2 2007, 01:13) *
Уж больно многое этот М103С кастрирует - нуивона...smile.gif

Ну это ж другой вопрос. ;О)
alexander55
Цитата(=AVR= @ Nov 2 2007, 01:13) *
Уж больно многое этот М103С кастрирует ...

Дело в том, что Mega128 декларировалась как замена Mega103, снятой с производства. Поэтому и оставили режим совместимости со 103.
=AVR=
Это и так всем понятно. Но есть и другое соображение - нахрена нужен ВКЛЮЧЕННЫЙ ПО УМОЛЧАНИЮ режим совместимости с какой-то М103, которую подавляющее большинство новичков и в глаза-то не видели, но отключить этот режим не решаются или не умеют. Так и мучаются, как в данном примере
GDI
Новички пусть начинают с мега8 smile.gif
Kuzmi4
2GDI
Ага - которая тоже вскорости сменится на 88-ю ?
smile.gif
GDI
Тоже самое можно сказать и про 128-ю, что сменится мол на 128Х(1280, 1281...), только вот уже по слухам Хмега на подходе, а они все не меняются.. smile.gif
mse
Цитата(Kuzmi4 @ Nov 2 2007, 15:43) *
2GDI
Ага - которая тоже вскорости сменится на 88-ю ?
smile.gif

Там, слава Атымель, бита "М8С" нетуть. ;О)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.