ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
528146
Codavr (07.07.2014 02:35 - 02:38, просмотров: 29419)
У меня засада с FreeRTOS. Забабахал порт на AT90CAN128, ну точнее подправил ихний порт для ATMega323 на IAR. Сляпал мигалку светодиодом на попроб. И тут такое дело, светодиод включается а дальше хренушки. Таймер щелкает, прерывания идут, системные тики щелкают, а задача после вызова xTaskDelay не просыпается. Локализовал место где происходит косяк. В момент проверки listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE pxDelayedTaskList->uxNumberOfItems = 0x00 программа идет по ветке как будто бы нет задержаных задач и поэтому не вызывается код который должен разбудить задержаную задачу. Макрос определен как #define listLIST_IS_EMPTY( pxList ) ( ( BaseType_t ) ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ) В программе одна задача уже должна быть в списке В список она вносится вот этим куском xList xlXList; xlXList = *((xList *) pxDelayedTaskList); xliXListItem = *((xListItem *) &( pxCurrentTCB->xGenericListItem )); vListInsert( &xlXList, &xliXListItem); где typedef struct xLIST { configLIST_VOLATILE UBaseType_t uxNumberOfItems; блабла } xList; void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem ) { блаблабла и в самом конце ( pxList->uxNumberOfItems )++; } Как я понимаю по замыслу pxDelayedTaskList->uxNumberOfItems должно быть 0x01 после выполнения vListInsert, а оно остается 0x00. Шозахрень?
Долой империалистический интернационал!