ucos ii系統的理解及與一個分時OS的對比

  本人對自己的定義一直是電子工程師,大學硬件水平一般,動手能力極差。不過業餘喜歡自學,偏偏有點懶,但也算三天打魚兩天曬網的掌握了AVR、51、PIC的開發。

 2014年,又開始了學習ucos ii(先學的是任哲的ucos ii那本書),學了一段時間,吭哧了好久,把任務那一章看了2遍,還是迷迷糊糊,然後就停下了。

 2015年換了家公司後,熟悉了32的結構,也對公司用的OS有了一定的體會。

 昨天,颱風登陸深圳,閒着沒事,又拿起了任哲的ucos ii,結合source insight裏ucos ii的源碼以及對公司OS的理解,總算對ucos ii有了個系統的瞭解,後來又瞟了幾頁邵貝貝的書,現在寫下自己的體會。

  各位別嫌我囉嗦,其實這主要是給我自己看的,省的以後再重新看一遍,再重新總結,打鐵要趁熱嘛。

  ucos ii其實主要說了這幾個東西:任務、任務之間的通信、時間與中斷、內存管理 、各種控制塊與控制塊單向鏈表(不同處理器上的ucos ii移植)。

 1)任務:任務代碼:處理具體事務;任務堆棧:存儲任務的狀態等各種信息(因爲他是利用中斷來切換任務,中斷有現場的保護和恢復);任務控制塊:即一個用來連接任務代碼和任務堆棧的數據結構;任務的新建:這裏有一個要注意,必須要有空閒任務,而且我記得貌似是在空閒任務裏,在新建其他的任務

  2)任務之間的通信:通信方式有,計數信號量(8bits or 16bits or 32bits) 互斥信號量(只有0和1)消息郵箱(數據緩衝區,or理解成一個一維數組) 消息隊列 (消息郵箱構成的數組)信號量集(多個標誌位的AND/OR),總結來說就是:只需查看flag,不需要傳輸具體內容的,用信號類(計數信號量、互斥信號量、事件標誌組)通信,需要傳輸具體內容的,用消息類(消息郵箱、消息隊列)通信。

 3)時間與中斷:時間,系統調度任務所用的參考時鐘也是由硬件中斷實現的;中斷:任務的切換也是模仿的中斷的現場保護和恢復,對於一些不想打斷的代碼,要在代碼前後加入進入臨界區和退出臨界區的宏,而且這塊代碼,最好不要調用其他。

  4) 內存管理:內存分配的原理,內存控制塊,內存的相關函數

     分配原理:內存=N個內存分區=N*M個內存塊()內存分區和內存塊的數據類型一致,同一內存分區的內存塊的字節數一致),再爲每個內存塊分配一個NEXT指針,指向它的下一個內存塊即可,如此就形成內存塊的單向鏈表

     內存控制塊:又是一個結構體,存儲了這個分配了的內存的一些信息,如長度、自己數、內存首地址、單向鏈表的指針的首地址==

     內存的相關函數:一般來說都是先建立一個二維數組,2個下標對應內存分區書和內存塊數,然後再調用ucos ii提供的內存分配和釋放函數等即可。

 5)各種控制塊與控制塊單向鏈表:

     ucos ii裏的各種控制塊都會形成單向鏈表,初始化時初始化成空的單向控制塊鏈表,具體使用時,再將某個拿出,對其填充信息,形成非空的有效的控制塊。

  公司的OS應該算分時OS,主要是任務沒有優先級。

    1.定時器中斷產生時間基準,同ucos ii;

     2.系統初始化時初始化所有任務,同ucos ii;

     3.死循環中順序執行各個任務,不同於ucos ii,ucos ii的 任務有優先級;

     4.各個任務會分很多個步驟,每個步驟對應不同的Dly時間,,同ucos ii中就緒態待時間之後轉爲運行態;

     5.部分任務之間會用到全局的標誌位或緩衝區數組,同ucos ii的任務之間的通信:信號量、信號量集成、消息郵箱及消息隊列;

      6.各種任務裏的各種結構體,同ucos ii的各種控制塊

    總之,主要是差了任務的優先級(內存管理其實也可以添加到公司的OS),這樣導致實時性稍差,所以我認爲公司的OS應該算是一種分時OS,

 

  

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