STM32 FreeRTOS中延时可以用vTaskDelay,但是计时,定时该如何实现?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 FreeRTOS中延时可以用vTaskDelay,但是计时,定时该如何实现?相关的知识,希望对你有一定的参考价值。

参考技术A 你指的计时和定时应该是要用在从一个标志开始计时到另一个标志停止计时,或者
从现在开始
定时一个精确时间t,以执行某个动作?
如果是这样,只能用硬件定时器来实现,操作系统里用在延时的计时都是根据自己的节拍为参考的,你可以用tick
count来获取两次时刻的节拍数差来获取时间,但是这样的话到达某一时间并不能促使你的动作发生,需要你自己不停去检测。

用STM32CubeMx创建的FreeRTOS可以运行多少个实例

我第一次使用STM32CubeMx,创建了一个简单的FreeRTOS代码。硬件平台是STM32F103RCT6。根据原代码,在freertos.c文件内的函数 MX_FREERTOS_Init(void)内,调用osThreadCreate创建线程,默认生成的StartDefaultTask线程。我按照StartDefaultTask的代码,在 MX_FREERTOS_Init(void)内用osThreadCreate创建另外两个线程,分别为LEDTask和MeasureTempTask。
当三个线程同时创建的话,OS跑不起来,连StartDefaultTask都没有执行。
如果,只创建其中任意的两个线程,OS就可以跑起来。
FreeRTOS本身可以执行多个线程,但STM32CubeMx好像是用CMSIS来重新封装FreeRTOS,是不是CMSIS限制了执行线程的数量?

另外,我测试过,如果在StartDefaultTask线程内,创建另外的两个线程,OS除了执行StartDefaultTask线程外,只执行另外创建的第一个线程。
参考技术A PERL5预定义了三个子程序,分别在特定的时间执行. 它们是: BEGIN子程序在程序启动时被调用; END子程序在程序结束时被调用; AUTOLOAD子程序在找不到某个子程序时被调用. 你可以自己定义它们,以在特定时间执行所需要的动作. 如: BEGIN print("Hi!...

以上是关于STM32 FreeRTOS中延时可以用vTaskDelay,但是计时,定时该如何实现?的主要内容,如果未能解决你的问题,请参考以下文章

stm32 freertos 中回调函数需要做个任务么

用STM32CubeMx创建的FreeRTOS可以运行多少个实例

stm32中跑freertos,请问在该板子上能运用fopen()之类的C库函数吗?

ESP32嵌入式FreeRtos--Task

STM32 FreeRTOS 与 LibOpenCM3

免费教程STM32MP157之FreeRTOS系统篇2:FreeRTOS 互斥信号量