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

 
 
> Тестирование exceptions для STM32, Как гарантированно вызвать обработчики исключений?
Lyrri
сообщение Feb 25 2014, 09:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 15-01-11
Из: Киев
Пользователь №: 62 244



В текущем проекте сделал сохранение последнего исключения во внешнюю flash память для дальнейшего анализа (сохранение последней причины перезагрузки системы). Осталось это все дело протестировать. То есть написать тестовый код так, чтобы гарантированно вызвать исключения: NMI, HardFault, MemManage, BusFault, UsageFault.
Нашел как вызвать HardFault на просторах этого форума (попытка чтения по невыровненному адресу).

Код
void make_hard_fault()
{
    __asm volatile
    (
        "MOVS r0, #1       \n"
        "LDM r0,{r1-r2}    \n"
        "BX LR                \n"
    );
}


Как лучше/правильнее протестировать все остальные исключения?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mantech
сообщение Feb 26 2014, 08:11
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Lyrri @ Feb 25 2014, 13:48) *
В текущем проекте сделал сохранение последнего исключения во внешнюю flash память для дальнейшего анализа (сохранение последней причины перезагрузки системы). Осталось это все дело протестировать.


Может немного не в тему, но для чего все это? Вы уверены, что перезагрузка происходит именно из-за исключительной ситуации, просто у меня еще никогда такого не было...

Сообщение отредактировал mantech - Feb 26 2014, 08:11
Go to the top of the page
 
+Quote Post
Lyrri
сообщение Feb 26 2014, 09:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 15-01-11
Из: Киев
Пользователь №: 62 244



Цитата(mantech @ Feb 26 2014, 11:11) *
Может немного не в тему, но для чего все это?

Это все для того чтобы понять что же произошло у конечного пользователя, если что-то пойдет не так. Ведь обычно feedback приходит в виде "А я включил а оно не работает.... Оно то работает то не работает... итд".
Цитата
Вы уверены, что перезагрузка происходит именно из-за исключительной ситуации, просто у меня еще никогда такого не было...

Перегрузка происходит во вачдогу. Если программа застряла в исключении, то пишется тип исключения и содержание соотв. регистров. Если какая-то из задач (у меня FreeRtos) не "отчиталась" за определенный период времени о том что она жива, также произойдет перезагрузка системы по вачдогу. В этом случае во флеш будет записано имя повисшей задачи.
Go to the top of the page
 
+Quote Post



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

 


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


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