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(); /* 任务调度 */
}
}
FreeRTOS 源码注释(vTaskSuspend)
最新推荐文章于 2025-05-25 23:19:12 发布