關于RTX51 TINY的分析與探討
有了以上幾個函數的定義和實現,就可以應用等待信號量和釋放信號量來完成對共享資源的獨占。例如:
void job()_task_ id {
DDDD用戶代碼DDDD
wait_sem(task_id);//等待任務task_id的信號量
DDDD對共享資源使用代碼DDDD
release_sem(task_id);//釋放任務task_id的信號量
DDDD用戶代碼DDDD
}
應用信號量來實現共享資源的使用,不用禁止時間片輪轉和關閉T0中斷,可以有效地實現對共享資源的獨占;但增加了代碼,等待和釋放信號量花費了一定的時間,在具體應用中要視情況而定。
4 需要注意的問題
① 盡可能不使用循環(huán)任務切換。使用循環(huán)任務切換時要求有13個字節(jié)的堆棧區(qū)來保存任務內容(工作寄存器等)。如果由os_wait()函數來進行任務觸發(fā),則不需要保存任務內容。由于正處于等待運行的任務并不需要等待全部循環(huán)切換時間結束,因此os_wait()函數可以產生一種改進的系統(tǒng)響應時間。
② 不要將時鐘節(jié)拍中斷速率設置得太高,設定為一個較低的數值可以增加每秒的時鐘節(jié)拍個數。每次時鐘節(jié)拍中斷大約需要100~200個CPU周期,因此應將時鐘節(jié)拍率設定得足夠高,以便使中斷響應時間達到最小化。
③ 在os_wait()函數中有3個參數: K_TMO、K_IVL和K_SIG。其中對于K_TMO和K_IVL的使用要加以區(qū)別。在使用時,兩者似乎差別不是很大。其實不然,兩者存在很大的區(qū)別:K_TMO是指等待一個超時信號,只有時間到了,才會產生一個信號。它產生的信號是不會累計的,產生信號后,任務進入就緒狀態(tài)。而K_IVL是指周期信號,每隔一個指定的周期,就會產生一次信號,產生的信號是可以累計的。這樣就使得在指定事件內沒有響應的信號,通過信號次數的疊加,在以后信號處理時,重新得以響應,從而保證了信號不會被丟失。而通過K_TMO方式進行延時的任務,由于某種原因信號沒有得到及時的響應,那么這樣就可能會丟失一部分沒有響應的信號。不過兩者都是有效的任務切換方式,在使用時要根據應用場合來確定對兩者的使用。
結語
RTX51 TINY實時操作系統(tǒng)既能保證對外界的信息以足夠快的速度進行相應處理,又能并行運行多個任務,具有實時性和并行性的特點,因此能很好地完成對多個信息的實時測量、處理,并進行相應的多個實時控制。任務切換是RTX51 TINY的一個基本服務。本文對任務切換做了詳細的分析,在實際應用中還要對任務切換時的堆棧管理有一定了解,這樣才能更好地掌握任務切換的機制。共享資源的使用在多任務操作系統(tǒng)中是不可避免的,RTX51 TINY中沒有專門的處理共享資源函數,所以在實際應用中要視情況來應用文中提到的幾種方法。
參考文獻
[1] 朱珍民,隋雪青,段斌. 嵌入式實時操作系統(tǒng)及其應用開發(fā)[M]. 北京: 北京郵電大學出版社,2006:44-49.
[2] Keil Software Inc.RTX51 Tiny User’s Guide,2004.
[3] 徐愛鈞,彭秀華. 單片機高級語言C51 Windows環(huán)境編程與應用[M]. 北京:電子工業(yè)出版社,2001.
評論