FreeRTOS 源码注释(vTaskSuspend)
2012-06-22 21:10
197 查看
void vTaskSuspend( xTaskHandle pxTaskToSuspend )
{
tskTCB *pxTCB;
taskENTER_CRITICAL();
{
if( pxTaskToSuspend == pxCurrentTCB )
{
pxTaskToSuspend = NULL;
}
pxTCB = prvGetTCBFromHandle( pxTaskToSuspend );
/* 从就绪链表中删除 */
vListRemove( &( pxTCB->xGenericListItem ) );
if( pxTCB->xEventListItem.pvContainer )
{
vListRemove( &( pxTCB->xEventListItem ) );/* 从事件链表中删除 */
}
vListInsertEnd( ( xList * ) &xSuspendedTaskList, &( pxTCB->xGenericListItem ) );/* 插入到 Suspended 链表 */
}
taskEXIT_CRITICAL();
if( ( void * ) pxTaskToSuspend == NULL ) /*说明停止的是当前任务,需要任务调度 */
{
portYIELD_WITHIN_API(); /* 任务调度 */
}
}
{
tskTCB *pxTCB;
taskENTER_CRITICAL();
{
if( pxTaskToSuspend == pxCurrentTCB )
{
pxTaskToSuspend = NULL;
}
pxTCB = prvGetTCBFromHandle( pxTaskToSuspend );
/* 从就绪链表中删除 */
vListRemove( &( pxTCB->xGenericListItem ) );
if( pxTCB->xEventListItem.pvContainer )
{
vListRemove( &( pxTCB->xEventListItem ) );/* 从事件链表中删除 */
}
vListInsertEnd( ( xList * ) &xSuspendedTaskList, &( pxTCB->xGenericListItem ) );/* 插入到 Suspended 链表 */
}
taskEXIT_CRITICAL();
if( ( void * ) pxTaskToSuspend == NULL ) /*说明停止的是当前任务,需要任务调度 */
{
portYIELD_WITHIN_API(); /* 任务调度 */
}
}
相关文章推荐
- FreeRTOS 源码注释(vTaskSuspend)
- FreeRTOS 源码注释(vTaskDelete)
- FreeRTOS 源码注释(prvCheckTasksWaitingTermination)
- FreeRTOS 源码注释(vTaskDelete)
- FreeRTOS 源码注释(prvIdleTask)
- FreeRTOS 源码注释(vTaskDelayUntil)
- FreeRTOS 源码注释(prvIdleTask)
- FreeRTOS 源码注释(vTaskDelayUntil)
- FreeRTOS 源码注释(vTaskDelay)
- FreeRTOS源码解析 -> vTaskSuspend
- FreeRTOS 源码注释(vTaskDelay)
- FreeRTOS 源码注释(prvAllocateTCBAndStack)
- FreeRTOS 源码注释(prvAllocateTCBAndStack)
- FreeRTOS 源码注释(prvInitialiseTCBVariables)
- FreeRTOS 源码注释(prvInitialiseTCBVariables)
- FreeRTOS 源码注释(prvInitialiseTaskLists)
- FreeRTOS 源码注释(prvInitialiseTaskLists)
- FreeRTOS 源码注释(prvAddTaskToReadyQueue)
- FreeRTOS 源码注释(xTaskGenericCreate)
- FreeRTOS 源码注释(prvAddTaskToReadyQueue)