国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

μC/OS?Ⅲ實時內(nèi)核在F28M35x器件上的移植

2015-11-09 22:17:59王嘯等
現(xiàn)代電子技術(shù) 2015年21期

王嘯等

摘 要: 在微控制器中使用實時內(nèi)核可以簡化嵌入式應(yīng)用開發(fā)。簡單介紹了μC/OS?Ⅲ實時內(nèi)核和Cortex?M3內(nèi)核的相關(guān)內(nèi)容,將μC/OS?Ⅲ實時內(nèi)核移植到F28M35x多內(nèi)核片上系統(tǒng)微控制器中,并闡述了μC/OS?Ⅲ實時內(nèi)核中任務(wù)的創(chuàng)建和調(diào)度原理,最終在目標板上運行并進行多任務(wù)切換。

關(guān)鍵詞: μC/OS?Ⅲ; 嵌套向量中斷控制器; 實時內(nèi)核; 任務(wù)切換

中圖分類號: TN919?34; TP316.2 文獻標識碼: A 文章編號: 1004?373X(2015)21?0159?03

Transplantation of μC/OS?Ⅲ real?time kernel on F28M35x device

WANG Xiao, MEI Jialun, CHEN Yue

(Ningbo CSR Times Transducer Techinique Co.,Ltd, Ningbo 315020, China)

Abstract: Application of real?time kernel in microcontroller can simplify the development of embedded application. The related contents of μC/OS?Ⅲ real?time kernel and Cortex?M3 kernel are introduced briefly in this paper, in which the μC/OS?Ⅲ real?time kernel is transplanted into SOC microcontroller of F28M35x dual?core device. The principles of task creation and dispatch in μC/OS?Ⅲ real?time kernel are elaborated. It was operated on target board and switched among multitasks.

Keywords: μC/OS?Ⅲ; nested vectored interrupt controller; real?time kernel; task switch

0 引 言

μC/OS?Ⅲ(Micro C OS Three,微型的C語言編寫的操作系統(tǒng)第3版)是一個可升級的、可固化的、基于優(yōu)先級的實時內(nèi)核,Micrium公司于2011年8月公開原碼,它具備良好的移植性,可以在多種微控制器中運行,加快了嵌入式軟件應(yīng)用開發(fā)。相比上一代μC/OS?Ⅱ,μC/OS?Ⅲ可以將多個任務(wù)設(shè)置在同一優(yōu)先級上,并按時間片輪轉(zhuǎn)調(diào)度,且任務(wù)數(shù)量是無限制的[1]。而隨著ARM在嵌入式領(lǐng)域的不斷發(fā)展,Cortex?M3器件在嵌入式領(lǐng)域可謂風生水起,它高效的NVIC(Nested Vectored Interrupt Controller)、高性能的RISC(Reduced Instruction Set Computer)以及固定的存儲器位置意味著以它為內(nèi)核的微控制器都可以方便地移植軟件,因此在Cortex?M3上使用μC/OS?Ⅲ實時內(nèi)核是極為方便的[2]。

1 F28M35x器件和μC/OS?Ⅲ

F28M35x器件內(nèi)部集成了Cortex?M3內(nèi)核和DSP?C28內(nèi)核,可以通過核間通信交互協(xié)作[3]。高達132 KB的片上RAM、完善的外設(shè)和高速的時鐘意味著它可以勝任許多任務(wù):從通信到實時控制。M3內(nèi)核高效的架構(gòu)和快速的中斷響應(yīng),使其適合使用嵌入式實時內(nèi)核[4]。Cortex?M3配備的MPU還具備特權(quán)級和用戶級操作,增加安全性[5]。

μC/OS?Ⅲ和Cortex?M3是密切相連的,主要包括NVIC(嵌套向量中斷控制器)、PendSV(可掛起的系統(tǒng)服務(wù)請求)、SysTick(系統(tǒng)節(jié)拍定時器)等。NVIC是與M3內(nèi)核緊密相聯(lián)的中斷控制器,它支持中斷嵌套、動態(tài)優(yōu)先級、中斷屏蔽等,移植μC/OS?Ⅲ離不開它。PendSV典型的應(yīng)用場合是上下文切換,它通過操作系統(tǒng)掛起中斷,其優(yōu)先級被設(shè)置為所有中斷中最低,所有其他的中斷服務(wù)都執(zhí)行完畢時它才會被執(zhí)行,最終實現(xiàn)任務(wù)切換。而SysTick作為系統(tǒng)的心跳,會尋找優(yōu)先級最高的任務(wù),在多任務(wù)調(diào)度中起著關(guān)鍵的作用[6]。

在Micrium網(wǎng)站可以找到μC/OS?Ⅲ源代碼,配合TI提供的Mware庫和Code Composer Studio IDE及controlSUITE,移植工作就可以輕松展開。

2 μC/OS?Ⅲ移植工作

2.1 文件結(jié)構(gòu)

