74 #ifdef portREMOVE_STATIC_QUALIFIER
81 static List_t xDelayedCoRoutineList1;
82 static List_t xDelayedCoRoutineList2;
83 static List_t * pxDelayedCoRoutineList;
84 static List_t * pxOverflowDelayedCoRoutineList;
85 static List_t xPendingReadyCoRoutineList;
90 static TickType_t xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0;
93 #define corINITIAL_STATE ( 0 )
102 #define prvAddCoRoutineToReadyQueue( pxCRCB ) \
104 if( pxCRCB->uxPriority > uxTopCoRoutineReadyPriority ) \
106 uxTopCoRoutineReadyPriority = pxCRCB->uxPriority; \
108 vListInsertEnd( ( List_t * ) &( pxReadyCoRoutineLists[ pxCRCB->uxPriority ] ), &( pxCRCB->xGenericListItem ) ); \
115 static void prvInitialiseCoRoutineLists(
void );
123 static void prvCheckPendingReadyList(
void );
133 static void prvCheckDelayedList(
void );
148 if( pxCurrentCoRoutine == NULL )
150 pxCurrentCoRoutine = pxCoRoutine;
151 prvInitialiseCoRoutineLists();
163 pxCoRoutine->
uxIndex = uxIndex;
200 xTimeToWake = xCoRoutineTickCount + xTicksToDelay;
210 if( xTimeToWake < xCoRoutineTickCount )
232 static void prvCheckPendingReadyList(
void )
255 static void prvCheckDelayedList(
void )
260 while( xPassedTicks )
262 xCoRoutineTickCount++;
266 if( xCoRoutineTickCount == 0 )
272 pxTemp = pxDelayedCoRoutineList;
273 pxDelayedCoRoutineList = pxOverflowDelayedCoRoutineList;
274 pxOverflowDelayedCoRoutineList = pxTemp;
309 xLastTickCount = xCoRoutineTickCount;
316 prvCheckPendingReadyList();
319 prvCheckDelayedList();
322 while(
listLIST_IS_EMPTY( &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) ) )
324 if( uxTopCoRoutineReadyPriority == 0 )
329 --uxTopCoRoutineReadyPriority;
343 static void prvInitialiseCoRoutineLists(
void )
358 pxDelayedCoRoutineList = &xDelayedCoRoutineList1;
359 pxOverflowDelayedCoRoutineList = &xDelayedCoRoutineList2;
#define listGET_LIST_ITEM_VALUE(pxListItem)
#define listGET_OWNER_OF_NEXT_ENTRY(pxTCB, pxList)
void vCoRoutineSchedule(void)
#define portENABLE_INTERRUPTS()
CRCB_t * pxCurrentCoRoutine
#define portDISABLE_INTERRUPTS()
void(* crCOROUTINE_CODE)(CoRoutineHandle_t, UBaseType_t)
void * pvPortMalloc(size_t xSize) PRIVILEGED_FUNCTION
#define listSET_LIST_ITEM_VALUE(pxListItem, xValue)
void vListInsertEnd(List_t *const pxList, ListItem_t *const pxNewListItem)
crCOROUTINE_CODE pxCoRoutineFunction
#define configMAX_CO_ROUTINE_PRIORITIES
#define listLIST_IS_EMPTY(pxList)
BaseType_t xCoRoutineRemoveFromEventList(const List_t *pxEventList)
unsigned long UBaseType_t
#define listSET_LIST_ITEM_OWNER(pxListItem, pxOwner)
ListItem_t xEventListItem
TickType_t xTaskGetTickCount(void) PRIVILEGED_FUNCTION
#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY
#define listGET_OWNER_OF_HEAD_ENTRY(pxList)
void *configLIST_VOLATILE pvContainer
BaseType_t xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex)
#define prvAddCoRoutineToReadyQueue(pxCRCB)
void vCoRoutineAddToDelayedList(TickType_t xTicksToDelay, List_t *pxEventList)
ListItem_t xGenericListItem
void vListInitialise(List_t *const pxList)
void vListInitialiseItem(ListItem_t *const pxItem)
void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem)
UBaseType_t uxListRemove(ListItem_t *const pxItemToRemove)