|
STM32L151 + SDIO + FreeRTOS, BusFault после выхода из прерывания SDIO |
|
|
|
Feb 26 2015, 15:55
|

Гуру
     
Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702

|
Коллеги, добрый день. Подскажите что-нибудь ! После выхода из обработчика прерывания SDIO программа оказывается в BusFault_Handler. Глюк происходит изредка и нерегулярно. В окне Callstuck картина каждый раз одинаковая, глюк где-то в коде ядра ОС Если установку эвентов в прерывании заменить на глобальную переменную, а ожидание эвентов на проверку этой переменной в цикле while , то глюка не происходит. Приоритет прерывания 12. FreeRTOS настроена так : Код #define configKERNEL_INTERRUPT_PRIORITY 255 #define configMAX_SYSCALL_INTERRUPT_PRIORITY 191 #define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for(;; ); } /*проходит не ругается */ Обработчик прерывания Код void SDIO_IRQHandler(void) { static portBASE_TYPE xHigherPriorityTaskWoken; static unsigned int SDIO_STA_MASK;
xHigherPriorityTaskWoken = pdFALSE; SDIO_STA_MASK=SDIO->STA & 0x00ffffff; //т.к. в EventGroup можно передавать только 24 бита xEventGroupSetBitsFromISR(x_SDIO_Transmit_EventGroup, SDIO_STA_MASK ,&xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken == pdTRUE);
SDIO->ICR= SDIO_STA_MASK; //сбрасываем флаги прерывания //
xxxx=123; //Глобальная переменная для поиска места глюка }
Эскизы прикрепленных изображений
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
 |
Ответов
|
Feb 27 2015, 23:24
|

Гуру
     
Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702

|
Цитата(aaarrr @ Feb 28 2015, 01:18)  Приоритеты прерываний настроены? Вроде бы да : #define configMAX_SYSCALL_INTERRUPT_PRIORITY 0xb0 Т.к. в STM32 для определения приоритета используются биты 7-4 , то это приоритет 0xB или 11. Стало быть, те прерывания, где есть функции API , должны иметь приоритеты ниже, т.е. 15-11 включительно. У меня так и сделано. Всё верно ?
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
Сообщений в этой теме
MiklPolikov STM32L151 + SDIO + FreeRTOS Feb 26 2015, 15:55 aaarrr Смотрите значения BFSR и BFAR. Feb 26 2015, 20:38 MiklPolikov CFSR = 0x00008200 (во всех случаях)
То есть, сто... Feb 27 2015, 00:15  aaarrr Цитата(MiklPolikov @ Feb 27 2015, 03:15) ... Feb 27 2015, 09:29   MiklPolikov Вот такой массив их эвентов и такое обращение к не... Feb 27 2015, 10:48    AHTOXA Цитата(MiklPolikov @ Feb 27 2015, 15:48) ... Feb 27 2015, 11:05     MiklPolikov Цитата(AHTOXA @ Feb 27 2015, 14:05) А где... Feb 27 2015, 11:08 kolobok0 Цитата(MiklPolikov @ Feb 26 2015, 18:55) ... Feb 27 2015, 19:43 MiklPolikov Цитата(kolobok0 @ Feb 27 2015, 22:43) туп... Feb 27 2015, 20:12  MiklPolikov Другой вопрос:
Делаю xTimerResetFromISR , после э... Feb 27 2015, 21:45     MiklPolikov Картина проясняется.
Есть две задачи.
Есть два не... Feb 28 2015, 14:36      aaarrr Цитата(MiklPolikov @ Feb 28 2015, 17:36) ... Feb 28 2015, 15:01       MiklPolikov Цитата(aaarrr @ Feb 28 2015, 18:01) Прове... Feb 28 2015, 15:27 aaarrr С приоритетом KERNEL_INTERRUPT_PRIORITY работают в... Feb 28 2015, 15:59 MiklPolikov Цитата(aaarrr @ Feb 28 2015, 18:59) С при... Feb 28 2015, 17:13  aaarrr Цитата(MiklPolikov @ Feb 28 2015, 20:13) ... Feb 28 2015, 17:54   MiklPolikov Поэкспериментировал ещё :
Оказывается, если замен... Feb 28 2015, 21:32 aaarrr Сломается точно так же и с семафорами в конце конц... Feb 28 2015, 22:22 MiklPolikov Проблема решилась.
После перехода с версии FreeRT... Mar 1 2015, 04:47  aaarrr Цитата(MiklPolikov @ Mar 1 2015, 07:47) П... Mar 1 2015, 11:57 kan35 у меня аналогичное случалось при банальном перепол... Apr 8 2015, 17:30
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|