嵌入式操作系統(tǒng)UC/OSII的內核結構及介紹
嵌入式操作系統(tǒng)是多任務的,任務切換是其核心技術,由匯編語言編寫。任務切換函數OS_TASK_SW( )被設置成中斷函數,調用時使用的是軟件中斷指令,這樣在進入中斷程序之前,當前任務的代碼地址和狀態(tài)字就自動保存在當前任務的堆棧頂部。下面用8086的程序舉例切換函數:
(1) _OS_TASK_SW(或_OSIntCtxSw)PROC FAR中斷程序。
(2) PUSH指令該指令針對_OS_TASK_SW,保存當前任務寄存器到該任務的堆棧,代碼地址已經保存。
(3) ADD SP,n該指令針對_OSIntCtxSw,因為該函數由中斷程序調用,運行他之前曾調用一些函數,堆棧發(fā)生變化,所以需要調整,去掉前幾個函數的保存地址和參數,而代碼地址在發(fā)生中斷時就已經保存。
(4) 保存該任務的當前堆棧地址到該任務控制塊OS_TCB,即保存SS和SP。
(5) 調入已就緒最高優(yōu)先級任務控制塊,取出其原來保存的任務堆棧地址,即賦值給SS和SP。
(6) POP指令恢復新任務的寄存器。
(7) IRET中斷指令返回時,CPU從堆棧頂部即SS:SP指向的位置取出以前所保存的代碼地址和狀態(tài)字,并從此地址恢復原來任務的運行。
5 程序舉例
一個最簡單的嵌入式操作系統(tǒng)8086程序例子:在主程序運行完畢后,各任務開始輪流執(zhí)行。
6 結語
UC/OSII還有時間管理、內存分配的功能,并且使用了信號量、郵箱和信息隊列,使各任務之間可以互相通訊,協(xié)調對各種事務的管理,適用于小型的高端CPU。已經有許多公司以其為核心,進行功能擴展,從而開發(fā)自己的嵌入式操作系統(tǒng),并且由于其代碼簡練,JEAN J.LABROSSE專門寫書對其講解,也可以非常好地用于教學。
評論