系統任務
空閒任務
空閒任務特點:
1. 空閒任務是ucosiii建立的第乙個任務。
2. 空閒任務是ucosiii必須建立的。
3. 空閒任務優先順序總是為os_cfg_prio_mak-1。
4. 空閒任務中不能呼叫任何可使空閒任務進入等待態的函式!
//在osinit()中呼叫:
os_idletaskinit(p_err);
//在裡面通過ostaskcreate()建立空閒任務
//空閒任務函式
os_idletask()
時鐘節拍任務
時鐘節拍任務用來跟蹤任務延時和任務等待超時,任務函式為os_ticktask(),是ucosiii必須建立的乙個任務,任務優先順序用巨集os_cfg_tick_task_prio來定義 ,一般時鐘節拍任務的任務應該設定乙個相對較高的優先順序。
統計任務
在ucosiii中統計任務可用來統計cpu的使用率、各個任務的cpu使用率和各任務的堆疊使用情況,預設情況下統計任務是不會建立的。如果要開啟統計任務的話需要做如下步驟:
1、將巨集os_cfg_stat_task_en置1。
2、必須在main函式建立的以乙個任務也是唯一的乙個應用任務裡面呼叫函式osstattaskcpuusageinit()。
3、統計任務的優先順序通過巨集os_cfg_stat_task_prio來設定,一般設定os_cfg_prio_max-2,也就是倒數第二個優先順序。
*通過呼叫ostaskstkchk()得到每個任務堆疊的使用情況
*在tcb中的stkused和stkfree 檢視當前堆疊的使用情況
定時任務
ucosiii提供軟體定時器功能,定時任務是可選的,將巨集os_cfg_tmr_en設定為1就會使能定時任務,在osinit()中將會呼叫函式os_tmrinit()來建立定時任務。定時任務的優先順序通過巨集os_cfg_tmr_task_prio定義,alientek預設將定時器任務優先順序設定為2。
中斷服務管理任務
當把os_cfg.h檔案中的巨集os_cfg_isr_post_deferred_en置1就會使能中斷服務管理任務,當isr(中斷服務函式)呼叫ucosiii提供的「post」函式時,要傳送的資料和傳送的目的地都會存入乙個特別的緩衝佇列中,當所有巢狀的isr都執行完成以後ucosiii會做任務切換,執行中斷服務管理任務,該任務會把快取佇列中存放的資訊重發給相應的任務。這樣做的好處就是可以減少中斷關閉的時間,否則,在isr中還需要把任務從等待列表中刪除,並把任務放入就緒表,以及做一些其他的耗時操作。
中斷服務管理任務的優先順序永遠為0,不可更改!
*在中斷開啟和關閉期間,會遮蔽掉幾乎所有的中斷。如果時間太長,會影響ucos的執行
鉤子函式
鉤子函式一般主要是用來擴充套件其他函式(任務)功能的,鉤子函式有如下幾個:鉤子
解釋1、osidletaskhook()
空閒任務呼叫這個函式,可以用來讓cpu進入低功耗模式
2、osinithook()
系統初始化函式osinit()呼叫此函式。
3、osstattaskhook(),統計任務每秒中都會呼叫這個函式
此函式允許你向統計任務中新增自己的應用函式。
4、ostaskcreatehook()
任務建立的鉤子函式。
5、ostaskdelhook()
任務刪除的鉤子函式。
6、ostaskreturnhook()
任務意外返回時呼叫的鉤子函式,比如刪除某個任務
7、ostaskswhook()
任務切換時候呼叫的鉤子函式。
8、ostimetickhook()
滴答定時器呼叫的鉤子函式。
UCOS iii 任務排程
任務排程的時機 1 當前任務給其他任務發訊號,結束時呼叫。任務呼叫提交服務函式 os?post 傳送訊號量或訊息給其它任務時排程發生 2 任務呼叫ostimedly 或ostimedlyhmsm 如果延時引數不是0,排程發生。排程會在該任務被放入掛起佇列後馬上執行。3 任務所等待的事件發生或超時。4...
uc OS III任務的理解
在實際應用中一般是將工作拆分為多個任務的,並且每個任務都是可靠的。在使用uc os就可以很好的解決這個問題,任務又叫執行緒,在對於單個cpu來說,在任何時刻,都是只能有有乙個任務被執行。uc os iii 支援多工且對任務數量沒有限制,任務數僅取決於處理器記憶體的大小 ram 多任務排程是任務間占用...
UCOSIII的任務狀態
1 休眠態 任務已經在cpu的flash中了,但是還沒有交給ucosiii管理。2 就緒態 系統為任務分配了任務控制塊,並且任務已經在就緒表中登記,這時這個任務就具有了執行的條件,此時任務的狀態就是就緒態。3 執行態 任務獲得cpu的使用權,正在執行。任何時刻只能有乙個任務處於執行態。4 等待態 正...