FreeRTOS-任务删除、挂起、恢复源码分析

由于后面的源码分析会涉及到一些任务的操作函数,所以这里先分析一下任务的一些相关操作,包括任务的删除、挂起、恢复操作。

任务删除:

#if ( INCLUDE_vTaskDelete == 1 )

	void vTaskDelete( TaskHandle_t xTaskToDelete )
	{
	TCB_t *pxTCB;

		/* 进入临界区 */
		taskENTER_CRITICAL();
		{
			/* 如果没有指定删除的任务(参数为NULL),则默认删除当前任务(即自己删自己),否则删除形参指定的任务 */
			/* #define prvGetTCBFromHandle( pxHandle ) ( ( ( pxHandle ) == NULL ) ? pxCurrentTCB : ( pxHandle ) )
 */
			pxTCB = prvGetTCBFromHandle( xTaskToDelete );

			/* 将任务从就绪列表中删除 */
			if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )
			{
				/* 清除对应的就绪标志 */
				taskRESET_READY_PRIORITY( pxTCB->uxPriority );
			}
			else
			{
				mtCOVERAGE_TEST_MARKER();
			}

			/* 如果任务有等待事件(如信号量、队列等),将任务从相应的事件列表中删除 */
			/* #define listLIST_ITEM_CONTAINER( pxListItem ) ( ( pxListItem )->pxContainer ) */
			if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
			{
				( void ) uxListRemove( &( pxTCB->xEventListItem ) );
			}
			else
			{
				mtCOVERAGE_TEST_MARKER();
			}

			/* 递增任务数量,空闲任务根据这个变量知道有任务需要删除 */
			uxTaskNumber++;

			if( pxTCB == pxCurrentTCB )
			{
				/* 如果要删除的任务是当前任务(即自己删自己) */
				
				/* 将任务插入到等待删除列表,不能立即删除的原因是由于任务控制块和堆栈的内存不能被
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值