1269_STM32F103使用CubeIDE修改FreeRTOS的Tick源为MCU定时器

网友投稿 754 2022-11-25

1269_STM32F103使用CubeIDE修改FreeRTOS的Tick源为MCU定时器

1269_STM32F103使用CubeIDE修改FreeRTOS的Tick源为MCU定时器

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

其实,前面在调试分析的过程中已经做了一个版本的修改了。为了能够利用硬件的定时器来驱动FreeRTOS的Tick,之前在定时器的回调函数中增加了如下的修改:

其实,上次做的时候也就感觉出来了这里有改进空间。但是不知道为什么,当时的思维错乱看到了改进点但是没能够实现。

这个接口,其实是一个weak的模式。这样,重新定义一下也就可以实现对这个函数的覆盖了。只是,这里应该还会有几个全局量的冗余信息存在。

这样,增加上面的接口的重新设计。有了这个定义之后,上面的这个函数接口就会失效。

原来的这个接口中,增加的那个tick的函数接口也就可以取消了。因为上面新定义出来的函数在这里直接有一个调用存在。

我的工程中默认的task中刚好还有测试的打印代码,在这个基础上做一个测试的效果如上。看得出来,现在的OS调度已经奏效了。但是,这里的计数器的速度跟时间戳相比看得出来计数器的速度正好是2倍的速度。为什么呢?肯定还是默认的SysTick定时器还在工作。

这个接口,在调度器启动的时候会有这个定时器的处理。应该是两个tick都在工作导致的。这部分代码是OS的原始代码,不想去做大的变化。正好,这个接口的实现是weak,那么直接用一个无效的接口抑制一下就好了。

增加了一个这样的接口,重新测试之后计数器的周期恢复了正常。

这个STM32F103的工程,我并不想去为整个工程做一个代码上或者效率上的优化。只是借助于这个工程以及平台测试了解一下FreeRTOS的大概的机理。正好,这个也涉及到一个OS的接口调用,重新确认一下也是有一点收获的。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spark SerializedLambda错误的两种解决方案
下一篇:1272_FreeRTOS中的几个任务相关的链表
相关文章

 发表评论

暂时没有评论,来抢沙发吧~