ucos II 學習筆記



    之前有較多的接觸Linux下的學習,ucos II 接觸的比較少;在沒有真正學習的時候,我覺得嵌入式操作系統從大的原理上講都應該差不多,但是在真正接觸並閱讀了部分ucos的源代碼後,就覺得這兩者確實有些大的不同。

對新知識的學習,通過比較的方法可以有較深的理解,也可以更好的掌握它的特點,下面提出一些我學習的心得:

1. 嵌入式比較注重實踐,所以上手ucos時多做實驗必不可少,我用的是LPC1768的開發板,找了一些例程,根據自己的理解改了改代碼;軟件入門就是Hello world, 固件入門就是點亮Led了, 看着代碼按照自己的意圖控制着硬件運行,這感覺只有程序員自己才理解。

2. ucos II 優點是 可裁剪可定製, 生成的代碼僅佔15~20K,源代碼公開,容易掌握和使用,如果有Linux多進程通信的知識,那麼學起來應該比較簡單。相對於裸機開發,ucos II將系統分爲多個相對獨立的任務,降低了系統的複雜度,增加了系統的可擴展性;可剝奪型內核提高了系統的實時性,可以按照優先級對事件作出合理的響應。

3. ucos II的缺點是功能比較弱,比較適合較低端的芯片,自身不支持TCP/IP協議棧,沒有文件系統,不支持CPU時間片輪循;只適合做底層的、較簡單的、對實時性要求較高的一些應用;相對裸機開發需要合理的劃分系統的任務,需要開發人員同時熟悉系統的應用和系統自身的特點。

4.有一點不是很理解, 在使用ucos II 提供的任何功能之前,必須先調用OSInit()函數進行初始化。在main主函數中調用OSStart()啓動多任務之前,至少要先建立一個任務。否則應用程序會崩潰,難道系統不能空轉,這一點覺得不太合理。

    5. 典型的應用程序main函數如下所示:

void main(void)

/*-----硬件初始化,等用戶代碼初始化-----*/

    init_mcu();

    init_myInit();    

 

OSInit(); /* 初始化ucos II */

/*通過調用OSTaskCreate ( ) 或OSTaskCreateExt ( )創建至少一個任務;*/

OSTaskCreate(sample_Task, (void*)0, &sample_TaskStk[TASK_STK_SIZE - 1], 2 );

/*通過調用OSSemCreate() 創建信號量等任務通信方式;*/

CalcSem     = OSSemCreate(0);

OSStart(); /* 開始多任務調度!OSStart()永遠不會返回 */

上例中如果創建了多個(n個)任務,在main函數調用OSStart()後,操作系統就啓動了多任務調度,接管了CPU和其他資源的使用權,負責爲每個任務分配CPU使用權和使用時間,同時對共享資源進行管理。從宏觀上看,整個系統就象有多個執行的程序並行運行,每個程序都是無限循環的main函數。

在任一給定的時刻,ucos II的任務狀態只能是以下5種之一:

 睡眠態:指任務駐留在程序空間(ROMRAM),還沒有交給ucos II來管理。通過創建任務將任務交給ucos II。任務被刪除後就進入睡眠態。

 就緒態:任務創建後就進入就緒態。任務的建立可以在多任務運行之前,也可以動態的由一個運行的任務建立。

 運行態:佔用CPU資源運行的任務,該任務爲進入就緒態的優先級最高的任務。任何時刻只能有一個任務處於運行態。

 等待狀態:由於某種原因處於等待狀態的任務。例如,任務自身延時一段時間,或者等待某一事件的發生。

 中斷服務態:任務運行時被中斷打斷,進入中斷服務態。正在執行的任務被掛起,中斷服務子程序控制了CPU的使用權。


這時候我有一個疑問,每一個任務都是一個無線的循環,什麼時候進行狀態的切換,體現在代碼的什麼地方,進一步瞭解後瞭解到這個切換應該是通過時鐘節拍和進程間的通信來實現的。

6. 時鐘節拍,ucos II要求用戶提供一個週期性的時鐘源,來實現時間的延遲和超時功能,時鐘節拍應該每秒發生10~100/秒。時鐘節拍率越高,系統的額外負荷就越重;這個時鐘讓我想到了FPGA的系統時鐘,是內部各種信號時序的依據。

    7.任務間的通信,如果對Linux接觸較多,這點應該比較容易,包括信號量,互斥鎖,消息隊列等,消息郵箱在Linux中沒有,但都大同小異。


對於應用上的學習就總結這幾點,ucos II 不區分內核空間和應用空間,內存管理採用固定內存大小分配的方法避免了內存碎片的產生,其他的像任務調度,優先級判斷之類的系統調用通過源代碼的閱讀可以更深入的瞭解,由於中斷的存在,共享資源的原子操作應該多加註意,尤其是涉及硬件的操作,保證操作的過程不被打斷。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章