freertos 源码详解五 任务的挂起删除和恢复

本文深入探讨了FreeRTOS中任务删除的过程,包括通过任务句柄获取任务控制块,从就绪列表中移除任务,处理事件列表,以及将任务添加到等待终止列表等关键步骤。文章详细解释了如何安全地删除任务,无论是删除自身还是其他任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务的删除vTaskDelete()

1、根据任务句柄获取任务控制块,如果句柄为NULL,表示删除任务本身。

pxTCB = prvGetTCBFromHandle( xTaskToDelete );

#define prvGetTCBFromHandle( pxHandle ) ( ( ( pxHandle ) == NULL ) ? ( TCB_t * ) pxCurrentTCB : ( TCB_t * ) ( pxHandle ) )

2、将要删除的任务从就绪列表中移除,如果优先级下只有一个任务,就复位该优先级。
3、如果任务等待某些事件,就将任务从相应的事件列表中移除。
if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
{
( void ) uxListRemove( &( pxTCB->xEventListItem ) );
}
4、
如果删除的是任务自身,那么将任务添加到xTasksWaitingTermination

if( pxTCB == pxCurrentTCB )
{vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xStateListItem ) );
++uxDeletedTasksWaitingCleanUp;
portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending );
}

如果不是任务自身
–uxCurrentNumberOfTasks;
prvDeleteTCB( pxTCB );

prvResetNextTaskUnblockTime();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值