基于μC/OS-II設計整車(chē)控制器系統技術(shù)
(2)OSCtxSw()
當從低優(yōu)先級的任務(wù)切換到較高優(yōu)先級的任務(wù)時(shí),調用任務(wù)切換函數OSCtxSw()保存處理器的內容和任務(wù)指針到當前任務(wù)的任務(wù)堆棧,然后執行用戶(hù)調用函數OSTaskSwHook(),最后從要執行任務(wù)的任務(wù)堆棧里恢復寄存器和堆棧中的內容,執行中斷返回指令開(kāi)始運行新的任務(wù)。
(3)OSIntCtxSw()
當需要在中斷發(fā)生后切換到更高優(yōu)先級的任務(wù)時(shí),調用中斷級任務(wù)切換函數OSIntCtxSw(),然后執行用戶(hù)調用函數OSTaskSwHook()。因為該函數是在中斷程序中被調用,所以不需要保存中斷任務(wù)的寄存器;中斷子程序在調用函數OSInExit()時(shí),將返回地址壓入堆棧,在這里不需要再返回,所以必須從堆棧中清理掉返回地址。
(4)OSTickISR()
OSTickISR()是μC/OS-II中的時(shí)鐘節拍中斷服務(wù)程序。在每個(gè)時(shí)鐘節拍調用該函數,給每個(gè)處于延時(shí)的任務(wù)延時(shí)減1,并檢查所有處于延時(shí)狀態(tài)的任務(wù)是否延時(shí)結束成為就緒任務(wù)。然后調用OSIntExit(),如果有優(yōu)先級更高的任務(wù)就緒,OSIntExit()就會(huì )進(jìn)行任務(wù)調度。OSIntExit()并不返回調用者,而是用新的任務(wù)堆棧中的內容來(lái)恢復CPU現場(chǎng),由中斷返回執行新的任務(wù)。
3.2.4OS_CPU_C.C
用戶(hù)需要編寫(xiě)6個(gè)C語(yǔ)言函數OSTaskStkInit()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskSatHook()、OSTimeTickHook()。其中,唯一必要的是OSTaskStkInit(),其他5個(gè)必須聲明,但可以不包含代碼。
OSTaskStkInit()由任務(wù)創(chuàng )建函數OSTaskCreate()或OSTaskCreateExt()調用,在建立每個(gè)任務(wù)的時(shí)候初始化任務(wù)堆棧。開(kāi)始運行這個(gè)任務(wù)就是模擬中斷返回,把初始化后堆棧中保存的值恢復到各個(gè)寄存器。初始化任務(wù)堆棧時(shí),要傳遞任務(wù)代碼起始指針(Ptask)、參數指針(Pdata)、任務(wù)堆棧棧頂指針。任務(wù)堆棧初始化完成后,返回一個(gè)新的堆棧棧頂指針,OSTaskCreate()或OSTaskCreateExt()將它保存到OSTCB中。
在OS_CPU_C.C文件中可以創(chuàng )建5個(gè)鉤子函數,使用的前提是配置文件中常量OS_CPU_HOOKS_EN使能。
至此,μC/OS-II操作系統的移植基本完成。
4 整車(chē)控制器軟件多任務(wù)設計
整車(chē)控制器軟件設計以實(shí)時(shí)操作系統作為開(kāi)發(fā)平臺,將應用程序分解成多任務(wù),簡(jiǎn)化了系統軟件的設計,保證了整車(chē)控制系統的實(shí)時(shí)性,提高了系統的穩定性與可靠性。整個(gè)系統的主程序流程如圖3所示。

4.1 定時(shí)器模塊
定時(shí)器的主要功能是為軟件程序提供基準時(shí)鐘。本應用選擇T5作為時(shí)鐘基準,在初始化函數void GPT_vInit()中完成模塊寄存器配置;中斷服務(wù)程序設置為OSTicklSR(),中斷向量為0x25。通過(guò)建立時(shí)鐘任務(wù)函數Timer_Int(),調用時(shí)鐘節拍函數OSTimeTick(),實(shí)現定時(shí)器與系統時(shí)鐘的連接。系統時(shí)鐘節拍編程為1 ms,可以減少中斷服務(wù)時(shí)間,提高實(shí)時(shí)性。

4.2 CAN通信模塊
CAN通信模塊功能是實(shí)現整車(chē)控制器與其他節點(diǎn)間的信息傳輸。周期性傳輸,傳輸周期為20 ms,通信速率為250 kbps,中斷調用CAN通信服務(wù)程序。
創(chuàng )建CAN通信模塊任務(wù)CAN_Trans,任務(wù)優(yōu)先級3:

4.3 A/D模塊
A/D模塊功能是完成讀取蓄電池電壓、加速踏板傳感器和節氣門(mén)位置傳感器信號,并進(jìn)行模數轉換,被其他函數調用。
創(chuàng )建A/D轉換模塊任務(wù)ADC_Cony,任務(wù)優(yōu)先級4:

4.4 整車(chē)控制主程序模塊
在混合動(dòng)力汽車(chē)系統各模塊自檢成功后,整車(chē)控制器要求啟動(dòng)電池,進(jìn)入正常EV工作模式。然后通過(guò)判斷檔位,鑰匙開(kāi)關(guān)和油門(mén)踏板等信息,進(jìn)入不同的處理模塊??刂撇呗园ㄕ?chē)控制策略和能量流管理策略,實(shí)現基于扭矩算法的控制輸出。
創(chuàng )建整車(chē)控制主程序任務(wù)Drive_Ctr,優(yōu)先級9:
OSTaskCreate(Drive_Ctr,(void*)Drive_Ctr[OS_TASK_STK],9)
這里限于篇幅不再介紹其他模塊,大體過(guò)程相似。
結語(yǔ)
隨著(zhù)汽車(chē)整車(chē)技術(shù)的不斷發(fā)展和法規日益嚴格的要求,汽車(chē)電子系統會(huì )變得越來(lái)越復雜,采用操作系統來(lái)實(shí)現對復雜任務(wù)的管理和協(xié)調,將成為不可避免的趨勢。
本文通過(guò)混合動(dòng)力整車(chē)控制器的軟硬件設計,詳細說(shuō)明了μC/OS-II系統移植過(guò)程,優(yōu)化了系統軟件設計,充分滿(mǎn)足了系統的需求。經(jīng)實(shí)車(chē)試驗測試取得了很好的效果。
評論