FreeRTOS优先级1是否特殊?

时间:2019-06-20 03:24:46

标签: c scheduled-tasks stm32 freertos

FreeRTOS优先级1特殊吗?

在我的系统中,我有6个优先级0-5。我知道空闲专家为0。

我在1处分配任务,在2-5处分配任务。从cpu时间和IDEL专业人士信息中,我可以知道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
4   B   2   179 0.0242588   SYS_MONITOR_run
5   R   1   303 0.0142761   SYS_CLI_SERV_run
6   S   3   283 0.0000000   LOG_cmd_serv
7   S   2   211 0.2886269   LOG_write_serv
8   B   3   153 0.2118190   LOG_most_50hz
9   S   3   201 0.0000000   RADIO_decode
10  B   3   126 0.1288428   RADIO_process
11  B   2   196 0.0772956   RADIO_process_aux
12  S   3   415 0.4776628   MIXER_run
13  S   3   169 0.4424228   MOTORS_run
14  S   3   371 0.8374434   MODE_CTRL_run
15  S   3   343 0.0000000   ARM_CTRL_req_run
16  B   2   347 0.0137783   ARM_CTRL_auto_run
17  B   3   137 0.2266569   LAND_DECT_run
18  S   3   407 0.4652265   ATTI_CTRL_run
19  S   3   419 0.3744379   RATE_CTRL_run
20  B   2   411 0.2941673   MAV_input_serv
21  B   2   323 0.3829140   MAV_output_serv
22  B   2   473 0.0374897   MAV_stream_serv
23  B   2   396 0.0025562   MAV_hrtbt_serv
24  S   2   477 0.0000000   MAV_req_serv
25  B   2   213 0.1037065   PAYLOAD_run
26  B   3   197 0.0423389   FAILSAFE_update
27  B   3   209 0.0483238   FENCE_run
28  B   3   175 0.0065178   BATT_run
29  S   3   217 0.0000000   CLOCK_run
30  B   3   213 0.0727151   LIGHT_CTRL_run
31  S   3   763 11.7553119  CUR_POINT_run
32  B   4   339 7.0509743   SENSOR_update_imu
33  B   3   433 0.0510168   SENSOR_update_baro
34  B   3   421 0.0687697   SENSOR_update_compass
35  B   3   429 0.1039878   SENSOR_update_gps
36  B   2   417 0.0329442   SENSOR_update_battery
37  B   2   201 0.0206714   NOTIFY_run
38  S   3   475 0.0000000   TEMP_DRIFT_run
39  B   3   459 0.0591755   m8n decode serv
40  B   2   207 0.2241918   cloader
41  B   3   197 0.8418054   IST8310_30_deamon
42  B   3   197 0.8042585   IST8310_24_deamon
43  B   3   197 0.3707146   MS5611_0_deamon
44  B   2   475 0.5381515   usbtx_serv
Heap   : Total 491520   , Used 193696   , Remain 297824
DmaHeap: Total 16384    , Used 2048 , Remain 14336

1 个答案:

答案 0 :(得分: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个任务!),信息太少,无法真正回答您的问题。