μC/OS?Ⅲ工程中的文件可以分為5個部分:實時內(nèi)核相關(guān)、CPU相關(guān)、板級支持、芯片級支持、常用庫支持。為了讓芯片正常工作,需要修改板級的代碼如時鐘配置和初始化。其次,對于不同編譯器、不同微控制器,內(nèi)核和CPU部分的代碼也需要調(diào)整。μC/OS?Ⅲ還提供了獨立于編譯器和CPU的數(shù)據(jù)類型、函數(shù)接口等,方便修改。此外,字符串處理、數(shù)學庫等也獨立提供,方便不同平臺移植。

2.2 內(nèi)核相關(guān)

與內(nèi)核相關(guān)的文件名都以os開頭,其最重要的核心內(nèi)容在os_cpu_a.asm中,也是修改的首要對象。內(nèi)核最重要的工作是負責任務(wù)調(diào)度。在創(chuàng)建好任務(wù)并開始運行μC/OS?Ⅲ時,CPU首先要選擇最高優(yōu)先級且已就緒的任務(wù)來執(zhí)行,這個事件由OSStartHighRdy()來執(zhí)行,它在OSStart()中調(diào)用一次。內(nèi)容包括:將PendSV中斷優(yōu)先級設(shè)為最低,將進程棧指針PSP清零準備首次上下文切換,將主棧指針MSP設(shè)為為其分配的內(nèi)存地址,掛起PendSV中斷并開啟中斷。注意它只運行一次。修改后的內(nèi)容如圖1所示。其中NVIC寄存器和分配的堆棧地址宏是事先定義的,在CCS(Code Composer Studio)中用.word關(guān)鍵詞,此外,全局符號用.global,外部引用用.ref關(guān)鍵詞。

圖1 與內(nèi)核相關(guān)的改動

在這之后就開始了多任務(wù)調(diào)度模式。在Cortex?M3中,上下文切換只需手動保存和恢復(fù)R4?R11和PSP寄存器,xPSR,PC,LR,R12,R0?R3由硬件自動管理[7]。由于PendSV的優(yōu)先級已經(jīng)被設(shè)為最低,因此可利用它的緩期執(zhí)行特點來切換任務(wù),當執(zhí)行一個系統(tǒng)調(diào)用如延時或時間片輪轉(zhuǎn)調(diào)度時可觸發(fā)上下文切換,它會在其他重要的任務(wù)都完成后才會執(zhí)行動作。因為當其他中斷在執(zhí)行時如果產(chǎn)生了上下文切換,將產(chǎn)生錯誤中斷。而PendSV的機制會確保這一切準確無誤且不會占用太多CPU資源。修改方式類似OSStartHighRdy()。

在uC/OS?Ⅲ中,任務(wù)調(diào)度由OSSched()來進行,它不斷找出優(yōu)先級最高且就緒的任務(wù),并掛起PendSV中斷來調(diào)度。它在系統(tǒng)延時、事件同步中都會被調(diào)用到,而中斷到任務(wù)的調(diào)度則在OSIntExit()中,即退出中斷時引用,最終也是通過掛起PendSV來調(diào)度的。

2.3 CPU相關(guān)

與CPU相關(guān)的改動主要在cpu_a.asm中。這里定義了開關(guān)中斷、臨界區(qū)函數(shù)等內(nèi)容。臨界區(qū)又叫關(guān)鍵代碼段,在執(zhí)行時絕對不能被打斷,因此中斷必須被關(guān)閉。將中斷信息保存起來然后在退出臨界區(qū)前再恢復(fù),才能保證系統(tǒng)正確執(zhí)行。這些由CPU_SR_Save和CPU_SR_Restore來執(zhí)行,它們是成對使用的。修改后的代碼如圖2所示。

圖2 與CPU相關(guān)的改動

任務(wù)調(diào)度過程中,可以利用Cortex?M3的指令CLZ查找優(yōu)先級最高的任務(wù),而不必采用以往查表的方式。CLZ指令可找出一個字的第一個有效位的位數(shù),將它寫成一段匯編指令如圖2所示,它在OS_PrioGetHighest中引用,用于優(yōu)先級調(diào)度。

此外,在cpu.h中給出處理器的數(shù)據(jù)類型、字長、棧、臨界區(qū)等定義。Cortex?M3字長為32位,堆棧類型為滿遞減堆棧[8](FD)。

2.4 板級支持

在bsp.c中包含了板級初始化的內(nèi)容,包括配置時鐘、配置SysTick中斷、配置LED的GPIO,如圖3所示。在TI提供的例程中可以找到完善的初始化方法,它們更加簡潔。注意在此處即可打開SysTick中斷,周期為1 ms。中斷入口為OS_CPU_SysTickHandler,將它寫入到啟動文件的中斷向量表中。這些內(nèi)容修改完以后,再選擇自己手頭板載的LED燈管腳來配置。在TI的TMDXDOCKH52C1開發(fā)板上LED燈使用了PC6,PC7引腳。打開GPIOC時鐘并將引腳配置為輸出。如果使用了CCS提供的啟動文件,要將中段向量地址手動傳入到RAM中,可以使用IntFlashVTable()來實現(xiàn)。

完成所有修改以后就可以編譯工程了。

3 任務(wù)調(diào)度

