1、全域性變數只在標頭檔案中定義一次的方法
在ucos_ii.h中有如下**
#ifdef os_globals
#define os_ext
#else
#define os_ext extern
#endif
os_ext int32u osctxswctr;
os_ext int8u oscpuusage;
os_ext int32u osidlectrmax;
os_ext int32u osidlectrrun;
os_ext boolean osstatrdy;
這裡的巨集定義意思是:如果在.c檔案中有定義「os_globals」,那麼os_ext就編譯成空;反之則編譯成extern
則如果在.c檔案中有出現#define os_globals,那麼上述的osctxswctr等變數則被編譯成 int32u osctxswctr等,如果.c檔案中沒有定義「os_globals」那麼上述的osctxswctr等變數則被編譯成 extern int32u osctxswctr,在這種情況下不產生記憶體分配,但任何.c檔案都可以使用這些全域性變數。
2、不可剝奪型核心和可剝奪型核心
不可剝奪(響應時間未知)
——每個任務都要執行到完成時才釋放cpu的控制權,幾乎不需要使用訊號量保護共享資料
——中斷服務可以使乙個高優先順序的任務由掛起變為就緒,但中斷服務後控制權還是回到原來被中斷的那個任務
可剝奪(任務系統響應時間是可知的)
——最高優先順序的任務一旦就緒,總能得到cpu的控制權
——中斷服務使乙個高優先順序的任務進入就緒態,當中斷完成後,優先順序高的那個任務開始執行
3、優先順序反轉
優先順序低的任務占有資源導致優先順序高的任務等待優先順序低任務執行的現象
解決:使用動態優先順序表或採用優先順序繼承
4、處理共享資料,建立互斥條件的方法
a、關中斷(注意時間要盡量短)
b、測試並置位
先測試某一全域性變數,例如如果是0則允許訪問資源,是1則不允許訪問,任務在訪問資源時將該全域性變數置1
c、禁止,再允許任務切換
給任務上鎖,執行完任務再解鎖
二值訊號量
計數訊號量
5、任務間的通訊
全域性變數或者中斷
6、ucosii關中斷和開中斷操作
兩個巨集:os_enter_critical()和os_exit_critical()
7、tcb任務控制塊分析
typedef struct os_tcb os_tcb;
ucos作業系統
什麼是作業系統?作業系統是一種系統軟體。他在計算機硬體與計算機應用程式之間,通過提 用程式介面,遮蔽了計算機硬體工作的一些細節,從而使應用程式設計人員得以在乙個友好的平台上進行應有程式的設計和開發,大大提高了應用程式的開發效率。只有硬體構成的計算機叫做 裸機 即沒有程式。硬體 人的骨骼和肌肉。軟體 ...
作業系統學習筆記 作業系統基礎
先看下面的一張圖 你會聯想到什麼?沒錯這是整個計算機啊。我們講計算機是用來幫助人們解決一些實際問題的工具 那我們不妨先 一下,在螢幕上輸入 hello 計算機內部都會進行哪些工作吧。輸出 hello 的工作 cpu發指令給記憶體,把記憶體位址為300的地方東西拿出來,寫入到777視訊記憶體位址。螢幕...
UCOS2作業系統學習筆記(4)
讀 嵌入式實時作業系統uc os ii 第二版 1 與處理器型別無關的 p73 os core.c os flag.c os mbox.c os mem.c os mutex.c os q.c os sem.c os task.c os time.c ucos ii.c ucos ii.h 2 與應...