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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Meag128 ресетится после выхода из обработчика прерывания, Meag128 ресетится после выхода из обработчика прерывания
Solo_M
сообщение Nov 1 2007, 05:18
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 23-10-06
Пользователь №: 21 570



Помогите, пожалуйста. Используется WinAVR, при выходе из обработчика прерывания mega128 перезагружается (ресетится).
Go to the top of the page
 
+Quote Post
adc
сообщение Nov 1 2007, 05:50
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 409
Регистрация: 29-10-07
Пользователь №: 31 836



да уж... хороший вопрос... :-(
Раскажите поподробнее, что за прерывания, что за обработчик,... здесь ясновидящих и экстрасенсов нет, есть только шаманы :-) Стек инициализируете? Что с собакой (WDT)?


--------------------
Умный программист пишет тупым кодом гениальные вещи, а не наоборот...
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 1 2007, 05:59
Сообщение #3


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Solo_M @ Nov 1 2007, 08:18) *
Помогите, пожалуйста. Используется WinAVR, при выходе из обработчика прерывания mega128 перезагружается (ресетится).

Попробуйте увеличить размер стека, псов тоже надо подкармливать. smile.gif
Go to the top of the page
 
+Quote Post
Solo_M
сообщение Nov 1 2007, 06:14
Сообщение #4





Группа: Новичок
Сообщений: 8
Регистрация: 23-10-06
Пользователь №: 21 570



Используется язык С, Watchdog не используется (изначально Watchdog отключен, если ошибаюсь, сообщите). Как изменить размер стека в WinAVR 20060421?
Go to the top of the page
 
+Quote Post
aesok
сообщение Nov 1 2007, 06:22
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Solo_M @ Nov 1 2007, 10:14) *
Как изменить размер стека в WinAVR 20060421?


Никак.
Go to the top of the page
 
+Quote Post
Solo_M
сообщение Nov 1 2007, 06:23
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 23-10-06
Пользователь №: 21 570



Используется внешнее прерывание INT0, обработчик
ISR(SIG_INTERRUPT0)
{
Вывод цифры в LCD (используется _delay_ms)
}
Go to the top of the page
 
+Quote Post
aesok
сообщение Nov 1 2007, 06:25
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



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


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

Анатолий.

Сообщение отредактировал aesok - Nov 1 2007, 06:27
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 1 2007, 06:50
Сообщение #8


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(aesok @ Nov 1 2007, 09:22) *
Никак.

С WinAVR никогда не работал, но не поверю в то, что размер стека нельзя никак изменить.
Не верю (Станиславский).
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 1 2007, 07:36
Сообщение #9


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(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; // или на какую-то другую незанятую ногу
}

и посмотри.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Solo_M
сообщение Nov 1 2007, 08:45
Сообщение #10





Группа: Новичок
Сообщений: 8
Регистрация: 23-10-06
Пользователь №: 21 570



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

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


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

Не назначенных обработчиков нет. Использовал другие прерывания
(INTERRUPT1 и т.д.) - ситуация аналогичная, т.е. Mega ресетится
после выхода из обработчика прерывания
Go to the top of the page
 
+Quote Post
Guest_=AVR=_*
сообщение Nov 1 2007, 08:53
Сообщение #11





Guests






Фуз M103C нужно сразу убрать в "1" как кошмарный сон. Убедись в том, что WD действительно отключен, настрой BOD, позаботься о правильном питании, удостоверься в том, что при выходе из ISR у тебя внешним образом никто не просаживает питание - и твои волосы станут мягкими и шелковистыми
Go to the top of the page
 
+Quote Post
mse
сообщение Nov 1 2007, 09:12
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



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

Ну прально. Он в м103C, стек у него с 0x1060. А ГЦЦ ставит как для м128 с 0x1100...
Go to the top of the page
 
+Quote Post
Andrey_3
сообщение Nov 1 2007, 10:52
Сообщение #13





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



У меня такое было когда установил маску прерваний, а процедуру для обработки прерывания случайно забытого не создал.
Go to the top of the page
 
+Quote Post
Solo_M
сообщение Nov 1 2007, 11:24
Сообщение #14





Группа: Новичок
Сообщений: 8
Регистрация: 23-10-06
Пользователь №: 21 570



Цитата(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'е работало без проблем.
Go to the top of the page
 
+Quote Post
mse
сообщение Nov 1 2007, 13:30
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(Solo_M @ Nov 1 2007, 14:24) *
Кстати, в PROTEUS'е работало без проблем.

Дык, вы бы ГЦЦ сказали, что у вас м103, и тоже было бы всё нормально. ;О)
Go to the top of the page
 
+Quote Post

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

 


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


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