打印
[开发工具]

FreeRTOS CubeMX卡在只运行第一个任务

[复制链接]
539|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-2-29 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 在用CubeMX创建的FreeRTOS,任务中如果使用HAL_Delay(1000);这样会导致无法切换任务,所以只能使用    osDelay(500);来延时
HAL_Delay(1000);


osDelay(500);


解决办法
osDelay是FreeRTOS(Real-Time Operating System)中的一个函数,用于实现任务的延时。FreeRTOS是一个开源的实时操作系统,专门用于嵌入式系统。osDelay函数允许任务挂起一段时间,然后由操作系统调度器在指定的时间后重新运行该任务。在等待期间,任务会被放入挂起状态,让其他任务有机会运行。

也就是说,当调用osDelay时,线程A进入阻塞态,此时任务控制器选择进入就绪态的线程B执行,循环往复,线程A、B同时被执行。我们可以将任务A和B进行如下改动,即可看到既打印A又打印B。

void A(void *argument)
{
  while (1)
  {
    printf("A\r\n");
    osDelay(1000);
  }
}

void B(void *argument)
{
  while (1)
  {
    printf("B\r\n");
    osDelay(1000);
  }
}

使用osDelay可能带来的问题
观察一下HAL_Delay和osDelay的函数原型:

/**
  * @brief This function provides minimum delay (in milliseconds) based
  */
__weak void HAL_Delay(uint32_t Delay);

/*
  Wait for Timeout (Time Delay).
*/
osStatus_t osDelay (uint32_t ticks);
可以看到HAL_Delay函数的目的是提供毫秒级别的延时,意味着当你输入HAL_Delay(500),硬件会尽量延时精确到500ms的时间。

与之不同的是,osDelay函数的输入是ticks。ticks是一个计时单位,表示任务将被挂起的时间长度。每个tick的时间取决于FreeRTOS配置的时钟节拍(tick)周期。例如,如果tick周期为1毫秒,那么传递参数ticks为10就会使任务挂起10毫秒。由此可见,osDelay函数延时的时间和一个ticks记时时间长度有很大关系。

那么如何确定一个ticks具体代表多长时间呢?首先我们应该找到用于配置的头文件,通常这个头文件名字叫做FreeRTOSConfig.h。其中,configTICK_RATE_HZ配置选项的值表示每秒钟系统时钟节拍(tick)的数量。configTICK_RATE_HZ的值一般默认被设置为1000,表示系统时钟每秒产生1000个tick,即每个tick的时间间隔为1毫秒,此时osDelay对单个任务延时的时间长度和HAL_Delay近似。

                引用自:FreeRTOS中osDelay和HAL_Delay的区别 - 知乎

2.中断中不能使用HAL_Delay(1000);由于sys的的中断优先级太低,所以,在其它中断里面无法获取时间
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/JasonKyro/article/details/134969922

使用特权

评论回复
沙发
digit0| | 2024-2-29 13:16 | 只看该作者
应该是滴答时钟配置的问题,之前我也遇到过。

使用特权

评论回复
板凳
LinkMe| | 2024-2-29 13:17 | 只看该作者
检查FreeRTOS系统的初始化代码,尤其是任务创建部分,确保所有任务都成功启动并加入到就绪队列中。

使用特权

评论回复
地板
ClarkLLOTP| | 2024-2-29 17:25 | 只看该作者
是不是优先级的问题啊

使用特权

评论回复
5
heisexingqisi| | 2024-2-29 22:18 | 只看该作者
多线程吗

使用特权

评论回复
6
Henryko| | 2024-2-29 22:24 | 只看该作者
hal库的延时不能用在rtos里

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15650

帖子

12

粉丝