UCOSIII時間片輪轉排程

2022-03-18 22:35:29 字數 2432 閱讀 4985

os_rate_hz const  oscfg_tickrate_hz = (os_rate_hz  )os_cfg_tick_rate_hz;

#define os_cfg_tick_rate_hz 200u /* tick rate in hertz (10 to 1000 hz) */

時間片長度200hz,也就是乙個系統時鐘節拍5ms

串列埠實驗

為task1和task2分配2個時間片,分別做串列埠列印

ostaskcreate((os_tcb    * )&task1_tasktcb,      

(cpu_char * )"task1 task",

(os_task_ptr )task1_task,

(void * )0,

(os_prio )task1_task_prio,

(cpu_stk * )&task1_task_stk[0],

(cpu_stk_size)task1_stk_size/10,

(cpu_stk_size)task1_stk_size,

(os_msg_qty )0,

(os_tick )2, //2個時間片,2*5=10ms

(void * )0,

(os_opt )os_opt_task_stk_chk|os_opt_task_stk_clr,

(os_err * )&err);

ostaskcreate((os_tcb * )&task2_tasktcb,

(cpu_char * )"task2 task",

(os_task_ptr )task2_task,

(void * )0,

(os_prio )task2_task_prio,

(cpu_stk * )&task2_task_stk[0],

(cpu_stk_size)task2_stk_size/10,

(cpu_stk_size)task2_stk_size,

(os_msg_qty )0,

(os_tick )2, //2個時間片,2*5=10ms

(void * )0,

(os_opt )os_opt_task_stk_chk|os_opt_task_stk_clr,

(os_err * )&err);

void task1_task(void *p_arg)

}void task2_task(void *p_arg)

}

實驗現象

重新調整時間片個數

分配3個時間片,任務切換時間延長至15ms

ostaskcreate((os_tcb    * )&task1_tasktcb,      

(cpu_char * )"task1 task",

(os_task_ptr )task1_task,

(void * )0,

(os_prio )task1_task_prio,

(cpu_stk * )&task1_task_stk[0],

(cpu_stk_size)task1_stk_size/10,

(cpu_stk_size)task1_stk_size,

(os_msg_qty )0,

(os_tick )3, //3個時間片,3*5=15ms

(void * )0,

(os_opt )os_opt_task_stk_chk|os_opt_task_stk_clr,

(os_err * )&err);

實驗現象

時間片輪轉排程演算法

include define max 10 struct task struct tasks max int counter 實際程序個數 int time counter 0 int poutput 排程結果輸出 int time int charge 判斷是否所有的程序都被執行過 int tim...

ucos iii如何使用時間片輪轉排程演算法

第一步 在mian 函式中開啟條件編譯 if os cfg sched round robin en osschedroundrobincfg def enabled,1,err endif 其中osschedroundrobincfg def enabled,1,err 函式引數一 def ena...

考研複習 時間片輪轉排程法

一直認為時間片輪轉排程法沒有什麼難度,直到做題的時候才發現這個排程方法有乙個需要注意的點。通常時間片輪轉的步驟是 將程序按照先來先服務的順序組成就緒佇列,後到達的程序從從隊尾插入,再進行時間片輪轉排程。但是實際情況可能是每個程序到達時間不同,會出現乙個執行了一部分的程序和新到達的程序同時存在的情況。...