在創(chuàng)建自己的任務(wù)以前先了解一下任務(wù)優(yōu)先級的概念。在μC/OS?Ⅲ中任務(wù)的優(yōu)先級在創(chuàng)建任務(wù)時被傳入,其值越大優(yōu)先級越低,因此優(yōu)先級0為最高優(yōu)先級,空閑任務(wù)的優(yōu)先級為優(yōu)先級最大值減去1。優(yōu)先級最大值默認為10。

圖3 板級初始化

接下來需要了解任務(wù)是如何調(diào)度的。通常來說在使用系統(tǒng)延時OSTimeDlyHMSM或OSTimeDly時,等待同步事件如信號量到來,即任務(wù)進入阻塞狀態(tài)時系統(tǒng)會進行任務(wù)調(diào)度,開始執(zhí)行已經(jīng)就緒的任務(wù)中優(yōu)先級最高的任務(wù)。此外,系統(tǒng)內(nèi)部時基任務(wù)OSTickTask也可以用于任務(wù)切換,它在創(chuàng)建時被設(shè)置的默認優(yōu)先級為7,用戶可以修改它的優(yōu)先級,通常來說它的優(yōu)先級應(yīng)該設(shè)置為比重要任務(wù)的優(yōu)先級稍低,但高于那些希望被搶占的任務(wù)。例如有一個低優(yōu)先級的任務(wù)是一個死循環(huán)而沒有阻塞,高優(yōu)先級的任務(wù)在就緒時希望去搶占這個低優(yōu)先級的任務(wù),在μC/OS?Ⅲ中就是由OSTickTask這個任務(wù)來實現(xiàn)的,但OSTickTask的優(yōu)先級應(yīng)該要高于那個低優(yōu)先級的任務(wù)[9]。

現(xiàn)在分別創(chuàng)建TaskLED1,TaskLED2,TaskUART三個任務(wù),分別控制2盞LED燈和輸出OSTaskCtxSwCtr任務(wù)切換值,并賦予不同優(yōu)先級,如圖4所示。可以看到燈開始閃爍并且串口有信息輸出,可見任務(wù)調(diào)度是成功的。在μC/OS?Ⅲ中可以創(chuàng)建足夠多的任務(wù),只要內(nèi)存足夠使用[10]。學會了任務(wù)創(chuàng)建和任務(wù)調(diào)度以后,操作系統(tǒng)最基礎(chǔ)的使用方法就已經(jīng)掌握了。

4 結(jié) 語

本文對μC/OS?Ⅲ實時內(nèi)核進行了深入探討并闡述了核心內(nèi)容,通過將其移植到F28M35x器件平臺中實現(xiàn)多任務(wù)調(diào)度,了解了μC/OS?Ⅲ的使用原理。由于μC/OS?Ⅲ可在眾多器件中移植,因而應(yīng)用的開發(fā)將變得十分容易,可以簡化軟件框架的部署,將更多精力用于應(yīng)用層設(shè)計,為工程開發(fā)提供了更多的選擇。

參考文獻

[1] 宮輝,龔光華,黃土琛.從μC/OS?Ⅱ到μC/OS?Ⅲ的各種改進[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012,12(10):79?81.

[2] LABROSSE J J. μC/OS?Ⅲ: the real?time kernel [M]. US: Texas Instruments, 2015.

[3] Texas Instruments. SYS/BIOS inter?processor communication (IPC) 1.25 user′s guide [R]. US: Texas Instruments, 2012.

[4] Texas Instruments. TI SYS/BIOS v6.35 real?time operating system user′s Guide [R]. US: Texas Instruments, 2013.

[5] Texas Instruments. Concerto F28M35x technical reference ma?nual [R]. US: Texas Instruments, 2015.

[6] ARM. Cortex?M3 technical reference manual [R]. Cambridge: ARM, 2010.

[7] YIU J. ARM Cortex?M3權(quán)威指南[M].2版.北京:清華大學出版社,2014.

[8] LABROSSE J J. Hardware?accelerated RTOS: μC/OS?Ⅲ HW?RTOS and the R?IN32M3 [R]. US: Texas Instruments, 2014.

[9] 黃土琛,宮輝,邵貝貝.μC/OS?Ⅲ對任務(wù)調(diào)度的改進[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012,12(11):78?80.

[10] MANOJ K R B, SATYANARAYANA G S R, SEETARAMANJANEYULU B. Scheduling latency comparison of two open?source RTOSs on CORTEX?M3 [C]// Proceedings of 2014 IEEE International Conference on Embedded Systems. Coimbatore: IEEE, 2014: 59?62.

日喀则市| 抚宁县| 颍上县| 深泽县| 呼和浩特市| 武夷山市| 太谷县| 历史| 渝中区| 湖南省| 时尚| 赣榆县| 浦县| 丘北县| 缙云县| 鹰潭市| 边坝县| 天祝| 隆德县| 霍邱县| 海门市| 大埔县| 新余市| 平潭县| 泗洪县| 巴里| 青阳县| 嘉善县| 长阳| 会昌县| 宜宾县| 柘荣县| 石林| 贵溪市| 平安县| 合肥市| 隆安县| 湾仔区| 疏勒县| 长乐市| 新昌县|