




全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于HCS12的實(shí)時(shí)嵌入式燃料電池控制系統(tǒng)白日光,蕭蘊(yùn)詩(shī),孫澤昌(1同濟(jì)大學(xué) 控制工程與科學(xué)系,上海 200092;2同濟(jì)大學(xué) 汽車學(xué)院,上海 200092;3同濟(jì)大學(xué)摩托羅拉汽車電子聯(lián)合實(shí)驗(yàn)室,上海 20092)摘要:燃料電池控制器是燃料電池中非常關(guān)鍵的部分,對(duì)于燃料電池穩(wěn)定而安全的工作有積極的作用。針對(duì)燃料電池控制中要求較高的實(shí)時(shí)性與可靠性,利用摩托羅拉16位單片機(jī)MC9S12DP256b把實(shí)時(shí)嵌入式系統(tǒng)UC/OS-II成功移植到控制中。本文結(jié)合HCS12單片機(jī)和Codewarrior編譯器的特點(diǎn)詳細(xì)介紹了內(nèi)核的優(yōu)化實(shí)現(xiàn),并利用實(shí)例說(shuō)明了嵌入式操作系統(tǒng)帶來(lái)的優(yōu)點(diǎn)。關(guān)鍵詞:UC/OS-II;燃料電池控制器(FCC);MC9S12DP256b;移植;內(nèi)核Real Time Kernel Fuel Cell Control System Based on HCS12Bai Riguang, Xiao Yunshi,Sun Zechang(1. Department of Control Engineering & Science, Tongji University, Shanghai, 200092, China;2. Automobile College, Tongji University, Shanghai, 200092,China;3. Tongji University Motorola Automobile Electronic Laboratory, Shanghai, 200092, China)Abstract: The Fuel Cell Controller (FCC) is an important part of Fuel Cell. It affects steady and safe running of Fuel Cell. Considering real time and reliability qualities of FCC, we port real time embedded operation system UC/OS-II to the controller using HCS12. With the characteristic of HCS12 single chip and Codewarrior, the paper introduces the implementation of the kernel in details, and shows the advantage of the embedded operation system by an example. Key words: UC/OS-II; fuel cell controller (FCC); MC9S12DP256b; port; kernel0 引言隨著汽車工業(yè)的發(fā)展,人類對(duì)傳統(tǒng)能源(如原油)的需求日益擴(kuò)大,從而帶來(lái)空氣污染和資源枯竭兩大問(wèn)題,燃料電池作為一種新型的綠色能源開(kāi)始受到人類的關(guān)注。結(jié)合由同濟(jì)大學(xué)承擔(dān)的國(guó)家863電動(dòng)汽車重大專項(xiàng)燃料電池轎車項(xiàng)目,需要開(kāi)發(fā)適用于質(zhì)子交換膜燃料電池穩(wěn)定而安全工作的燃料電池控制器??紤]到燃料電池控制器硬件資源的需求,研究中利用了摩托羅拉公司的16位單片機(jī)MC9S12DP256b。為了進(jìn)一步滿足控制中高可靠性與實(shí)時(shí)性的要求,把內(nèi)核公開(kāi)的UC/OS-II實(shí)時(shí)嵌入式操作系統(tǒng)移植到此單片機(jī)中,從而使開(kāi)發(fā)具有更好的擴(kuò)展性。本文首次把實(shí)時(shí)嵌入式操作系統(tǒng)應(yīng)用到燃料電池控制中,取得了良好的效果?;痦?xiàng)目:國(guó)家863電動(dòng)汽車重大專項(xiàng)(2003AA501)作者簡(jiǎn)介:白日光(1980 ),男,碩士生,主要從事燃料電池控制器,過(guò)程控制與計(jì)算機(jī)控制方向研究。蕭蘊(yùn)詩(shī)(1946 ),男,教授,博士生導(dǎo)師,主要研究方向?yàn)橹悄芸刂评碚撆c系統(tǒng)。孫澤昌(1953 ),男,教授,博士生導(dǎo)師,主要研究方向?yàn)槠囯娮印? 系統(tǒng)平臺(tái)介紹11 硬件MC9S12DP256bMC9S12DP256b是摩托羅拉16位單片機(jī)HCS12家族中的一員,它的處理單元采用了16位的STAR12 CPU。此單片機(jī)內(nèi)嵌了很多資源,包括256K FLASH,4K EEPROM,12K RAM,8通道定時(shí)器以及多種通信接口。此單片機(jī)可通過(guò)單線BDM進(jìn)行程序的編譯,下載和在線調(diào)試。12 軟件平臺(tái)CodewarriorCodewarrior是Metrowerks公司開(kāi)發(fā)的一個(gè)編程環(huán)境。這里使用的Codewarrior4.2是專門針對(duì)HCS12系列單片機(jī)開(kāi)發(fā)的,他可以用來(lái)進(jìn)行程序編輯,編譯,連接和在線調(diào)試等多項(xiàng)功能,并支持多種語(yǔ)言功能,可在C中嵌入?yún)R編程序。13 嵌入式操作系統(tǒng)UC/OS-II內(nèi)核UC/OS-II(Micro Control Operation System Two)是一種源代碼公開(kāi)的嵌入式操作系統(tǒng), 程序絕大部分是用C語(yǔ)言寫的, 帶有少量的匯編程序, 并且有詳細(xì)的說(shuō)明和示例, 可移植、易調(diào)試, 穩(wěn)定性與可靠性高, 功能也比較完善。在改進(jìn)后的2.51版中包括了任務(wù)管理,時(shí)間管理,任務(wù)間通信(消息,郵箱,信號(hào)量和標(biāo)志)和內(nèi)存管理等多項(xiàng)功能。UC/OS-II的內(nèi)核是占先式的,具有最高優(yōu)先級(jí)的任務(wù)一旦準(zhǔn)備就緒, 就能立刻得到CPU的控制權(quán), 可以剝奪低優(yōu)先級(jí)任務(wù)的CPU使用權(quán), 處理系統(tǒng)最緊急的事務(wù)。1 4 移植條件一般來(lái)說(shuō),能移植UC/OS-II的CPU及其編譯器必須滿足以下條件:用戶的編譯器能產(chǎn)生可重入性代碼;用C語(yǔ)言就可以打開(kāi)和關(guān)閉中斷;CPU能產(chǎn)生定時(shí)中斷,而且給用戶留有自定義中斷向量;具有一定的數(shù)據(jù)和代碼空間,至少4K的ROM和2K的RAM;CPU有將堆棧指針和其他CPU寄存器讀出和存儲(chǔ)到堆棧和內(nèi)存中的指令。對(duì)于以上條件,MC9S12DP256b和其編譯器Codewarrior都能滿足。2 移植過(guò)程圖1 UC/OS-II 2.51版的軟硬件結(jié)構(gòu)體系圖1顯示了UC/OS-II 2.51版移植到MC9S12DP256b時(shí)的軟硬件結(jié)構(gòu)體系。應(yīng)用程序軟件使用Codewarrior編譯器,硬件利用MC9S12DP256b單片機(jī)。嵌入式系統(tǒng)UC/OS-II共由3部分組成,一部分是與處理器無(wú)關(guān)的代碼,在移植中可直接使用,無(wú)需更改;一部分是與應(yīng)用相關(guān)的代碼,其中INCLUDES.H用來(lái)配置頭文件,OS_CFG.H用來(lái)配置需要的UC/OS-II資源;另一部分就是處理器相關(guān)的代碼,這部分是移植的重點(diǎn),其中OS_CPU.H定義了與處理器相關(guān)的常量,宏和類型,OS_CPU_C.C中包括了與處理器相關(guān)的代碼。在OS_CPU_C.C中共有五個(gè)重要的函數(shù):OSStartHighRdy(), OSCtxSw(), OSIntCtxSw(), OSTaskStkInit(), OSTickISR()。這幾個(gè)函數(shù)都是與STAR12 CPU的內(nèi)部寄存器和堆棧處理有關(guān)聯(lián)的,OSTickISR()還和MS9S12DP256b的時(shí)間模塊有關(guān)聯(lián)。21 STAR12 CPU堆棧介紹在移植中關(guān)鍵就是如何構(gòu)造任務(wù)堆棧及如何在切換任務(wù)時(shí)調(diào)整堆棧指針,因而需要對(duì)STAR CPU的堆棧調(diào)用有詳細(xì)的了解。STAR12 CPU的內(nèi)部寄存器有:16位累加器D(也可分作兩個(gè)8位累加器A和B),變址寄存器IX,變址寄存器IY,堆棧指針SP,程序計(jì)數(shù)器PC和8位條件碼寄存器CCR。當(dāng)中斷發(fā)生時(shí),所有的寄存器都會(huì)按一定順序自動(dòng)的保存到堆棧中,如圖2所示。圖2 STAR12 CPU中斷發(fā)生時(shí)的堆棧變化22 文件OS_CPU.H的移植從圖2可以看出,STAR12 CPU的堆棧指針是向下增長(zhǎng)的,因而在OS_CPU.H中要宏定義對(duì)應(yīng)變量為1。CPU的開(kāi)關(guān)中斷采用文獻(xiàn)中介紹的方法1,而定時(shí)中斷采用有輸出比較功能的TC7。此CPU還提供了專門的軟中斷指令swi,這對(duì)于移植是非常有利的。下面列出了移植后的關(guān)鍵代碼:#define OS_STK_GROWTH 1#define OS_ENTER_CRITICAL() _asm sei#define OS_EXIT_CRITICAL() _asm cli#define OS_TICK_OC 7#define OS_TASK_SW() _asm swi23函數(shù)OSTaskStkInit()的移植函數(shù)OSTaskStkInit()的功能是初始化任務(wù)堆棧,在任務(wù)建立時(shí)會(huì)調(diào)用它。當(dāng)多任務(wù)啟動(dòng)和任務(wù)切換時(shí),會(huì)通過(guò)中斷返回指令把已準(zhǔn)備就緒的優(yōu)先級(jí)最高的任務(wù)的堆棧內(nèi)容返回。因而,必須模仿中斷發(fā)生時(shí)的堆棧內(nèi)容來(lái)初始化堆棧。下面顯示了此函數(shù)移植后的關(guān)鍵代碼:INT16U *wstk;/字堆棧指針I(yè)NT16U *OffsetAddress;/任務(wù)偏址指針I(yè)NT8U *bstk;/字節(jié)堆棧指針I(yè)NT8U regPage;/任務(wù)頁(yè)地址wstk = (INT16U *)ptos;/堆棧棧頂*-wstk = (INT16U)pdata;/數(shù)據(jù)參數(shù)地址OffsetAddress = (INT16U*)&task;/任務(wù)偏地址regPage = (INT8U)task;/任務(wù)頁(yè)地址*-wstk = (INT16U)*OffsetAddress;/偏址入棧*-wstk = (INT16U)*OffsetAddress;/偏址入棧*-wstk = (INT16U)0x1111; /IY寄存器*-wstk = (INT16U)0x2222; /IX寄存器*-wstk = (INT16U)0xBBAA; /D累加器bstk = (INT8U *)wstk; /堆棧指針為8位-bstk = 0x80; /CCR寄存器#if defined( _BANKED_) | defined(_LARGE_)*-bstk = regPage;/頁(yè)地址入棧(8位)#endif return (void *)bstk);/返回新的棧頂圖3 OSTaskStkInit()初始化后的任務(wù)堆棧堆棧初始化后如圖3所示,比較圖2,這里增加了一個(gè)最后入棧的任務(wù)頁(yè)地址regPage。由于在此單片機(jī)中有256K FLASH,而且外部可擴(kuò)展768K FLASH,因而當(dāng)單片機(jī)工作時(shí),無(wú)法用16位的程序計(jì)數(shù)器完全尋址,需要利用分頁(yè)尋址的方式,其中頁(yè)地址存儲(chǔ)在8位PPAGE寄存器中。當(dāng)程序在不同的頁(yè)之間切換時(shí),就需要把PPAGE寄存器的值保存起來(lái),Codewarrior編譯器可實(shí)現(xiàn)此功能。Codewarrior共有三種編譯模式可選,SMALL模式,BANKED模式和LARGE模式。SMALL模式適用于用戶程序比較小的情況,在這種模式下編譯可確保程序都在同一頁(yè)中,因而編譯后中斷沒(méi)有保存PPAGE寄存器。而當(dāng)設(shè)置為另外兩種模式時(shí),因涉及到不同頁(yè)之間的切換問(wèn)題,就必須保存PPAGE寄存器。此時(shí)必須注意一點(diǎn),當(dāng)Codewarrior工作在后兩種模式下時(shí),為確保移植程序成功,必須把Codewarrior中相應(yīng)的編譯選項(xiàng)設(shè)為-CpPPAGE=0x30,否則編譯后PPAGE寄存器將無(wú)法在中斷時(shí)自動(dòng)壓入堆棧,從而會(huì)使中斷返回出錯(cuò)。24 函數(shù)OSStartHighRdy()的移植函數(shù)OSStartHighRdy()的功能是開(kāi)始調(diào)用已準(zhǔn)備就緒的優(yōu)先級(jí)最高的任務(wù),下面顯示了其中的關(guān)鍵代碼:_asm/C中嵌入?yún)R編代碼inc OSRunning/多任務(wù)開(kāi)始運(yùn)行l(wèi)dx OSTCBHighRdy / SP指向最高優(yōu)先級(jí)_lds 0,x /就緒任務(wù)堆棧棧頂/end asm需要注意的是,為了使本函數(shù)返回時(shí)是以中斷返回方式返回,必須在函數(shù)前用#pragma TRAP_PROC聲明其為中斷調(diào)用函數(shù),這樣Codewarrior在編譯時(shí)才會(huì)將其以中斷程序調(diào)用。25 其余函數(shù)的移植圖4進(jìn)入函數(shù)OSIntCtxSw()后當(dāng)前任務(wù)的堆棧函數(shù)OSCtxSw()是實(shí)現(xiàn)軟中斷任務(wù)切換的,而函數(shù)OSIntCtxSw()是實(shí)現(xiàn)時(shí)間中斷任務(wù)切換的,二者代碼相似,但OSIntCtxSw()在移植中因涉及到堆棧指針的調(diào)整問(wèn)題而相對(duì)復(fù)雜,而且其指針調(diào)整和編譯器有直接關(guān)系,因而將以O(shè)SIntCtxSw()為例詳細(xì)介紹任務(wù)切換程序的移植。圖4顯示了程序進(jìn)入函數(shù)OSIntCtxSw()后當(dāng)前任務(wù)堆棧的內(nèi)容,整個(gè)入棧順序如下:1. 當(dāng)前任務(wù)運(yùn)行時(shí),如果發(fā)生定時(shí)中斷,則調(diào)用OSTickISR()函數(shù),、和進(jìn)棧;2. 中斷服務(wù)程序OSTickISR()調(diào)用OSInitExit(),和進(jìn)棧;3. OSInitExit()函數(shù)調(diào)用OSIntCtxSw(),和進(jìn)棧,繼續(xù)執(zhí)行OSIntCtxSw(),進(jìn)行任務(wù)切換。切換前,要保存當(dāng)前任務(wù)返回時(shí)所需的堆棧棧頂指針,因而需要調(diào)整指針位置,這里用了兩種方法來(lái)實(shí)現(xiàn)。方法1:如圖4中所示,在OSIntCtxSw()中調(diào)整指針指向處,然后把當(dāng)前任務(wù)堆棧指針保存到對(duì)應(yīng)的任務(wù)控制塊中,具體程序如下:_asm/C中嵌入?yún)R編程序leas 6,sp/調(diào)整SPSP6ldy OSTCBCur/把當(dāng)前SP保存到_sts 0,y/當(dāng)前任務(wù)的控制塊中/end asm方法2:在函數(shù)OSTickISR()中保存當(dāng)前任務(wù)堆棧指針到對(duì)應(yīng)的任務(wù)控制塊中,因?yàn)榇藭r(shí)指針正好指向返回時(shí)需要指向的地址,因而無(wú)需調(diào)整指針,具體程序程序如下:asm inc OSIntNesting;/中斷嵌套計(jì)數(shù)if (OSIntNesting = 1)/沒(méi)有中斷嵌套_asm/ C中嵌入?yún)R編程序ldy OSTCBCur/把當(dāng)前SP保存到_sts 0,y/當(dāng)前任務(wù)的控制塊中/end asm/end if比較兩種方法,可看出方法2并沒(méi)有進(jìn)行堆棧指針調(diào)整,更具有可移植性,它避免了因編譯器的不同而帶來(lái)的不便。當(dāng)當(dāng)前任務(wù)的指針保存好后,OSIntCtxSw()就可以進(jìn)行任務(wù)切換了,具體代碼如下:_asm/ C中嵌入?yún)R編程序ldx OSTCBHighRdy/當(dāng)前任務(wù)塊指針指向_stx OSTCBCur/優(yōu)先級(jí)最高任務(wù)塊ldab OSPrioHighRdy/當(dāng)前運(yùn)行優(yōu)先級(jí)為_(kāi)stab OSPrioCur/就緒任務(wù)最高優(yōu)先級(jí)lds 0,x/ SP指向優(yōu)先級(jí)最高_(dá)/任務(wù)堆棧棧頂最后在OSTickISR()中加入TC7定時(shí)的相關(guān)設(shè)置,并在中斷向量表中加入軟中斷和定時(shí)中斷的程序入口地址。這樣就完成了整個(gè)UC/OS-II的移植過(guò)程。3 實(shí)例分析圖5是一個(gè)簡(jiǎn)單的燃料電池控制器模型,表1列出了應(yīng)用UC/OS-II后劃分的主要任務(wù),各個(gè)任務(wù)間通過(guò)信號(hào)量和消息進(jìn)行數(shù)據(jù)傳遞和流程控制。例如,兩路CAN信息的讀取通過(guò)接收中斷發(fā)送信號(hào)量引發(fā)任務(wù)7和任務(wù)8進(jìn)行數(shù)據(jù)處理。程序中還利用系統(tǒng)定時(shí)中斷建
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省阜陽(yáng)市潁上縣第二中學(xué)2025屆化學(xué)高一下期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 江西省永豐中學(xué)2025年高一下化學(xué)期末達(dá)標(biāo)檢測(cè)試題含解析
- 河北省深州市中學(xué)2025屆高二化學(xué)第二學(xué)期期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 條形碼管理辦法規(guī)定為
- 農(nóng)家書屋維護(hù)管理辦法
- 材料外放加工管理辦法
- 晉安白蟻防治管理辦法
- 華為電子發(fā)票管理辦法
- 機(jī)電運(yùn)輸三違管理辦法
- 教師業(yè)務(wù)專長(zhǎng)案例分析
- 河北省2025年中考數(shù)學(xué)真題試卷(含答案)
- 福建福州金山中學(xué)2024~2025學(xué)年高一下冊(cè)期末考試數(shù)學(xué)試題含解析
- 2025年廣東省高考生物真題(解析版)
- 2024年哈爾濱市道里區(qū)執(zhí)法輔助人員招聘考試真題
- 學(xué)堂在線 研究生的壓力應(yīng)對(duì)與健康心理 期末考試答案
- 2025年7月自考13811績(jī)效管理試題及答案含解析
- 企業(yè)環(huán)境監(jiān)測(cè)管理制度
- 試藥員知情協(xié)議書
- 2025年嘉興市恒光電力建設(shè)有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025內(nèi)蒙古鄂爾多斯農(nóng)商行烏海各機(jī)構(gòu)員工社會(huì)招聘37人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- XX林場(chǎng)20XX年度森林質(zhì)量精準(zhǔn)提升項(xiàng)目實(shí)施方案(范文)
評(píng)論
0/150
提交評(píng)論