新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式操作系統(tǒng)UC/OSII的內(nèi)核結(jié)構(gòu)及介紹

        嵌入式操作系統(tǒng)UC/OSII的內(nèi)核結(jié)構(gòu)及介紹

        作者: 時間:2010-12-12 來源:網(wǎng)絡(luò) 收藏

          
        是多任務(wù)的,任務(wù)切換是其核心技術(shù),由匯編語言編寫。任務(wù)切換函數(shù)OS_TASK_SW( )被設(shè)置成中斷函數(shù),調(diào)用時使用的是軟件中斷指令,這樣在進入中斷程序之前,當(dāng)前任務(wù)的代碼地址和狀態(tài)字就自動保存在當(dāng)前任務(wù)的堆棧頂部。下面用8086的程序舉例切換函數(shù):
          
        (1) _OS_TASK_SW(或_OSIntCtxSw)PROC FAR中斷程序。
          
        (2) PUSH指令該指令針對_OS_TASK_SW,保存當(dāng)前任務(wù)寄存器到該任務(wù)的堆棧,代碼地址已經(jīng)保存。
          
        (3) ADD SP,n該指令針對_OSIntCtxSw,因為該函數(shù)由中斷程序調(diào)用,運行他之前曾調(diào)用一些函數(shù),堆棧發(fā)生變化,所以需要調(diào)整,去掉前幾個函數(shù)的保存地址和參數(shù),而代碼地址在發(fā)生中斷時就已經(jīng)保存。

        (4) 保存該任務(wù)的當(dāng)前堆棧地址到該任務(wù)控制塊OS_TCB,即保存SS和SP。
          
        (5) 調(diào)入已就緒最高優(yōu)先級任務(wù)控制塊,取出其原來保存的任務(wù)堆棧地址,即賦值給SS和SP。
          
        (6) POP指令恢復(fù)新任務(wù)的寄存器。
          
        (7) IRET中斷指令返回時,CPU從堆棧頂部即SS:SP指向的位置取出以前所保存的代碼地址和狀態(tài)字,并從此地址恢復(fù)原來任務(wù)的運行。
          
        5 程序舉例
          
        一個最簡單的8086程序例子:在主程序運行完畢后,各任務(wù)開始輪流執(zhí)行。


          
        6 結(jié)語
          
        還有時間管理、內(nèi)存分配的功能,并且使用了信號量、郵箱和信息隊列,使各任務(wù)之間可以互相通訊,協(xié)調(diào)對各種事務(wù)的管理,適用于小型的高端CPU。已經(jīng)有許多公司以其為核心,進行功能擴展,從而開發(fā)自己的,并且由于其代碼簡練,JEAN J.LABROSSE專門寫書對其講解,也可以非常好地用于教學(xué)。

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 洪泽县| 和顺县| 天全县| 稻城县| 三明市| 桃园县| 甘肃省| 修水县| 郯城县| 林周县| 南木林县| 吴江市| 电白县| 奇台县| 垦利县| 荆门市| 正阳县| 蒙城县| 洛阳市| 芒康县| 微博| 泾川县| 岗巴县| 西充县| 武宣县| 建宁县| 武功县| 湖州市| 科技| 松潘县| 河北区| 金堂县| 泗阳县| 大荔县| 闻喜县| 松原市| 揭西县| 前郭尔| 连江县| 海安县| 土默特右旗|