FreeRTOS 源码注释(vTaskSuspend)

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(); /* 任务调度 */
    }
}

你可能感兴趣的:(api,null,任务调度,任务)