本文主要是介绍1815_ChibiOS中的虚拟定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)
1. 这个功能其实类似于FreeRTOS的设计,在FreeRTOS中也有这样的设计。
2. 一次性的定时器,这个不仅在FreeRTOS中见过,在我用过的一些商用的操作系统中也有。
3. 虚拟定时器的操作方法有启动、提前停止或者到达定时时间之后触发一个回调。
4. 由于回调动作都是从ISR中触发的,因此涉及到的API调用需要满足I类的接口要求。
5. 如果采用tick的模式来实现有几点不好的地方:负荷高、精度差、会给系统增加抖动且功耗会增加。
1. 如果采用无tick的模式,那么可以提供一些好的特点:低功耗、抖动影响小、精度更高。
2. 但是,tickless的模式也有一些需要考虑的弊端,比如说:实现起来更复杂;需要硬件间似乎器的支持,虽然16bit的计数器就基本满足了,但是建议使用32bit的计数器;行为与其他的实现模式略有不同;可能会增加内核的大小等。
3. 关于这部分的API中有两个需要单独注意一下,一个是这个需要初始化。其实,对等其他的OS可能叫做创建,但是习惯了之前的思维模式可能这里的初始化会意识不到。另一点就是这里提供了一个定时器已经设置好了的情况下的快速reset方法。
这里的这种设计,实现不断的LED驱动点亮的效果有点添油燃灯的感觉。通过不断地触发来进行续命。
如何实现一个重复的翻转触发?这里的例子提供的方式是不断重新设置软定时器,这样回调之中调用回调就可以一直触发。这种设计是十分有趣的。
这个例子的前面有一段说明,解释这样的设计可以通过一个命令就实现这个LED的闪烁功能的开启。最初没有理解是什么概念,后来仔细理解了一下。应该是这里提供的代码并不是顺序执行的,只是提供了两段代码来说明如何进行这个功能的启动以及关闭。
如果想要让这个LED闪烁,只需要设置激活这样的一个虚拟定时器即可。在回调中,它会实现自己的重复触发。但是无论什么时候,停止这个虚拟计数器并且关闭LED都可以启动一个停止处理的效果。
这篇关于1815_ChibiOS中的虚拟定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!