• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II 在MPC5604B 上的移植①

      2012-07-09 01:58:26羅先銀吳光強(qiáng)
      關(guān)鍵詞:堆棧微控制器調(diào)用

      羅先銀, 吳光強(qiáng)

      (同濟(jì)大學(xué)汽車學(xué)院,上海201804)

      隨著人們對汽車安全性、環(huán)保、節(jié)能和舒適性要求的提高,汽車電子技術(shù)應(yīng)用日益廣泛.作為汽車電子控制系統(tǒng)的核心,微控制器已經(jīng)由最初的4位微控制器發(fā)展到現(xiàn)在的32位微控制器.半導(dǎo)體技術(shù)的發(fā)展使得電子控制系統(tǒng)集成度、控制精度提高的同時(shí)也降低了成本.MPC56xx系列微控制器是Freescale半導(dǎo)體公司針對日益復(fù)雜的汽車電子控制系統(tǒng)推出的基于Power Architecture○R架構(gòu)的下一代32位微控制器,使用90nm COMS技術(shù)制造,具有低成本、低功耗、高性能和高穩(wěn)定性的優(yōu)點(diǎn)[1,2].

      面對日益復(fù)雜的控制系統(tǒng)軟件,傳統(tǒng)的前后臺(tái)系統(tǒng)已經(jīng)不能滿足控制系統(tǒng)對多任務(wù)和實(shí)時(shí)性等多方面的要求.相比前后臺(tái)系統(tǒng),嵌入式實(shí)時(shí)內(nèi)核具有明確的時(shí)序,在處理對時(shí)間要求苛刻的應(yīng)用時(shí)具有更大的優(yōu)勢,支持多任務(wù)處理,同時(shí)使得應(yīng)用程序的設(shè)計(jì)與開發(fā)變得更加容易,提高了開發(fā)效率[3,4].相對于市面上其它的實(shí)時(shí)系統(tǒng),μC/OS - II具有可移植性、可裁剪、搶占式、高穩(wěn)定性與高可靠性等諸多優(yōu)點(diǎn).

      本文結(jié)合MPC5604B的特點(diǎn),對移植過程中設(shè)計(jì)到的任務(wù)切換及堆棧的保存與恢復(fù)等核心問題進(jìn)行了分析,成功的移植了μC/OS-II實(shí)時(shí)操作系統(tǒng).

      1 MPC5604B與xPC560B評估板

      MPC5604B微控制器是Freescale半導(dǎo)體公司針對下一代汽車應(yīng)用微控制器家族的擴(kuò)展,具有高達(dá)64MHz的工作頻率;帶有內(nèi)存保護(hù)單元(Memory Protection Unit,MPU),通過系統(tǒng)集成單元管理復(fù)位、外部中斷、通用I/O及引腳的控制;具有4個(gè)LIN總線控制器模塊、3個(gè)DSPI模塊、3個(gè)CAN總線控制器模塊、56個(gè)通道的16位增強(qiáng)型模塊化輸入輸出系統(tǒng)(Enhanced Modular IO Subsystem,eMIOS)、36個(gè)通道的10位精度模數(shù)轉(zhuǎn)化模塊(Analog-to-Digital Converter,ADC);定時(shí)器系統(tǒng)包括4個(gè)軟件定時(shí)器模塊(System Timer Module,STM),6個(gè)外圍中斷定時(shí)器(Periodic Interrupt Timer,PIT),一個(gè)實(shí)時(shí)計(jì)數(shù)器(Real Time Clock,RTC).除此之外,MPC5604B使用可變長度編碼(Variable-Length Encoding,VLE)功能,能幫助將代碼減小30%,提高了代碼密度,降低了存儲(chǔ)器的要求.

      本文所用的xPC560B評估板是PEMICRO公司針對MPC56xB系列微控制器開發(fā)的硬件平臺(tái),整套平臺(tái)包括了xPC56XXMB母板、MPC56xB最小系統(tǒng)、MPC5604B、PE公司USB-ML-PPCNEXUS開發(fā)套件.圖1給出了xPC560B評估板外圍端口及MPC5604B片內(nèi)資源.

      2 μC/OS-II在MPC5604B上的移植

      2.1 μC/OS-II特點(diǎn)及移植要求

      μC/OS-II是一款源碼開放的實(shí)時(shí)多任務(wù)操作系統(tǒng),其源碼絕大部分是用移植性強(qiáng)的ANSI C寫的,與微處理器硬件相關(guān)的部分是用匯編語言寫的,具有可裁剪、實(shí)時(shí)性強(qiáng)、可剝奪性、能夠方便移植到各種微處理器上的特點(diǎn).其高穩(wěn)定性和可靠性適用于實(shí)時(shí)性要求高,安全性要求苛刻的系統(tǒng)中.

      要使μC/OS-II正常運(yùn)行,處理器必須滿足以下要求[3]:

      1)處理器的C編譯器能夠產(chǎn)生可重入型代碼;

      2)處理器支持中斷,并且能夠產(chǎn)生定時(shí)中斷(通常為10~100Hz);

      圖1 xPC560B評估板及MPC5604B片內(nèi)資源

      圖2 μC/OS-II硬件/軟件體系結(jié)構(gòu)

      3)用C語言就可以開/關(guān)中斷;

      4)處理器能支持一定數(shù)量的數(shù)據(jù)存儲(chǔ)硬件堆棧(可能是幾千字節(jié));

      5)處理器有將堆棧指針以及其他CPU寄存器的內(nèi)容讀出、并存儲(chǔ)到堆棧或內(nèi)存中去的指令.

      MPC5604B能夠完全滿足上述要求,因此可以完成移植工作.

      圖2給出了μC/OS-II的結(jié)構(gòu)以及與硬件的關(guān)系.在移植過程中,通過OS_CFG.H的配置實(shí)現(xiàn)與應(yīng)用相關(guān)的系統(tǒng)配置,并裁剪掉不需要使用的系統(tǒng)服務(wù)程序代碼,通過對OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C的修改,實(shí)現(xiàn)任務(wù)堆棧的保存與恢復(fù)、任務(wù)切換、時(shí)鐘節(jié)拍中斷.

      2.2 MPC5604B 異常/中斷處理

      在移植過程中,需要用到兩處中斷,一是提供時(shí)鐘節(jié)拍的時(shí)鐘節(jié)拍中斷,選擇MPC5604B中的周期中斷定時(shí)器PIT產(chǎn)生的定時(shí)中斷實(shí)現(xiàn);一是在任務(wù)級任務(wù)切換時(shí)所需要產(chǎn)生的軟件中斷,調(diào)用內(nèi)核指令sc,產(chǎn)生系統(tǒng)調(diào)用異常實(shí)現(xiàn).在MPC5604B中,通過異常向量前綴寄存器和異常向量偏移寄存器統(tǒng)一管理異常處理程序的入口地址,所有外設(shè)中斷為被識(shí)別為4號(hào)異常,其全局處理程序入口地址對應(yīng)于4號(hào)異常向量偏移寄存器.全局處理程序通過中斷向量表調(diào)用相應(yīng)中斷服務(wù)程序.圖3給出了MPC5604B的異常處理流程.

      圖3 MPC5604B異常處理流程

      2.3 OS_CPU.H 的移植

      OS_CPU.H中主要涉及到一些與處理器有關(guān)的數(shù)據(jù)類型、相關(guān)常數(shù)以及相關(guān)語句的宏定義.

      因?yàn)槲⑻幚砥饔胁煌淖珠L,而且不同的編譯器的對數(shù)據(jù)類型的定義也不一樣,因此在移植時(shí)需要給出正確的數(shù)據(jù)類型定義.因?yàn)镸PC5604B是32位微控制器,移植時(shí)特別注意OS_STK以及CPU狀態(tài)寄存器OS_CPU_SR的數(shù)據(jù)類型的定義:

      typedef unsigned long OS_STK;

      typedef volatile unsigned long OS_CPU_SR;

      為了保證數(shù)據(jù)的完整性,μC/OS-II在處理臨界代碼時(shí)需要關(guān)中斷,處理完后再打開中斷.系統(tǒng)提供OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來實(shí)現(xiàn)開關(guān)中斷,并且提供三種方法.在移植中采用第三種方法,并通過相關(guān)匯編代碼保存和恢復(fù)當(dāng)前處理器的狀態(tài)值.

      堆棧增長方向設(shè)置,MPC5604B堆棧增長方向?yàn)閺纳?高地址)往下(低地址)遞減.故將OS_STK_GROWTH設(shè)為1.

      任務(wù)級任務(wù)切換OS_TASK_SW()是一個(gè)宏,是在μC/OS-II從低優(yōu)先級切換到高優(yōu)先級時(shí)任務(wù)級代碼調(diào)用.此處利用e200z0內(nèi)核中指令sc來實(shí)現(xiàn)中斷,通過中斷服務(wù)程序?qū)崿F(xiàn)任務(wù)的切換.

      #define OS_TASK_SW()asm(“sc”);

      圖4 任務(wù)調(diào)度流程圖

      2.4 OS_CPU_C.C 和OS_CPU_A.ASM的移植

      在OS_CPU_C.C文件中需要改寫10個(gè)C函數(shù),其中有9個(gè)是必須申明但不需要有源代碼的,另外一個(gè)函數(shù)OSTaskStkInit()是必需的.

      任務(wù)初始化函數(shù) OSTaskStkInit()由 OSTaskCreate()或OSTaskCreateExt()調(diào)用,用來初始化任務(wù)堆棧.將堆棧結(jié)構(gòu)初始化成像是剛剛發(fā)生過中斷一樣,所有寄存器都被推入堆棧.根據(jù)e200z0內(nèi)核的特點(diǎn),設(shè)計(jì)堆棧由高到低保存著特殊寄存器SPR和32個(gè)通用寄存器GPR.其在內(nèi)存中的映射如表1所示,表1中同時(shí)給出了OSTaskStkInit()執(zhí)行后任務(wù)堆棧中的情況.

      其中 task,p_arg,ptos為 OSTaskStkInit()傳入的參數(shù),msr為初始化時(shí)MSR寄存器的值,srr1為初始化時(shí)MSR寄存器的值并置位中斷允許位.

      在MPC5604B中,中斷發(fā)生時(shí),中斷返回地址被保存到SRR0中,MSR寄存器被保存到SRR1中.當(dāng)使用rfi指令從中斷返回時(shí),SRR0寄存器指明了中斷返回指令地址.在任務(wù)創(chuàng)建后,任務(wù)不是直接執(zhí)行的,而是通過OSSched()函數(shù)進(jìn)行調(diào)度.為了使調(diào)度簡單一致,在初始化時(shí)將SRR0和LR均指向任務(wù)函數(shù)入口.

      在移植OS_CPU_A.ASM文件時(shí)需要用匯編實(shí)現(xiàn)如下3個(gè)簡單的函數(shù):OSStartHighRdy(),OSCtxSw(),OSIntCtxSw().在移植中,采用C語言中內(nèi)嵌匯編編程,將這三個(gè)函數(shù)與時(shí)鐘節(jié)拍中斷服務(wù)函數(shù)OSTickISR()均放在OS_CPU_C.C文件中.

      表1 堆棧中寄存器的映射與初始化

      2.4.1 修改 OSStartHighRdy()函數(shù)

      OSStartHighRdy()在啟動(dòng)多任務(wù)時(shí)用來使就緒態(tài)任務(wù)中優(yōu)先級最高的任務(wù)開始運(yùn)行,在OSStart()中調(diào)用.下面給出移植到MPC5604B上的源代碼.

      (1)調(diào)用用戶定義的OSTaskSwHook()函數(shù);

      (2)置位OSRunning,使其為真;

      (3)得到最高優(yōu)先級任務(wù)指針,將OSTCBCur設(shè)為當(dāng)前最高優(yōu)先級任務(wù);

      (4)將最高優(yōu)先級任務(wù)堆棧指針放入GPR1中;關(guān)中斷并從新任務(wù)堆棧中恢復(fù)處理器所有寄存器的值,EPILOGUE見表2;

      (5)執(zhí)行中斷返回指令,跳轉(zhuǎn)到優(yōu)先級最高的任務(wù).

      2.4.2 修改 OSCtxSw()和 OSIntCtxSw()函數(shù)

      這兩個(gè)函數(shù)均是用來做任務(wù)切換的,它們的區(qū)別在于OSCtxSw()屬于任務(wù)級的任務(wù)切換函數(shù),在任務(wù)中調(diào)用OSSched()檢查是否有高優(yōu)先級任務(wù),如果有則調(diào)用OS_TASK_SW(),產(chǎn)生中斷進(jìn)入該任務(wù)切換函數(shù),而OSIntCtxSw()屬于中斷級的任務(wù)切換函數(shù),在中斷服務(wù)程序退出前檢查是否有更高優(yōu)先級任務(wù),如果有則調(diào)用該任務(wù)切換函數(shù).下面給出OSCtxSw()的源代碼.

      (1)將處理器全部寄存器壓入堆棧;

      (2)在當(dāng)前任務(wù)的任務(wù)控制塊中保存當(dāng)前任務(wù)的堆棧指針,PROLOGUE見表2;

      (3)調(diào)用用戶定義的OSTaskSwHook()函數(shù);

      (4)得到將要重新開始運(yùn)行的任務(wù)的堆棧指針;

      (5)更新全局變量OSTCBCur和OSPrioCur;

      (6)將最高優(yōu)先級任務(wù)堆棧指針放入GPR1中,關(guān)中斷并從新任務(wù)堆棧中恢復(fù)處理器所有寄存器的值;

      (7)執(zhí)行中斷返回指令,跳轉(zhuǎn)到新任務(wù).

      由于在進(jìn)入中斷后,已經(jīng)將處理器寄存器的值保存保存到當(dāng)前任務(wù)的任務(wù)堆棧中,所以在執(zhí)行中斷級的任務(wù)調(diào)度時(shí)不需要再次保存處理器寄存器的值,因此OSIntCtxSw()的絕大部分代碼與OSCtxSw()一樣,只是少了其中的(1)和(2)兩步.

      2.4.3 OSTickISR()函數(shù)

      OSTickISR()主要的任務(wù)是處理時(shí)鐘節(jié)拍中斷,通過調(diào)用時(shí)鐘節(jié)拍函數(shù)OSTimeTick()為系統(tǒng)提供時(shí)鐘節(jié)拍服務(wù),并在中斷退出前OSIntExit()函數(shù)檢查是否有更高優(yōu)先級任務(wù)處于就緒態(tài),進(jìn)行中斷級任務(wù)調(diào)度.

      移植中采用MPC5604B中的周期中斷定時(shí)器(PIT)作為時(shí)鐘中斷,將時(shí)鐘中斷頻率設(shè)置為100次/s,在啟動(dòng)任務(wù)中進(jìn)行初始化并允許其中斷.

      由于e200z0內(nèi)核指令沒有專門的壓棧出棧指令,在移植過程中使用相應(yīng)的匯編程序來實(shí)現(xiàn)處理器全部寄存器的保存和恢復(fù)過程,見表2.

      3 系統(tǒng)測試

      在移植完成后需要對系統(tǒng)進(jìn)行測試,通過測試來發(fā)現(xiàn)多任務(wù)間是否能夠進(jìn)行正常的任務(wù)切換.測試的方法很多,為了排除測試代碼的影響,采取建立兩個(gè)簡單任務(wù),通過開關(guān)LED燈來指示任務(wù)切換的情況.任務(wù)代碼如下.

      表2 堆棧保存/恢復(fù)代碼

      圖4給出了測試任務(wù)調(diào)度流程.通過Freescale xPC560B EVB硬件平臺(tái)進(jìn)行測試,LED0每隔4s改變一次狀態(tài),LED1每隔2s改變一次狀態(tài),系統(tǒng)按預(yù)先設(shè)計(jì)正常運(yùn)行,表明移植成功.

      4 結(jié)論

      本文通過分析μC/OS-II內(nèi)核特點(diǎn)及其多任務(wù)切換機(jī)制,結(jié)合e200z0內(nèi)核和MPC5604B的特點(diǎn),成功的將μC/OS-II移植到基于Power Architecture○R架構(gòu)的32位微控制器MPC5604上,并在移植后進(jìn)行了測試,驗(yàn)證了移植的可行性.

      在MPC5604B上成功移植μC/OS-II以后,可以在此基礎(chǔ)上對汽車電子控制系統(tǒng)應(yīng)用程序進(jìn)行優(yōu)化.例如,針對汽車變速器控制單元(TCU)控制程序中的離合器控制、換擋控制、起步控制、信號(hào)采集等進(jìn)行多任務(wù)設(shè)計(jì),結(jié)合MPC5604B高速、高精度和μC/OS-II高實(shí)時(shí)性、高可靠性的優(yōu)點(diǎn),進(jìn)一步優(yōu)化TCU控制程序,提高汽車的燃油經(jīng)濟(jì)性和舒適性.

      [1] MPC5604B/C Microcontroller Product Brief Rev.3[R].Freescale Semiconductor,Inc,2009.10.

      [2] MPC5604B/C Microcontroller Reference Manual Rev.8[R].Freescale Semiconductor,Inc,2011.5.

      [3] [美]Jean J.Labrosse.邵貝貝,譯.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II(第二版)[M].北京:北京航空航天大學(xué)出版社,2003.

      [4] 劉凱,張立民,趙小峰,等.μC/OS-II在微處理器LM3S8962上的移植[J].電子設(shè)計(jì)工程,2011,19(1):47 -50.

      [5] [美]Richard Soja,Munir Bannoura.龔光華,宮輝,安鵬,等譯.MPC5554/5553微處理器揭秘[M].北京:北京航空航天大學(xué)出版社,2010.

      [6] Errata to EREF:A Programmer’s Reference Manual for Freescale Book E Processors,Rev.0.2[R].Freescale Semiconductor,Inc ,2006.12.

      [7] xPC560B EVB User Manual Rev.1.01[R].P&E Microcomputer Systems,Inc,2008.

      猜你喜歡
      堆棧微控制器調(diào)用
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      嵌入式軟件堆棧溢出的動(dòng)態(tài)檢測方案設(shè)計(jì)*
      物聯(lián)網(wǎng)技術(shù)在微控制器實(shí)驗(yàn)教學(xué)中的應(yīng)用
      電子制作(2017年14期)2017-12-18 07:07:58
      基于堆棧自編碼降維的武器裝備體系效能預(yù)測
      基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
      Atmel針對新一代物聯(lián)網(wǎng)應(yīng)用發(fā)布全新32位微控制器
      最新STM32設(shè)計(jì)工具增加對混合信號(hào)微控制器的支持
      意法半導(dǎo)體(ST)推出世界首款基于ARM Cortex-M7的STM32 F7系列微控制器
      利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
      台湾省| 塔河县| 习水县| 阿荣旗| 太仆寺旗| 宿松县| 舒城县| 冷水江市| 凤庆县| 丹江口市| 台中市| 阿合奇县| 揭西县| 托克逊县| 青海省| 延安市| 彭州市| 称多县| 新乡县| 台中市| 新蔡县| 乐至县| 资兴市| 通海县| 潢川县| 长沙县| 从江县| 黑龙江省| 视频| 田东县| 京山县| 宜黄县| 韩城市| 城口县| 泸州市| 平陆县| 嘉黎县| 武义县| 大方县| 沙坪坝区| 绥中县|