|
Прерывания Cortex-M3, HardFault_Handler |
|
|
|
 |
Ответов
|
Apr 3 2012, 17:44
|
Участник

Группа: Участник
Сообщений: 53
Регистрация: 27-10-08
Пользователь №: 41 225

|
to batisto4ka:
1. По зависанию SPI в цикле ожидания передачи: если Вы кладете данные в аппаратный SPI и не дожидаясь окончания передачи остановите ядро (по точке останова, или просто кнопкой отладчика) то передача по SPI накроется медным тазом, и флаг окончания передачи никогда не поднимется, сам с таким сталкивался. Так что возможно Ваша проблема связана не с зависанием SPI или АЦП.
2. На мой взгляд, писать такой огромный кусок кода в прерывание, а тем более вызывать из него кучу ветвящихся процедур не очень красиво. Вполне возможно ваши проблемы возникают тогда, когда обработчик прерывания EXTI ушел в какую-нибудь функцию, а в это время возникает прерывание от USART. Я бы сделал немного по другому, в основном цикле я бы реализовал конечный автомат обработки MODBUS и опроса АЦП, а в прерываниях оставил бы лишь генерацию входов для этого автомата.
3. Если уж хотите обезопасить себя от зависания в циклах, вводите счетчики итераций - хорошая практика, к примеру:
uint8_t counter = 20;
while ((/*Ваше условие*/) && (counter--) ) { /*Ваши действия*/ }
if (!counter) {/*Обработка ошибки*/};
Таким образом из любого, потенциально опасного цикла Ваша программа выйдет либо по нормальному условию, либо через четко заданное количество итераций, а следующий за циклом if обработает аварийную ситуацию.
|
|
|
|
Сообщений в этой теме
rat Прерывания Cortex-M3 Mar 15 2012, 07:12 Mareng Цитата(rat @ Mar 15 2012, 14:12) void RTC... Mar 15 2012, 07:28 rat Цитата(Mareng @ Mar 15 2012, 14:28) Навер... Mar 15 2012, 07:44 Mareng ; для начала убрать надо Mar 15 2012, 07:46 rat Цитата(Mareng @ Mar 15 2012, 14:46) ; для... Mar 15 2012, 07:54  Сергей Борщ QUOTE (rat @ Mar 15 2012, 09:49) При попы... Mar 15 2012, 07:56   rat Цитата(Сергей Борщ @ Mar 15 2012, 14:56) ... Mar 15 2012, 08:16    Сергей Борщ QUOTE (rat @ Mar 15 2012, 10:16) сразу по... Mar 15 2012, 08:39     rat Цитата(Сергей Борщ @ Mar 15 2012, 15:39) ... Mar 15 2012, 09:12      rat Вопрос разрешился. Не был подключен файл startup_e... Mar 15 2012, 10:37  Mareng Цитата(rat @ Mar 15 2012, 14:54) Поправил... Mar 15 2012, 08:03 Mareng Можно посмотреть в пдф-е на проц точный адрес вект... Mar 15 2012, 08:22 batisto4ka Помогите разобраться с приоритетами прерываний. У ... Mar 19 2012, 08:00 batisto4ka Явно что-то с вайлом. Первыйй АЦП общается с контр... Mar 19 2012, 10:36 Aaron Если хардварный SPI виснет на ожидании SPI_SR_RXNE... Mar 19 2012, 12:18 batisto4ka Да, только при работе с АЦП. Еще есть один вопрос,... Mar 19 2012, 13:42 Aaron Конечно, организовать можно по-разному, и смешать ... Mar 20 2012, 07:10 batisto4ka CODEvoid EXTI1_IRQHandler(void)
{
static uint8_t ... Mar 20 2012, 08:40 Aaron Дак судя по коду вообще получается, что у вас пери... Mar 20 2012, 09:22 batisto4ka ну это не весь код естесственно, это сами обработч... Mar 20 2012, 11:30 Aaron я это понимаю. но из кода функций WriteSPI и ADC_D... Mar 20 2012, 12:52 batisto4ka они не зависают,а подвисают..если сделать функцию ... Mar 20 2012, 13:08 ohmjke Здравствуйте. Есть такой код:
CODE#define STM32F10... Apr 1 2012, 15:38 ohmjke Решил проблему, мой косяк был.
Надо было делать не... Apr 2 2012, 13:44
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|