999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ在LPC1788上的移植及應(yīng)用

2012-07-13 06:29:34薛晴
電子設(shè)計(jì)工程 2012年15期
關(guān)鍵詞:嵌入式定義

薛晴

(北京郵電大學(xué) 信息與通信工程學(xué)院,北京100876)

μC/OS-II系統(tǒng)是一款源碼公開(kāi)的,針對(duì)嵌入式系統(tǒng)的實(shí)時(shí)內(nèi)核操作系統(tǒng),與其它實(shí)時(shí)操作系統(tǒng)如Vxworks,Linux和Windows CE等相比,它比較適用于小型控制系統(tǒng),同時(shí)具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等優(yōu)點(diǎn)[4]。

LPC1788是恩智浦公司于2011年底推出的業(yè)界首款采用ARM?CortexTM-M3技術(shù)的微控制器,目前已批量上市。120 MHz的LPC178x系列擁有512 kB閃存、96 kB SRAM和4 kB EEPROM。32位外部存儲(chǔ)控制器支持SDRAM、NOR和SRAM器件,提供4種芯片選擇[2]。其先進(jìn)的低功耗工藝,特別適用于消費(fèi)電子、工業(yè)控制、安防、通訊系統(tǒng),以及需要高速計(jì)算的數(shù)據(jù)采集系統(tǒng)領(lǐng)域。

由于該款微處理器上市時(shí)間較短,目前還沒(méi)有μC/OS-II操作系統(tǒng)應(yīng)用于該款微處理器的移植代碼。文中詳細(xì)探討了在IAR6.3集成開(kāi)發(fā)環(huán)境下,如何在LPC1788處理器上移植μC/OS-II操作系統(tǒng)的過(guò)程與實(shí)現(xiàn)步驟,該移植與開(kāi)發(fā)過(guò)程已成功地在LPC1788目標(biāo)板上進(jìn)行了運(yùn)行測(cè)試。

1 μC/OS-Ⅱ內(nèi)核結(jié)構(gòu)及工作原理

1.1. μC/OS-Ⅱ系統(tǒng)結(jié)構(gòu)

圖1說(shuō)明了μC/OS-II的軟硬件體系結(jié)構(gòu)。應(yīng)用程序處于整個(gè)系統(tǒng)的頂層,每個(gè)任務(wù)都可以認(rèn)為自己獨(dú)占了CPU,因而可以設(shè)計(jì)成一個(gè)無(wú)限循環(huán)。μC/OS-II與處理器無(wú)關(guān)的代碼,提供了μC/OS-II的系統(tǒng)服務(wù),應(yīng)用程序可以使用這些API函數(shù)進(jìn)行內(nèi)存管理、任務(wù)間通信及創(chuàng)建、刪除任務(wù)。其中,μC/OS-II內(nèi)核最核心的作用就是對(duì)任務(wù)的管理。

圖1 μC/OS-II的系統(tǒng)總體結(jié)構(gòu)圖Fig.1 Structure diagram of μC/OS-II system

1.2 μC/OS-Ⅱ內(nèi)核基本工作原理

μC/OS—II的任務(wù)擁有自己的代碼和堆棧空間 (保存該任務(wù)的寄存器、返回地址和臨時(shí)參數(shù)),一般都是空函數(shù),不會(huì)返回任何值。任務(wù)執(zhí)行一次后,設(shè)置延時(shí)參數(shù)OSTCBDly。表明在經(jīng)過(guò)OSTCBDly個(gè)時(shí)鐘周期后再次運(yùn)行,然后任務(wù)進(jìn)行切換.使其他任務(wù)運(yùn)行。

