新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于μC/OS-II的整車控制器系統設計技術

        基于μC/OS-II的整車控制器系統設計技術

        作者: 時間:2013-12-27 來源:網絡 收藏

        3.2 μC/OS-II的移植

        μC/OS-II操作系統在XC164CS微處理器上的移植主要實現對3個文件OS_CPU.H、OS_CPU_C.C、OS_CPU A.ASM的處理。

        3.2.1頭文件INCLUDES.H

        INCLUDES.H頭文件應被包含到所有C文件的第1行。盡管包含不相關文件可能會增加文件的編譯時間,但增強了代碼的可移植性。用戶可以編輯增加自己的頭文件,但必須添加在頭文件列表的最后。

        3.2.2 OS_CPU.H文件

        OS_CPU.H文件中包含與處理器相關的常量、宏和結構體的定義。針對XC164CS處理器,定義堆棧數據類型為16位,棧向下遞減;將μC/OS-II控制中斷的2個宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()定義為微控制器關閉(SETC)和打開(CLRC)中斷的指令;聲明OS_TASK_SW()函數,中斷服務程序ISR的入口指向函數OSCtxSw()。
        基于μC/OS-II的整車控制器系統設計技術

        3.2.3 OS CPU A.ASM

        μC/OS-II移植時要求用戶編寫4個匯編語言函數:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。

        (1)OSStartHighRdy()

        調用該函數使處于就緒狀態的優先級最高的任務開始運行。由于實時操作系統是不返回的函數,所以調用后需移去堆棧棧頂的返回地址,然后執行用戶調用函數OSTaskSwHook(),最后開始運行多任務,獲得優先級最高的任務的指針,根據這個指針從任務堆棧中恢復所有寄存器,恢復完后執行中斷返回,運行就緒態任務。

        (2)OSCtxSw()

        當從低優先級的任務切換到較高優先級的任務時,調用任務切換函數OSCtxSw()保存處理器的內容和任務指針到當前任務的任務堆棧,然后執行用戶調用函數OSTaskSwHook(),最后從要執行任務的任務堆棧里恢復寄存器和堆棧中的內容,執行中斷返回指令開始運行新的任務。

        (3)OSIntCtxSw()

        當需要在中斷發生后切換到更高優先級的任務時,調用中斷級任務切換函數OSIntCtxSw(),然后執行用戶調用函數OSTaskSwHook()。因為該函數是在中斷程序中被調用,所以不需要保存中斷任務的寄存器;中斷子程序在調用函數OSInExit()時,將返回地址壓入堆棧,在這里不需要再返回,所以必須從堆棧中清理掉返回地址。

        (4)OSTickISR()

        OSTickISR()是μC/OS-II中的時鐘節拍中斷服務程序。在每個時鐘節拍調用該函數,給每個處于延時的任務延時減1,并檢查所有處于延時狀態的任務是否延時結束成為就緒任務。然后調用OSIntExit(),如果有優先級更高的任務就緒,OSIntExit()就會進行任務調度。OSIntExit()并不返回調用者,而是用新的任務堆棧中的內容來恢復CPU現場,由中斷返回執行新的任務。

        3.2.4OS_CPU_C.C

        用戶需要編寫6個C語言函數OSTaskStkInit()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskSatHook()、OSTimeTickHook()。其中,唯一必要的是OSTaskStkInit(),其他5個必須聲明,但可以不包含代碼。

        OSTaskStkInit()由任務創建函數OSTaskCreate()或OSTaskCreateExt()調用,在建立每個任務的時候初始化任務堆棧。開始運行這個任務就是模擬中斷返回,把初始化后堆棧中保存的值恢復到各個寄存器。初始化任務堆棧時,要傳遞任務代碼起始指針(Ptask)、參數指針(Pdata)、任務堆棧棧頂指針。任務堆棧初始化完成后,返回一個新的堆棧棧頂指針,OSTaskCreate()或OSTaskCreateExt()將它保存到OSTCB中。

        在OS_CPU_C.C文件中可以創建5個鉤子函數,使用的前提是配置文件中常量OS_CPU_HOOKS_EN使能。

        至此,μC/OS-II操作系統的移植基本完成。

        4 軟件多任務設計

        軟件設計以實時操作系統作為開發平臺,將應用程序分解成多任務,簡化了系統軟件的設計,保證了整車控制系統的實時性,提高了系統的穩定性與可靠性。整個系統的主程序流程如圖3所示。
        基于μC/OS-II的整車控制器系統設計技術



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 修水县| 六安市| 延长县| 沙田区| 信宜市| 海安县| 庆安县| 宁明县| 宾阳县| 乌鲁木齐县| 彩票| 景洪市| 洪雅县| 定南县| 鞍山市| 和静县| 安福县| 安泽县| 怀化市| 闸北区| 揭西县| 和田县| 余姚市| 定安县| 工布江达县| 洪洞县| 蒙城县| 平邑县| 临高县| 灵川县| 马关县| 崇信县| 平谷区| 南和县| 格尔木市| 邢台市| 合阳县| 西乡县| 南召县| 玉环县| 沁水县|