一,前言
之前學習過一輪RTOS,主要是freertos比較全面的瞭解,其它RTOS通過對比法主要研究學習的是task切換和task調度算法及代碼實現。但是關於共享資源保護及多核處理我都忽略了,此次就借用學習threadx的RTOS的同時再補上這些點。
二,共享資源保護方法(僅考慮單核)
我先回顧了下FreeRTOS共享資源的保護,比如printf打印信息,要保護這個共享資源有如下方法。
1。通過中斷開關來保護資源
優點是簡單,缺點是共享資源的處理必須快。
2。通過掛起調度器來保護資源
優點是簡單且可以支持共享資源運行的更長,缺點是上下文調度花費時間,且可以被中斷打斷,需要考慮實際情況來使用。
3。互斥量來保護資源
優點是支持共享資源運行的更長,缺點是若系統資源設計不優化,則會發送優先級翻轉和死鎖發生。
4。守護任務
守護任務提供了一種乾淨利落的方法來實現互斥功能,而不用擔心會發生優先級反轉和死鎖。但是他的實時性會受到一些影響。中斷中可以寫隊列,要掛接一個心跳鉤子函數,需要做以下配置。設置 FreeRTOSConfig.h 中的常量 configUSE_TICK_HOOK 爲1。
三,AutosarOS中資源保護的應用
autosarOS中資源保護多核用自旋鎖,單核用開關中斷比較多。我理解event事件觸發就是信號量的概念呢,和互斥量差不多,都存在優先級翻轉問題,但是autosarOS就像threadxOS一樣支持優先級調整,當低優先級搶佔到資源後,OS會自動太高任務優先級,完成對資源的使用就會將優先級還原。
python控制trace32(下)--Apple的學習筆記之前遇到打印信息內容被打斷,但是這個打印是將數據放入循環隊列,然後trace32讀取循環隊列的值。和今天Freertos說的printf硬件資源保護有點不同。但是也有一個循環隊列作爲各個task的共享資源。若我也添加守護任務是不可行的,因爲我的目的是項目os調度順序可預測性的測試,若添加測試代碼,也就是添加一個task就會影響原有系統設計。所以我能想到的最好的辦法就是在os任務切換的函數中,也可以理解爲所有任務切換前我寫入切換信息到循環隊列中。就可以解決內容被打斷的問題,因爲任務切換函數是在中斷中進行的且不會被打斷。
四,小結
技術都是相通的,多瞭解自己行業外的技術,引進新的想法,是我一貫的學習思路。在我想不到什麼創造發明小項目的情況下,就多學習多思考吧,等待靈感的到來~