μC/OS-Ⅱ下的任務(wù)有 5種狀態(tài):睡眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、等待狀態(tài)、中斷服務(wù)態(tài)。調(diào)度就是決定該輪到哪個(gè)任務(wù)運(yùn)行了,從而使一就緒的任務(wù)切換到運(yùn)行態(tài),這是內(nèi)核的主要職責(zé)之一。μC/OS-Ⅱ是基于優(yōu)先級(jí)調(diào)度算法的:也就是讓處于就緒態(tài)、優(yōu)先級(jí)最高的任務(wù)先運(yùn)行。

2 μC/OS-Ⅱ在LPC1788上的移植

由圖 1可知,μC/OS-Ⅱ的接口文件是 OS_CPU.H,OS_CPU_C.C和OS_CPU_A.ASM,移植的主要任務(wù)是改寫(xiě)這3個(gè)文件的代碼,使μC/OS-Ⅱ能在LPC1788上正常運(yùn)行。移植工作包括以下幾個(gè)內(nèi)容:

2.1 OS_CPU.H中的常量和宏定義

2.1 OS_CPU.H包括了用#defines定義的與處理器相關(guān)的常量,宏和類(lèi)型定義,堆棧寬度和增長(zhǎng)方式以及開(kāi)關(guān)中斷的宏定義[6]。

在IAR6.3環(huán)境下改寫(xiě)該文件時(shí)的幾點(diǎn)說(shuō)明:

1)由于Cortex-M3內(nèi)核堆棧支持從上往下的生長(zhǎng)方式,所以L1根據(jù)所選芯片LPC1788支持的類(lèi)型對(duì)宏OS_STK_GRWOTH進(jìn)行定義,

2)因LPC1788的狀態(tài)寄存器是32位寬,L2,L3定義的os_cpu_sr用于OS_CRITICAL_METHOD#3.中保存中斷狀態(tài)[3]。

3)OS_CPU.H文件中另外3個(gè)宏OS_CRITICAL_METHOD,OS_ENTER_CRITICAL (),OS_EXIT_CRITICAL()用于定義開(kāi)關(guān)中斷的方式及開(kāi)關(guān)中斷的實(shí)現(xiàn)。而OS_CPU_SR_Save()和 OS_CPU_SR_Restore(cpu_sr)的代碼則在OS_CPU_A.asm文件中匯編語(yǔ)言編寫(xiě),稍候會(huì)詳細(xì)介紹。

4)任務(wù)級(jí)的切換是通過(guò)調(diào)用L6的宏OS_TASK_SW()來(lái)實(shí)現(xiàn),OSCtxSw()的具體代碼在 OS_CPU_A.asm中用匯編語(yǔ)言實(shí)現(xiàn)。

2.2 OS_CPU_C.C中的用戶C語(yǔ)言函數(shù)

在OS_CPU_C.C中要求用戶編寫(xiě)8個(gè)簡(jiǎn)單的C函數(shù):OSTaskStkInit ()、OSTaskCreateHook ()、OSTaskDelHook ()、OSTaskSwHook ()、OSTaskStatHook ()、OSTimeTickHook ()、OS_TaskStkIni ()、OS_CPU_SysTickInit ()、OS_CPU_SysTick Handler(),除三個(gè)必須的函數(shù) OS_TaskStkIni,OS_CPU_SysTickInit和OS_CPU_SysTickHandler外,其它的5個(gè)函數(shù)是鉤子函數(shù),必須聲明但沒(méi)必要包含代碼。

1) OSTaskStkInit()函數(shù)

定義任務(wù)堆棧初始化函數(shù)OSTaskStkIni()的具體程序及注釋如下所示::

