FreeRTOS приоритет 1 особенный? - PullRequest
1 голос
/ 20 июня 2019

FreeRTOS приоритет 1 особенный?

В моей системе у меня 6 приоритетов 0-5.Я знаю idle pro на 0.

Я назначаю задачу на 1, другие на 2-5. Из времени процессора и информации IDEL pro, я мог бы знать, что у процессора достаточно времени, чтобы выполнить все про.

Я обнаружил проблему в том, что задача в 1 не могла работать в нужное время, частота 10 Гц, но я обнаружил, что иногда она не работает.может быть 8 или ниже 10, даже ниже 1 Гц.

когда я задаю задачу на 2, все нормально, работает на 10 Гц.

Структура кода выглядит следующим образом:

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 Ответ

1 голос
/ 20 июня 2019

Недостаточно информации, чтобы ответить на этот вопрос.У вас довольно большая настройка, учитывая количество ваших задач.

Одна вещь:

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 задачи!) И слишком мало информации, чтобы действительно ответить на ваш вопрос.

...