FreeRTOS软件定时器,相对前面的内容来说,软件定时器还是比较简单的,我们简单测试一下
因为是简单介绍,所以原理和源码的分析不会那么详细,具体可以根据文中API查看源码
使用起来记住创建,启动,回调函数核心步骤即可
..增加测试Demo,再次遇到溢出问题说明,定时器数量问题说明 2021/12/2
目录
问:什么时候使用软件定时器,什么时候使用硬件定时器?
软件定时器可以解决硬件定时器数量不够的问题,理论上软件定时器可以很多,每个芯片的定时器外设是有限的,如果硬件定时器不够用,可以使用软件定时器。
但是,软件定时器相对硬件定时器来说,精度没有那么高(为什么不高?因为它以系统时钟为基准,系统时钟中断优先级又是最低,容易被打断)。 对于需要高精度要求的场合,不建议使用软件定时器。
同时软件定时器 是需要占用一部分内存空间的,用到的软件定时器数量越多,内存占用越大。 如果RAM空间不够用,不能使用软件定时器。
当然,使用软件定时器的程序还有一个好处就是方便移植,不同芯片的硬件定时器的设置代码是不一样的,在条件允许的情况下使用软件定时器,那么不同平台之间的的代码移植起来相对方便一点。
一、FreeRTOS软件定时器基础
1.1 时钟来源
系统的时钟周期,对于FreeRTOS而言,就是 TICK_RATE_HZ 对应的值。在以上的测试我们使用都是设置为默认的1000,那么系统的时钟节拍周期就为 1ms(1s 跳动 1000 下,每一下就为 1ms)。
1.2 运行原理
FreeRTOS 所创建的软件定时器共用一个任务prvTimerTask
(也叫守护任务 Daemon)和队列,定时器处理API函数最终都是通过给队列发送信息,在任务中接收处理。
创建prvTimerTask
任务:
在文章 FreeRTOS记录(六、FreeRTOS消息队列—Enocean模块串口通讯、RAM空间不足问题分析) 中的 第 5小结:5 、RAM空间不足问题 中讲到过只要使能了使用定时器,系统就会自动产生一个任务,占用内存空间,说的就是这个任务: