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

 
 
> FreeRTOS баг или нет?
_sv_
сообщение May 3 2012, 12:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-03-11
Пользователь №: 63 436



Добрый день всем.

FreeRTOS (7.1.0)

Что-то не пойму как вообще работает FreeRTOS...
Делаем следующее:

Запускаем таск и делаем в нем vTaskDelay
Получаем цепочку вызовов: vTaskDelay -> prvAddCurrentTaskToDelayedList -> vListInsert


Код
vTaskDelay:
    vListRemove( ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
    prvAddCurrentTaskToDelayedList( xTimeToWake );
Код
prvAddCurrentTaskToDelayedList:
    vListInsert( ( xList * ) pxDelayedTaskList, ( xListItem * ) &( pxCurrentTCB->xGenericListItem ) );
Код
vListInsert:
    pxNewListItem->pxNext = pxIterator->pxNext;
    pxNewListItem->pxNext->pxPrevious = ( volatile xListItem * ) pxNewListItem;
    pxNewListItem->pxPrevious = pxIterator;
    pxIterator->pxNext = ( volatile xListItem * ) pxNewListItem;
    pxNewListItem->pvContainer = ( void * ) pxList;
vListInsert не изменяет поле Owner у элемента

Далее приходит нужный тик от таймера и срабатывает макро prvCheckDelayedTasks
Код
    if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE ) // Список не пуст
        pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList ); //  Поле Owner не заполнено
        xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xGenericListItem ) ); // Гуляем где-то...


Получаем:
Поле Owner у нас не заполнено.
Приводим случайные данные к указателю и ходим по случайным адресам.

Я что-то упустил?

Сообщение отредактировал _sv_ - May 3 2012, 12:44
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _sv_   FreeRTOS баг или нет?   May 3 2012, 12:24


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

 


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


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