FreeRTOS(V8.0.1)系统之vTaskDelete()

<pre name="code" class="objc">void vTaskDelete( TaskHandle_t xTaskToDelete )
	{
	TCB_t *pxTCB;

		taskENTER_CRITICAL();
		{
			//若传进来的值为NULL则用此函数的就是任务本身。
			pxTCB = prvGetTCBFromHandle( xTaskToDelete );//根据任务句柄获取对应任务的句柄或TCB

			//将任务从就绪链表中移除放入到终止链表中去。调度器将终止这个任务的执行。
			//空闲任务将检测这个终止链表并通过调度器释放任何可以释放的内存(堆栈,TCB)
			if( uxListRemove( &( pxTCB->xGenericListItem ) ) == ( UBaseType_t ) 0 )//若链表中剩余链表项为0,即将链表从就绪链表中删除成功。
			{
				taskRESET_READY_PRIORITY( pxTCB->uxPriority );//将任务的优先级重新设。
			}
			else
			{
				mtCOVERAGE_TEST_MARKER();
			}

			//若任务同时也在事件链表中。
			if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )
			{
				( void ) uxListRemove( &( pxTCB->xEventListItem ) );//将任务从等待的事件链表中删除
			}
			else
			{
				mtCOVERAGE_TEST_MARKER();
			}
			//将任务添加到终止链表中,Idle 任务会将其真正删除(prvCheckTasksWaitingTermination) 
			vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xGenericListItem ) );

			++uxTasksDeleted;//Idle 任务根据这个变量知道有需要删除的任务

			uxTaskNumber++;//通知 kernel aware debuggers 更新任务列表

			traceTASK_DELETE( pxTCB );
		}
		taskEXIT_CRITICAL();
		//如果删除的是当前任务,则需要任务调度

		if( xSchedulerRunning != pdFALSE )//若任务调度器正在执行
		{
			if( pxTCB == pxCurrentTCB )//若删除的任务TCB就是当前的任务TCB
			{
				configASSERT( uxSchedulerSuspended == 0 );

				portPRE_TASK_DELETE_HOOK( pxTCB, &xYieldPending );
				portYIELD_WITHIN_API();//进行任务切换
			}
			else//若删除的任务TCB不是当前任务的TCB
			{
				taskENTER_CRITICAL();
				{
					prvResetNextTaskUnblockTime();//重新设置下一个唤醒的时间。
				}
				taskEXIT_CRITICAL();
			}
		}
	}


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS v2022是一个开源的实时操作系统(RTOS),是由专业开发团队维护的。它提供了内存保护、多任务处理、中断处理等功能,能够满足各种嵌入式系统的需求。 FreeRTOS v2022具有以下特点: 1. 高可扩展性:FreeRTOS v2022支持多任务处理,可以同时运行多个任务,并且可以根据需求动态添加或删除任务。这使得FreeRTOS v2022非常适用于复杂的嵌入式系统。 2. 内存保护:FreeRTOS v2022提供内存管理功能,可以为每个任务分配独立的内存空间,防止任务之间的干扰和冲突。这大大提高了系统的稳定性和安全性。 3. 中断处理:FreeRTOS v2022为中断处理提供了完善的机制,可以快速响应和处理各种中断请求。同时,它还提供了中断屏蔽和优先级管理功能,确保不同中断的执行顺序和优先级。 4. 特定硬件支持:FreeRTOS v2022支持多种嵌入式平台,包括ARM、x86等。它提供了与特定硬件相关的驱动程序和接口,以便于开发者快速移植和调试。 5. 丰富的功能库:FreeRTOS v2022还提供了丰富的功能库,包括队列、信号量、事件标志等,方便开发者在实时任务中实现任务间的通信和同步。 总之,FreeRTOS v2022是一个功能丰富、可靠稳定的实时操作系统,能够满足各种嵌入式系统的需求。它的开源特性也使得开发者可以自由定制和扩展,为嵌入式系统的开发提供了很大的便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值