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

 
 
> Искажение сохраненного контекста в прерывании, прямо таки проблемы с прерываниями, как из рога изобилия ))
EugeneB
сообщение Oct 27 2006, 21:41
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 6-08-06
Пользователь №: 19 356



Написан код под SAM7S, который принимает данные с двух USART и отвечает компу. Обработчик прерываний в стартапе исправлен. В основном цикле программы крутится проверка некоторой переменной...
(THUMB режим, оптимизация по объему максимум, IAR Embedded Toolkit 4.40A)
Скорость работы порта 115200
void InitUSART()
{
// все стандартно
}
void USART0IRQHandler0( void)
{
func1();
.....ответ компу
}
void USART1IRQHandler1( void)
{
func2();
.....ответ компу
}

main()
{
UINT boolTest = 0;

.... инитим все
while(1)
{
if ( func3() ) // данная функция никогда не выдает 1, просто заглушка (.....;return 1; ), чтобы компилер не /выкидывал boolTest
{
boolTest = 1;
AT91F_DBGU_Printk( "bool=1!\n\r" );
}
if ( boolTest ) AT91F_DBGU_Printk( "UUPS magic error!\n\r" );
}

}
прикол весь в том, что это сообщение выводитсья иногда раз в час, иногда раз в 2, 3 часа при том, что "bool=1!" вообще НЕ выводится. Не понимаю вообще какого черта. Получаются такие варианты могут быть:
1. Каким-то образом затирается содержимое стека
2. Искажаются флаги после/до обработки прерывания
3. ......у какого какие еще мысли, может, кто сталкивался с этим.
Есть идея, конечно, запихнуть весь контекст при обработке прерывания в отдельную область памяти, как думаете?

Сообщение отредактировал EugeneB - Oct 27 2006, 21:52
Go to the top of the page
 
+Quote Post



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

 


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


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