任务挂起的主要工作包括:
将任务从状态列表中移除并挂接到挂起列表中
更新任务唤醒时间
如果挂起当前任务,需要请求切换
/* 挂起任务 */
void vTaskSuspend(TaskHandle_t xTaskToSuspend)
{
TCB_t *pxTCB;
/* 进入临界区 */
taskENTER_CRITICAL();
{
/* 通过任务句柄获取任务TCB */
pxTCB = prvGetTCBFromHandle(xTaskToSuspend);
traceTASK_SUSPEND(pxTCB);
/* 将任务从状态列表中移除,状态列表中没有任何任务 */
if(uxListRemove(&(pxTCB->xStateListItem)) == (UBaseType_t)0)
{
/* 检查该优先级就绪列表中是否有任务,如果没有将该优先级从当前任务优先级记录中清除 */
taskRESET_READY_PRIORITY(pxTCB->uxPriority);
}
else
{
mtCOVERAGE_TEST_MARKER();
}
/* 任务被挂接在事件列表中 */
if(listLIST_ITEM_CONTAINER(&(pxTCB->xEventListIt