1296_FreeRTOS中的几个超时处理接口实现分析

全部学习汇总: GreyZhang/g_FreeRTOS: learning notes about FreeRTOS. (github.com)

第二部分代码是这里的一个关键的数据结构,其实就是记录了两个基础的信息。而这个接口,则是两个基础信息的更新操作。

这个接口跟上面的接口实现差不多,只是抛弃了中断保护。

如果任务是无限阻塞,那么就不会出现超时的情况。如果不是无限阻塞,那么就需要查询上面的两个基本信息。如果是溢出的数据增加,那么说明出现了计数器的溢出。xTimeOnEntering本身是记录了一个开始的时间参考点,这个也会用于做为进行超时的判断的依据。

如果计数器出现了溢出变化,而且现在的tick计数器大于之前的标记时间点,这个可能是超时了一轮计数器范围以上了。肯定是已经出现了溢出。如果不是上面的情况,看执行时间,如果没有超过等待时间那么就没有出现超时,否则出现了超时。

从上面的逻辑看,似乎有一个逻辑被忽略掉了。那就是tick计数器出现了回滚,但是执行经过的时间没有超过指定的阻塞时间的时候。这个情况其实是不需要去处理的,原因不是这个情况不存在而是超时相关的接口信息的更新机制。这些接口相关的信息的更新有一些不是由tick直接驱动的,而是受到delayed task list的处理驱动的。比如,在下面的接口之中。

之前,上面的这俩接口理解起来还是有一些糊涂的。现在看来基本清楚了,其实计数器的溢出意味着一次处理链表的切换。而设置下一次的接触阻塞时间只不过是链表交换后找到的一个新的时间刻度而已。

最后,增加一个接口的分析。这个接口只是一个状态赋值,自然是很简单的了。其实只是为了提供一个标注的功能而不是一个查询的接口。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值