新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 實時操作系統μC/OS-II在ARM7上的移植

        實時操作系統μC/OS-II在ARM7上的移植

        作者: 時間:2012-03-20 來源:網絡 收藏

        4.3 OS_CPU_C.C 文件分析

        這個源文件中有6個函數需要移植,即OSTaskStkInit()、OSTaskCreatHook()、OSTaskDelHook()、 OATaskSwHook()、OSTaskStatHook()和OSTASKTickHook()。后面5個函數又稱為鉤子函數,主要用來擴展μC/OS-II功能。但必須聲明,并不一定要包含任何代碼。唯一必須移植的函數是OSTaskStkInit()。該函數在任務創建時被調用,它負責初始化任務的堆棧結構。這個函數在大部分ARM處理器中移植時都可以采用一種形式。

        5 測試移植代碼

        在EmbestIDE編譯器上編譯基于的μC/OS-II操作系統代碼。編譯結果表明,裁剪后的μC/OS-II操作系統的代碼占用的空間少,代碼通過了編譯。為了驗證基于的μC/OS-II操作系統移植的是否成功,本文創建了兩個測試任務來驗證其合理性。

        創建的2個測試任務及源碼如下:

        OSTaskCreate (TestTransplantA, (void *) 0, TestTransplantAStk[StackSize-1], 2);

        OSTaskCreate (TestTransplantB, (void *) 0, TestTransplantBStk[StackSize-1], 3);

        void TestTransplantA (void *pdata)

        { pdata=pdata;

        while(1) {

        uart_printf("TaskA ");

        OSTimeDly (400);

        }

        }

        Void TestTransplantB (void *pdata) {

        pdata=pdata;

        while(1) {

        uart_printf("TaskB ");

        OSTimeDly(200);

        }

        }

        多任務調度開始后,通過超級終端接收的UART0的數據為:taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB ……。高優先級的任務TestTransplantA()首先被調度運行,說明OSTaskStkInit()和OSStartHighRdy()函數是正確的。任務TestTransplantA()和任務TestTransplantB()由時鐘節拍驅動而周期地被調用,說明OSCtxSw、 OSIntCtxSw()、OSTickISR()也是正確的。通過以上兩點可以認為移植結果是正確的。

        6 結束語

        在μC/OS-II平臺下開發程序,首先要掌握內核。通過上述移植過程,能夠對任務堆棧,任務調度有深刻理解。作為一種開放源代碼的操作系統,以其優越的性能在應用領域占據了非常廣泛的發展空間。移植結果表明,經過裁剪的μC/OS-II在上的移植是成功的。

        參考文獻

        [1] S3C44BOX MICROPROCESSOR Datasheet.Samsung Electronics,2001.

        [2] 田 澤. 開發與應用教程[M]. 北京:北京航空航天大學出版社,2005.

        [3] 任 哲. 嵌入式實時操作系統μC/OS-II原理及應用[M]. 北京:北京航空航天大學出版社, 2005.

        [4] 張春雷 王東興. μC/OS-II在C8051F020單片機上的移植[J]. 微計算機信息, 2006, (22): 95-97.

        [5] 譚浩強. C語言程序設計[M]. 北京:清華大學出版社, 1999, 106-141.


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 永福县| 周宁县| 伊吾县| 班戈县| 屏山县| 灵宝市| 洛扎县| 株洲市| 喀喇| 峡江县| 建水县| 温州市| 句容市| 青海省| 伊吾县| 正宁县| 马公市| 黔西县| 南郑县| 思南县| 措美县| 广昌县| 若羌县| 大方县| 上虞市| 西宁市| 邹平县| 兴安盟| 中山市| 巴林右旗| 托里县| 宁都县| 离岛区| 嵊泗县| 洪雅县| 介休市| 孟津县| 上栗县| 蕲春县| 宜宾市| 盐边县|