c - FreeRTOS 优先级 1 有什么特别之处?

标签 c scheduled-tasks stm32 freertos

FreeRTOS 优先级 1 是特殊的吗?

在我的系统中,我有 6 个优先级 0-5。我认识 0 的空闲 pro。

我在 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   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 个任务!)而且信息太少,无法真正回答您的问题。

关于c - FreeRTOS 优先级 1 有什么特别之处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678544/

相关文章:

c - 在 VC 6 中构建源代码时出错

c - 在C中为char数组(String)赋值

angularjs - NodeJS 周期性任务

arm - STM32 输入捕捉间接模式

ios - HTML5 视频播放时 CALayerInvalidGeometry 异常

c - 初始化带有数组的结构时出现段错误

c++ - 如何在不提示输入密码的情况下设置计划任务

mysql - 在 mysql 中创建每日星期日报告

c - 在双缓冲区交换期间处理 UART ISR

c - 如何读取ARM Linker生成的<Static Call Graph>?