1295_FreeRTOS中几个事件相关接口实现分析

这篇博客探讨了FreeRTOS中事件相关的接口实现,指出事件实际上是任务阻塞状态的一种形式,涉及任务调度和优先级排序。文章分析了两种接口在不同场景下的应用,讨论了它们如何影响实时性和任务就绪。尽管事件处理可能不保证严格的实时性,但它们在系统中的作用不容忽视。
摘要由CSDN通过智能技术生成

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

今天分析两个事件相关的接口实现,从代码实现以及调用的情况看其实队列也不过是事件的特殊形式罢了。

上面的接口实现很简单,关键的操作为:把当前的任务通过事件链表元素绑定插入到事件链表之中,这个过程中涉及到了后续调度时机的排序。接着,通过delayed list实现了当前任务的阻塞状态切换。

这个接口实现的功能意图跟上面相似,不相同的地方在于前面的接口是在任务调度器工作的情况下执行的,因此可能会涉及到后续的任务调度,排序由此是必然的。而这个,基本上可以理解为是一个缓冲之举,临时无序加入到了一个阻塞处理队列之中。

这两个都是事件处理所用的接口,整个过程中没有涉及到直接的调度切换请求。其实,从这个角度上讲事件似乎是一个实时性略低的一个策略实现。而第一个接口目前看来只在队列实现的时候用到了,由此也基本可以知道队列的实时性获取也不见得非常好。

通过上面的代码分析来看,其实事件链表本质上也是任务阻塞状态的链表。如果从这个链表中移除,代表着接下来会有新人就绪任务产生。当然,如果是调度器挂起了,这个处理过程会缓冲执行。既然涉及到任务的就绪,那么就可能会成为最高优先级的就绪任务,既然触发任务调度的请求。

设计的实现其实还是很好理解的,但是这样的设计如果伴随着任务调度那岂不是会有优先级错乱?毕竟,这里的任务链表其实是没有经过排序的。从接口调用看,只在事件组的实现中用到过,获取还得结合后面事件组的用途分析以及使用的背景来理解一下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值