FreeRTOS 优先级 1 是特殊的吗?

Posted

技术标签:

【中文标题】FreeRTOS 优先级 1 是特殊的吗?【英文标题】:FreeRTOS priority 1 is special? 【发布时间】:2019-11-02 20:03:02 【问题描述】:

FreeRTOS 优先级 1 很特殊?

在我的系统中,我有 6 个优先级 0-5。我认识 0 点的空闲专业人士。

我在 1 分配一个任务,其他在 2-5 分配。从 cpu 时间和 IDEL pro 信息,我可以知道 cpu 有足够的时间来完成所有任务。

我发现一个问题,1的任务不能在正确的时间工作,频率是10Hz,但我发现有时它不能工作。可能是 8 或低于 10,甚至低于 1Hz。

当我将任务设置为 2 时,没关系,以 10Hz 工作。

代码结构如下:

void SYS_MONITOR::run()
    int ret = 0;

    while(1)
        vTaskDelayUntil(&last_wake_time, SYS_MONITOR_RUN_INTERVAL_MS/portTICK_RATE_MS);
dosomething....

ID  State   Prio    Mark    CPU(%)      Name

1   S   1   261 0.0000000   God
2   R   0   109 69.6136779  IDLE
3   S   5   470 3.9053585   Tmr Svc
...
...
44  B   2   179 0.0242588   SYS_MONITOR_run
Heap   : Total 491520   , Used 193696   , Remain 297824
DmaHeap: Total 16384    , Used 2048 , Remain 14336

【问题讨论】:

【参考方案1】:

没有足够的信息来回答这个问题。 通过查看您拥有的任务数量,您的设置相当大。

一件事:

1   S   1   261 0.0000000   God
 .....
4   B   2   179 0.0242588   SYS_MONITOR_run
5   R   1   303 0.0142761   SYS_CLI_SERV_run

您至少有 2 个优先级为 1 的任务。如果您的 SYS_MONITOR_run 也是 1 并且在您将其优先级提高到 2(更高)后开始“更好”地工作,这并不奇怪。

这取决于您的调度程序配置,同等优先级任务如何获得运行机会,例如:您是否有时间在同等优先级任务上进行循环或 FIFO 切片?那是一个。 ...

第二,您的设置很复杂(44 个任务!)而且信息太少,无法真正回答您的问题。

【讨论】:

谢谢。问题任务是SYS_MONITOR_run,当SYS_MONITOR_run工作时,优先级1上帝和SYS_CLI_SERV_run通常不起作用。所以你可以认为只有一个优先级1的任务。 44 任务对于 FreeRTOS 来说太多了??但是从空闲的cpu使用可以看出它有时间做更多的事情吗? 我并没有说“对于 FreeRTOS 来说太多”;我想指出的是,我觉得很难用你提供的信息来回答你的问题,因为你的设置很大(44 个任务不是一个基于 RTOS 的小型系统)

以上是关于FreeRTOS 优先级 1 是特殊的吗?的主要内容,如果未能解决你的问题,请参考以下文章

[FreeRTOS入门] 1.CubeMX中FreeRTOS配置参数及理解

FreeRTOS 任务优先级和堆栈大小

[FreeRTOS].FreeRTOS CortexM3 M4中断优先级设置总结

Cube FreeRTOS操作系统Task优先级与中断优先级的关系是怎样的

FreeRTOS - 中断使用注意

FreeRTOS和Ucos在任务优先级的区别