1274_FreeRTOS中删除任务功能的实现

全部学习汇总: GitHub - GreyZhang/g_FreeRTOS: learning notes about FreeRTOS.

顺着task.c的文件,逐个看看当前工程中已经配置出来了的功能。这一次看看任务删除vTaskDelete()接口的实现。

这个接口的使能是需要配置一下的,INCLUDE_vTaskDelete设置为1的时候会生效。现在的工程中,这个是生效了的。任务删除接口开始的时候,先执行了临界保护,应该是防止任务链表等被篡改。接下来,根据任务的句柄找到相应的TCB。

根据句柄获取TCB的时候有2种情况,第一个是传入的句柄信息有效,那么直接转成相应的TCB。如果是NULL,那么直接取当前的任务。

如果任务不是ready状态的话,这个操作的意义何在?或者,这个只是以防万一的一个清理操作?

清理事件列表,执行前首先判断是否等待事件的设置存在。

如果是删除当前任务,转给idle来处理,这里提供一部分信息。如果是删除其他任务,直接删除。把下一次的阻塞接触事件复位一下,防止任务误触发。这个接口具体的功能理解上还没有特别清晰,后面还得重新理解一下。

如果是删除当前的任务,这里接下来需要有一个PendSV的请求。

这个动作其实与任务创建多少是有点相反的,而处理的过程主要是做链表的处理。任务的创建最终是把任务放到了就绪任务链表中,因此这个删除能够找到的链表也就是就绪链表。一个TCB中可能会有多个链表元素,这些会提供不同的信息,比如调度的激活信息。响应的部分,应该会有官方的设计说明,回头或许可以找找看。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值