μC/OS-Ⅱ要求用戶提供一個(gè)周期性的時(shí)鐘源,以實(shí)現(xiàn)時(shí)間延遲和超時(shí)確認(rèn)功能,時(shí)鐘節(jié)拍每秒發(fā)生10~100次。必須在開(kāi)始多任務(wù)后,啟動(dòng)時(shí)鐘節(jié)拍中斷,所以可以在OSStart()運(yùn)行之后,μC/OS啟動(dòng)的第1個(gè)任務(wù)中調(diào)用OS_CPU_SysTickInit()初始化節(jié)拍中斷。基于LPC1788移植下的時(shí)鐘初始化函數(shù)的OS_CPU_SysTickInit()的代碼如下所示:OSIntExit();} /*告訴 uC/OS-II退出中斷服務(wù)程序*/當(dāng)時(shí)鐘節(jié)拍中斷發(fā)生時(shí),CPU會(huì)自動(dòng)把CPU寄存器推人堆棧。當(dāng)某任務(wù)的任務(wù)控制塊中時(shí)間延時(shí)項(xiàng)OSTCBDly減到了零,OSTimtick()就進(jìn)入了就緒態(tài)。 OSIntExit()會(huì)調(diào)用中斷級(jí)的任務(wù)切換函數(shù)OSIntCtxSw執(zhí)行任務(wù)切換,而不再執(zhí)行后面的指令。

2.3 OS_CPU_A.ASM中的用戶匯編語(yǔ)言函數(shù)

在OS_CPU_A.ASM中,因?yàn)镃語(yǔ)言不能直接存取寄存器,用戶在移植μC/OS-Ⅱ的時(shí)候,需要用匯編語(yǔ)言編寫(xiě)5個(gè)函 數(shù) : OS_CPU_SR_Save ()、OS_CPU_SR_Restore ()、OSStartHighRdy ()、OSCtxSw ()、OS_CPU_PendSVHandler ()。如下所示:

1) OS_CPU_SR_Save()函數(shù)

OS_CPU_SR_Save()函數(shù)實(shí)現(xiàn)用R0保存中斷屏蔽寄存器PRIMASK的狀態(tài)值,該函數(shù)被OS_ENTER_CRITICAL()宏調(diào)用[3]。

4) OSCtxSw()函數(shù)

當(dāng)一個(gè)任務(wù)放棄對(duì)CPU的控制后,OSCtxSw()就會(huì)被調(diào)用以實(shí)現(xiàn)任務(wù)切換,但對(duì)于ARM Cortex-M3來(lái)說(shuō),所有的任務(wù)切換都是由PendSV中斷服務(wù)程序來(lái)實(shí)現(xiàn)的,所以O(shè)SCtxSw()只是簡(jiǎn)單觸發(fā)PendSV中斷,然后返回調(diào)用者。

OS_CPU_PendSVHandler()負(fù)責(zé)處理 ARM Cortex-M3 所有的任務(wù)切換[3],在該程序開(kāi)始執(zhí)行時(shí),CPU首先把xPSR、PC、LR、R12,R0-R3和R4-R11寄存器保存到任務(wù)堆棧,然后獲得最高優(yōu)先級(jí)任務(wù)的堆棧指針,將最高優(yōu)先級(jí)任務(wù)的寄存器按順序從任務(wù)堆棧中恢復(fù)出來(lái),最后執(zhí)行中斷返回:

不同任務(wù)的切換會(huì)發(fā)生在停止當(dāng)前低優(yōu)先級(jí)的任務(wù)轉(zhuǎn)而去執(zhí)行較高優(yōu)先級(jí)任務(wù)的情形,這是由一個(gè)任務(wù)級(jí)切換函數(shù)OS_TASK_SW()實(shí)現(xiàn)的,該函數(shù)通過(guò)調(diào)用 OSCtxSw()函數(shù)觸 發(fā) PendSV中 斷 ,PendSV中 斷 服 務(wù) 程 序OS_CPU_PendSVHandler完成具體的任務(wù)切換操作。OS_CPU_PendSVHandler的編寫(xiě)實(shí)質(zhì)上是通過(guò)改變PC中的內(nèi)容來(lái)實(shí)現(xiàn)的,首先將當(dāng)前任務(wù)環(huán)境保存到相應(yīng)的任務(wù)堆棧中,同時(shí)將PC指向新任務(wù)開(kāi)始運(yùn)行的地方,然后將新任務(wù)環(huán)境從堆棧中恢復(fù)到相應(yīng)的寄存器中,最后執(zhí)行中斷返回。在中斷返回時(shí),Cortex-M3將從堆棧中恢復(fù)R3-R0,R12,LR,PC和xPSR寄存器,開(kāi)始運(yùn)行新任務(wù),從而實(shí)現(xiàn)任務(wù)的切換。

