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