新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于μC/OS-II設(shè)計(jì)整車(chē)控制器系統(tǒng)技術(shù)

基于μC/OS-II設(shè)計(jì)整車(chē)控制器系統(tǒng)技術(shù)

作者: 時(shí)間:2010-06-17 來(lái)源:網(wǎng)絡(luò) 收藏


(2)OSCtxSw()

當(dāng)從低優(yōu)先級(jí)的任務(wù)切換到較高優(yōu)先級(jí)的任務(wù)時(shí),調(diào)用任務(wù)切換函數(shù)OSCtxSw()保存處理器的內(nèi)容和任務(wù)指針到當(dāng)前任務(wù)的任務(wù)堆棧,然后執(zhí)行用戶調(diào)用函數(shù)OSTaskSwHook(),最后從要執(zhí)行任務(wù)的任務(wù)堆棧里恢復(fù)寄存器和堆棧中的內(nèi)容,執(zhí)行中斷返回指令開(kāi)始運(yùn)行新的任務(wù)。

(3)OSIntCtxSw()

當(dāng)需要在中斷發(fā)生后切換到更高優(yōu)先級(jí)的任務(wù)時(shí),調(diào)用中斷級(jí)任務(wù)切換函數(shù)OSIntCtxSw(),然后執(zhí)行用戶調(diào)用函數(shù)OSTaskSwHook()。因?yàn)樵摵瘮?shù)是在中斷程序中被調(diào)用,所以不需要保存中斷任務(wù)的寄存器;中斷子程序在調(diào)用函數(shù)OSInExit()時(shí),將返回地址壓入堆棧,在這里不需要再返回,所以必須從堆棧中清理掉返回地址。

(4)OSTickISR()

OSTickISR()是μC/OS-II中的時(shí)鐘節(jié)拍中斷服務(wù)程序。在每個(gè)時(shí)鐘節(jié)拍調(diào)用該函數(shù),給每個(gè)處于延時(shí)的任務(wù)延時(shí)減1,并檢查所有處于延時(shí)狀態(tài)的任務(wù)是否延時(shí)結(jié)束成為就緒任務(wù)。然后調(diào)用OSIntExit(),如果有優(yōu)先級(jí)更高的任務(wù)就緒,OSIntExit()就會(huì)進(jìn)行任務(wù)調(diào)度。OSIntExit()并不返回調(diào)用者,而是用新的任務(wù)堆棧中的內(nèi)容來(lái)恢復(fù)CPU現(xiàn)場(chǎng),由中斷返回執(zhí)行新的任務(wù)。

3.2.4OS_CPU_C.C

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

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

在OS_CPU_C.C文件中可以創(chuàng)建5個(gè)鉤子函數(shù),使用的前提是配置文件中常量OS_CPU_HOOKS_EN使能。

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

4 軟件多任務(wù)

軟件以實(shí)時(shí)操作作為開(kāi)發(fā)平臺(tái),將應(yīng)用程序分解成多任務(wù),簡(jiǎn)化了軟件的,保證了控制系統(tǒng)的實(shí)時(shí)性,提高了系統(tǒng)的穩(wěn)定性與可靠性。整個(gè)系統(tǒng)的主程序流程如圖3所示。



4.1 定時(shí)器模塊

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


4.2 CAN通信模塊

CAN通信模塊功能是實(shí)現(xiàn)整車(chē)與其他節(jié)點(diǎn)間的信息傳輸。周期性傳輸,傳輸周期為20 ms,通信速率為250 kbps,中斷調(diào)用CAN通信服務(wù)程序。

創(chuàng)建CAN通信模塊任務(wù)CAN_Trans,任務(wù)優(yōu)先級(jí)3:



4.3 A/D模塊

A/D模塊功能是完成讀取蓄電池電壓、加速踏板傳感器和節(jié)氣門(mén)位置傳感器信號(hào),并進(jìn)行模數(shù)轉(zhuǎn)換,被其他函數(shù)調(diào)用。

創(chuàng)建A/D轉(zhuǎn)換模塊任務(wù)ADC_Cony,任務(wù)優(yōu)先級(jí)4:



4.4 整車(chē)控制主程序模塊

在混合動(dòng)力汽車(chē)系統(tǒng)各模塊自檢成功后,整車(chē)控制器要求啟動(dòng)電池,進(jìn)入正常EV工作模式。然后通過(guò)判斷檔位,鑰匙開(kāi)關(guān)和油門(mén)踏板等信息,進(jìn)入不同的處理模塊??刂撇呗园ㄕ?chē)控制策略和能量流管理策略,實(shí)現(xiàn)扭矩算法的控制輸出。

創(chuàng)建整車(chē)控制主程序任務(wù)Drive_Ctr,優(yōu)先級(jí)9:

OSTaskCreate(Drive_Ctr,(void*)Drive_Ctr[OS_TASK_STK],9)

這里限于篇幅不再介紹其他模塊,大體過(guò)程相似。

結(jié)語(yǔ)

隨著汽車(chē)整車(chē)的不斷發(fā)展和法規(guī)日益嚴(yán)格的要求,汽車(chē)電子系統(tǒng)會(huì)變得越來(lái)越復(fù)雜,采用操作系統(tǒng)來(lái)實(shí)現(xiàn)對(duì)復(fù)雜任務(wù)的管理和協(xié)調(diào),將成為不可避免的趨勢(shì)。

本文通過(guò)混合動(dòng)力整車(chē)控制器的軟硬件設(shè)計(jì),詳細(xì)說(shuō)明了μC/OS-II系統(tǒng)移植過(guò)程,優(yōu)化了系統(tǒng)軟件設(shè)計(jì),充分滿足了系統(tǒng)的需求。經(jīng)實(shí)車(chē)試驗(yàn)測(cè)試取得了很好的效果。

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