UCOSIII使用總結(一)

1、DMA中斷跟其他中斷一樣,DMA中斷進入時調用UCOS中斷處理,結束時調用中斷級任務調度函數就可以了
2、有些地方還需要注意堆棧字節對齊的問題,如果任務運行出現莫名其妙的錯誤(比如用到 sprintf 出錯),請考慮是不是字節對齊的問題。
3、OSSemPost()函數:如果有一個或多個任務在等待這個信號量,則優先級最高的任務將獲得這個信號量,然後由調度器來判定剛獲得信號量的任務是否爲系統中優先級最高的就緒任務,如果是,則系統將進行任務切換,運行這個就緒的任務。
4、OSSemPend()函數:請求消息OS_OPT_PEND_BLOCKING 如果沒有任何消息存在的話就阻塞任務,一直等待,直到接收到消息OS_OPT_PEND_BLOCKING 指定信號量無效時,任務掛起以等待信號量。OS_OPT_PEND_NON_BLOCKING 信號量無效時,任務直接返回。
5、使用UCOSIII後串口在發送時間過短或者數據量過大的情況下,會發生串口阻塞情況。(例如200ms每發100個字節數據會阻塞);其實只要等待時間夠長,數據量大沒出現問題。(應該是同時發送接收導致的,測試過不發送只接收不會出現阻塞現象)
6、當信號量用於共享資源時,可以設置爲1 (二進制)或者大於1(計數型);當用於信號機制,則該值應該設置爲0.在我理解中,信號機制就應該是任務同步。
7、中斷和任務沒有本質區別,只是中斷中多一些限制而已。比如不能使用系統提供的某些同步/互斥機制。
8、Thread.h中的OS_SLEEP_MS與os.h中的OSTimeDlyHMSM都只是對當前語句進行有效的延時;
9、UCOSIII比較UCOSII最明顯優點是其時間片輪轉法;
10、STM32(單CPU)的UCOSIII中的任務(線程)是一段簡單的可運行的程序;就單個任務來說,在運行時同樣與跑裸機一樣,都是完全的佔用CPU。即使是多核的芯片,只要是單CPU,在任務(線程)運行過程中就是完全的佔用CPU(微觀是就是串行運行的),只不過是操作系統(內核)幫助調配CPU資源。
11、UCOSIII是一個搶佔性內核,就是說它總是執行優先級最高的就緒任務;
12、UCOSIII內核佔用CPU的時間在2%到4%之間;因爲它添加到目標系統中需要額外的ROM和RAM(1~4KB);
13、UCOSIII支持任何數量的任務、信號量、互斥信號量、事件標誌組、消息隊列、軟件定時器、內存分區;用戶在運行時分配所有的內核對象;
14、UCOSIII需要一個16位或者32位的時間戳計數器來測量時間;時間戳的控制單元位於CPU_TS中。如果CPU速率爲1MHz,時間戳的速率就是1MHz;那麼CPU_TS 的分辨率爲1微秒。
15、任務可以是有5種狀態,休眠狀態,就緒狀態,運行狀態,掛起狀態,中斷狀態;
16、UCOSIII有2種調度方式:OSSched()被用於任務級;OSIntExit()被用於中斷級。由於中斷產生時已經將任務A的狀態保存在任務A的堆棧中,所以ISR返回時無需再保存任務A的狀態,而是直接載入任務B的CPU寄存器到硬件CPU寄存器中即可。
17、UCOSIII提供關中斷方式、鎖調度器方式、信號量方式、mutex方式保護共享資源。只有任務才允許使用信號量,ISR是不允許的。用信號量保護共享資源不會導致中斷延遲;當任務在執行信號量所保護的共享資源時,ISR或高優先級任務可以搶佔該任務。

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