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

 
 
> Переключение контекста
juvf
сообщение Dec 14 2013, 19:53
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Порт FreeRTOS для stm32 IAR. Обнаружил зависание одной самой приоритетной задачи. Статус READY, но на неё переключения нет.

Оставил одну задачу в проекте с приоритетом 3. запускаю в дебаге.... задача в блокированном состоянии, ждет байт в очереди.

в прерывании выдаю посылаю байт в очередь.

Код
void USART1_IRQHandler(void)
{
    static uint8_t byte;
    static portBASE_TYPE xHigherPriorityTaskWoken;
    xHigherPriorityTaskWoken = pdFALSE;
    if(USART1_SR_bit.RXNE == 1)
    { //прерывание по приему
        byte = USART1_DR; //флаг прерывания сбрасывается при чтении регистра USART1_DR
        xQueueSendToBackFromISR(uart485Queue, &byte, &xHigherPriorityTaskWoken);
    }
    //portEND_SWITCHING_ISR(xHigherPriorityTaskWoken == pdTRUE );
}


До первого входа в прерывание задача в блокированном состоянии. После выдачи байта в очередь xQueueSendToBackFromISR(uart485Queue...) задача сразу переходит в состояние READY. Если в конце прерывания вызвать принудительное переключение контекста, то переключение происходит. Если не вызывать, то теоретически, переключение контекста должно произойти во время системного тика, но переключения не происходит. Всегда крутится задача IDLE, а моя задача находится в состоянии готовности и не выполняется. Посмотрел исходник обработчика системного тика - там только переключение на задачи, которые задержаны функциями delay. А где вызов планировщика и проверка приоритетных задач на готовность? Где переключение контекста?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Dec 14 2013, 21:10
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А зачем же вы закомментировали portEND_SWITCHING_ISR?
Я не знаток FreeRTOS, но, по-моему, именно этот макрос взводит флажок вызова прерывания перепланировки.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
juvf
сообщение Dec 15 2013, 04:12
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(AHTOXA @ Dec 15 2013, 02:10) *
А зачем же вы закомментировали portEND_SWITCHING_ISR?

portEND_SWITCHING_ISR - это принудительное переключение контекста. без него должно переключится в конце системного тика
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post



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

 


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


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