3 應(yīng)用測(cè)試

文中使用LPC1788目標(biāo)板對(duì)上述移植進(jìn)行了實(shí)驗(yàn)測(cè)試,目標(biāo)板有四個(gè)按鍵和兩個(gè)LED,本測(cè)試建立了App_TaskStart()、App_TaskKbd()、App_TaskLed()三個(gè)任務(wù)。 App_TaskStart()負(fù)責(zé)硬件初始化及OS初始化,建立消息郵箱及另兩個(gè)任務(wù),然后進(jìn)入無(wú)限循環(huán),在循環(huán)體內(nèi)調(diào)用OSTimeDly(200)以實(shí)現(xiàn)延時(shí)和任務(wù)調(diào)度。App_TaskKbd()負(fù)責(zé)查詢按鍵并通過(guò)消息郵箱將鍵值發(fā)送給任務(wù)App_TaskLed(),App_TaskLed()根據(jù)鍵值改變LED的閃爍頻率。測(cè)試程序通過(guò)IAR6.3編譯,把生成的二進(jìn)制文件固化到LPC1788目標(biāo)板上,接通電源后可以準(zhǔn)確穩(wěn)定地運(yùn)行,說(shuō)明在IAR6.3環(huán)境下基于LPC1788的μC/OS-II移植成功。

4 結(jié)束語(yǔ)

文中分析了μC/OS-Ⅱ內(nèi)核的文件結(jié)構(gòu)及基本工作原理,成功實(shí)現(xiàn)了其在LPC1788上的移植。文中相應(yīng)的源代碼不用作任何改變,直接復(fù)制到μC/OS-Ⅱ相應(yīng)文件中,可順利實(shí)現(xiàn)多任務(wù)調(diào)度,且運(yùn)行穩(wěn)定、可靠,可以進(jìn)行ARM Cortex-M3微控制器LPC17xx系列的各種應(yīng)用系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)。

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

[2]NXP LPC178x/7x preliminary user manual,[EB.OL]2011.http://www.nxp.com

[3]Micriμm μC/OS-II and ARM Cortex-M3 Processors Application Note(2011)http://www.Micrium.com

[4]孫繼如,郭敏,張宇翔,等.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ在LPC2378上的移植及應(yīng)用[J].現(xiàn)代電子技術(shù),2010(12):33-36.

SUN Ji-ru,GUO Min,ZHANG Yu-xiang,et al.Transplant and application of the embedded real-time OS μC/OS-Ⅱon LPC2378[J].Modern Electronics Technique,2010(12):33-36.

[5]顧鳳玉,施國(guó)梁,楊濤.基于LPC2478的μC/OS-II的移植及多任務(wù)的實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2009(5):1736-1739.GU Feng-yu,SHI Guo-liang,YANG Tao.On the porting of μC/OS-II to LPC2478 ARM processor and the implementation of multitasks[J].Computer Knowledge and Technology,2009(5):1736-1739.

[6]韓明峰,李小濱,鄭永志.uC/OS-II內(nèi)核超時(shí)等待機(jī)制的分析與改進(jìn)[J].計(jì)算機(jī)工程, 2009,35(7):259-266.

HAN Ming-feng,LI Xiao-bin,ZHENG Yong-zhi.Analysis and improvement of waiting-timeout mechanism in uC/OS-II Kernel[J].Computer Engineering,2009,35(7):259-266.

