任務的建立與刪除,掛起與恢復

2021-09-22 19:56:00 字數 2370 閱讀 8342

通過乙個小例子來了解ucos任務的建立刪除,掛起和恢復。

建立三個任務,開始任務用於建立另外兩個任務,任務1led01s閃爍一次,並在串列埠輸出「任務1已經執行的次數「,任務二在任務執行5的倍數次時執行1次。

先是任務的建立,主要是定義任務優先順序,任務堆疊大小,任務控制塊,任務堆疊以及任務函式,注意不同任務的優先順序最好不同 

//任務優先順序

#define start_task_prio 3

//任務堆疊大小

#define start_stk_size 128

//任務控制塊

os_tcb starttasktcb;

//任務堆疊

cpu_stk start_task_stk[start_stk_size];

//任務函式

void start_task(void *p_arg);

//任務優先順序

#define task1_task_prio 4

//任務堆疊大小

#define task1_stk_size 128

//任務控制塊

os_tcb task1tasktcb;

//任務堆疊

cpu_stk task1_task_stk[task1_stk_size];

//任務函式

void task1_task(void *p_arg);

//任務優先順序

#define task2_task_prio 5

//任務堆疊大小

#define task2_stk_size 128

//任務控制塊

os_tcb task2tasktcb;

//任務堆疊

cpu_stk task2_task_stk[task1_stk_size];

//任務函式

void task2_task(void *p_arg);

主函式main()函式中初始化函式

os_err err;

cpu_sr_alloc(); //為進入和退出臨界區申請乙個變數

delay_init();

uart_init(115200);

nvic_prioritygroupconfig(nvic_prioritygroup_2);

led_init();

osinit(&err); //初始化osiii

os_critical_enter(); //進入臨界區

初始化完成進入臨界區後,用函式ostaskcreate()開始建立任務

ostaskcreate ((os_tcb*          )&starttasktcb,           //任務控制塊

(cpu_char* )"start task", //任務名

(os_task_ptr )start_task, //任務函式名

(void* )0,

(os_prio )start_task_prio, //任務優先順序

(cpu_stk* )&start_task_stk[0], //任務堆疊首位址

(cpu_stk_size )start_stk_size/10, //一般為任務堆疊大小的十分之一

(cpu_stk_size )start_stk_size, //任務堆疊大小

(os_msg_qty )0,

(os_tick )0,

(void* )0,

(os_opt )os_opt_task_stk_chk|os_opt_task_stk_clr,

(os_err* )err); //儲存錯誤型別

建立完成退出臨界開啟任務

os_critical_exit();    //退出臨界區

osstart(&err);

主函式main函式編輯完後接下來是三個任務函式的編寫

任務1用於建立另外兩個任務,建立完成刪除當前任務

void start_task(void *p_arg)

//任務1執行5的倍數次時恢復執行任務2

if(task1_num%5==1)

//任務2執行1次後掛起任務2

}}

任務2函式

void task2_task(void *p_arg)

}

ucos 任務的掛起與恢復

看看任務掛起的函式 if os task suspend en 0 int8u ostasksuspend int8u prio if prio os lowest prio endif os enter critical if prio os prio self else if prio ostc...

任務的建立 掛起和恢復

ucosii有兩個建立任務的函式 ostaskcreate 和ostaskcreateext 其中ostaskcreateext 是ostaskcreate 的擴充套件。並提供了一些附加功能。int8u ostaskcreate void task void pd 指向任務的指標 void pdat...

C OS II 示例 ucos任務的掛起與刪除

1 設計乙個只有乙個任務mytask的應用程式。2 在 1 的任務mytask中再建立乙個任務yourtask。要求當任務yourtask執行20次後,掛起任務mytask 當任務yourtask執行40次後,恢復任務mytask。要求任務mytask和任務yourtask執行一段時間後,使任務my...