[7]劉艷軍.基于C8051和μC/OS-Ⅱ的數(shù)控機(jī)床嵌入式執(zhí)行控制器實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010(16):63-65.

LIU Yan-jun.Realization of embedded actuator&Controller for CNC machine tool based on C8051 and μC/OS-Ⅱ[J].Modern Electronics Technique,2010(16):63-65.

[8]汪獻(xiàn)忠,郭鳳華,田增國(guó).基于ARM和μC/OS-Ⅱ的在線磷酸根離子監(jiān)測(cè)儀設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2010(19):154-155,158.

WANG Xian-zhong,GUO Feng-hua,TIAN Zeng-guo.Design of phosphate ion online monitoring instrument based on ARM and μC/OS-Ⅱ[J].Modern Electronics Technique,2010(19):154-155,158.

猜你喜歡
嵌入式定義
永遠(yuǎn)不要用“起點(diǎn)”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
定義“風(fēng)格”
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統(tǒng)通信技術(shù)的應(yīng)用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開(kāi)發(fā)平臺(tái)
嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
Altera加入嵌入式視覺(jué)聯(lián)盟
倍福 CX8091嵌入式控制器
修辭學(xué)的重大定義
主站蜘蛛池模板: 成人欧美日韩| 亚洲成人www| 99久久精品无码专区免费| 亚洲AV一二三区无码AV蜜桃| 成人国产免费| 国产精品太粉嫩高中在线观看 | 国产高清不卡视频| 欧美成人影院亚洲综合图| 亚洲欧美人成人让影院| 亚洲男女在线| 青青草国产免费国产| 少妇高潮惨叫久久久久久| 久久久久无码精品| 欧美日韩在线亚洲国产人| 日韩高清欧美| 欧美一级夜夜爽www| 亚洲天堂网视频| 成人综合网址| 亚洲一区二区三区在线视频| 久久久久青草大香线综合精品| av在线无码浏览| 中文字幕无线码一区| 黄色免费在线网址| 国产日本视频91| 亚洲国产欧美国产综合久久| 久久青草免费91观看| 国产成人综合日韩精品无码首页| 九九九精品成人免费视频7| 久久这里只有精品2| 国产69精品久久久久妇女| 国产一区二区三区夜色| 色亚洲激情综合精品无码视频| 久久亚洲日本不卡一区二区| 亚洲视频三级| 国产精品午夜福利麻豆| 久久性视频| 国产91小视频在线观看| 91精品伊人久久大香线蕉| 国内精品久久久久久久久久影视 | 欧美日韩精品一区二区在线线| 久久成人18免费| 亚洲水蜜桃久久综合网站| 高清无码一本到东京热| 欧美成人看片一区二区三区| 欧美色综合久久| 永久天堂网Av| 色播五月婷婷| 麻豆精品国产自产在线| 伊在人亚洲香蕉精品播放| 国产成人av大片在线播放| 亚洲国产欧美国产综合久久| 久久夜色精品国产嚕嚕亚洲av| 久热精品免费| 欧美专区在线观看| 亚洲色大成网站www国产| 免费一级毛片不卡在线播放| 波多野结衣AV无码久久一区| 国产区精品高清在线观看| 色悠久久综合| 国产丝袜啪啪| 国产麻豆另类AV| 国产成人精品高清在线| 亚洲国产综合第一精品小说| 成人噜噜噜视频在线观看| 午夜久久影院| 久久亚洲黄色视频| 国产成人精品2021欧美日韩| 婷婷午夜天| 欧美亚洲第一页| 亚洲欧美综合精品久久成人网| 国产91在线|中文| 亚洲—日韩aV在线| 久久公开视频| 国产精品九九视频| 亚洲水蜜桃久久综合网站| 极品国产一区二区三区| 日本AⅤ精品一区二区三区日| 国产黄网永久免费| 99久久国产精品无码| 免费一极毛片| 91久久偷偷做嫩草影院电| 国产成人精品一区二区不卡|