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

實時操作系統FreeRTOS移植的實驗研究

2016-11-22 06:54:42王劍平楊曉洪
化工自動化及儀表 2016年7期
關鍵詞:嵌入式系統管理

夏 鑫 張 果 王劍平 楊曉洪

(昆明理工大學信息工程與自動化學院,昆明 650500)

實時操作系統FreeRTOS移植的實驗研究

夏 鑫 張 果 王劍平 楊曉洪

(昆明理工大學信息工程與自動化學院,昆明 650500)

分析了實時操作系統FreeRTOS的原理、內核組成與任務管理機制。完成FreeRTOS實時操作系統在S3C44b0x硬件平臺上跨平臺、跨編譯器的移植。同時設計了固定優先級調度與二值信號量任務間的同步通信實驗,驗證了FreeRTOS操作系統移植的正確性和實驗設計的合理性。

FreeRTOS 移植 S3C44b0x 任務同步通信 任務調度

隨著計算機技術和微電子技術的推進,嵌入式技術這門新興學科產生并且迅速發展,因此傳統的單機、單任務模式已經無法滿足現代嵌入式設備在功能上的需求,在這種情況下,引入操作系統是嵌入式系統發展的必然趨勢。

將嵌入式設備引入操作系統,對于整個系統的硬件和軟件資源,操作系統都可以合理有效地管理,這對整個系統的性能有了很大程度的提升。而當執行一個復雜的應用程序時,嵌入式操作系統可將它分解為若干個實現特定獨立功能的子任務模塊,模塊之間則通過任務通信機制、任務管理來實現一個完整的功能,這種“自下而上”的結構化設計同時也便于系統開發。

FreeRTOS(Free Real Time Operating System)作為一個輕量級嵌入式實時操作系統,憑借其開源和完全免費的優勢,滿足了大多數中小型嵌入式系統對RTOS的需求,得到了越來越廣泛地應用。FreeRTOS擁有源代碼公開、可移植、可裁剪、調度策略靈活及輕量級等特點,適用于絕大多數處理器,在國外業界倍受開發者青睞。在此,筆者對實時操作系統FreeRTOS在S3C44b0x上的移植進行了分析研究,并設計相關實驗進行驗證,最后指出FreeRTOS操作系統的優勢與不足。

1 FreeRTOS內核分析①

FreeRTOS內核管理(圖1)包括任務管理、時間管理、內存管理和通信管理4部分[1]。

圖1 FreeRTOS內核管理結構

FreeRTOS通過任務控制塊對任務施行管理;時間管理包括時鐘的產生管理和任務延時管理;內存管理中,FreeRTOS為用戶提供了4種不同的內存分配管理方案,用戶可以根據需求選擇合適的一種;此外,內核中還提供任務通信管理機制,分為消息管理和任務同步管理。其中同步機制又包括信號量和互斥量,FreeRTOS沒有消息郵箱同步機制,所有的同步機制都是基于消息隊列來實現的[2]。

2 FreeRTOS任務管理

2.1FreeRTOS任務模型

FreeRTOS對任務數量沒有限制。相較于其他實時操作系統,FreeRTOS有一個突出的特點,即在任務的優先級管理中允許不同任務之間可以設置相同的優先級。在FreeRTOS中任務可設置0~255個不同的優先級,設置的數值決定了任務的優先級別,數值越大對應任務的優先級別越高,空閑任務的優先級最低,對應的數值默認為0,它能執行的前提是CPU中不存在其他更高優先級的任務需要執行。除此之外,每當創建一個任務時,系統都會為它分配獨立的任務堆棧空間和一個任務控制塊TCB,而FreeRTOS整個內存空間的大小用戶可以在系統配置文件中進行相應配置[3]。

2.2FreeRTOS任務調度策略

FreeRTOS實時操作系統內核在工作時可設置為兩種類型,即可剝奪方式和不可剝奪方式[4]。當系統內核設置為可剝奪工作方式時,最高優先級的任務一旦就緒,總能得到CPU的控制權,系統允許優先級別高的任務搶占剝奪優先級別低的任務的CPU使用權。同時,FreeRTOS允許不同的任務之間使用相同優先級,任務調度器可以通過時間片輪詢方式來執行優先級別相同的任務。此外,FreeRTOS支持搶占式和協作式混合任務調度策略。從搶占式調度時序圖(圖2)可以看到,task1、task2、task3和系統空閑任務idle task,所對應的優先級分別為5、2、2、0;在t3和t6時刻,任務task2處于就緒狀態,剝奪空閑任務idle task對于CPU的使用權,進入運行狀態,在t7時刻,CPU的使用權則被更高優先級的任務task1剝奪。

圖2 搶占式調度時序

FreeRTOS支持固定優先級任務調度,即當有兩個任務處于就緒狀態時,系統將優先執行優先級別高的,但在某些應用場合中系統需改變任務的優先級[5]。如遇到兩個相同優先級別的任務時,系統在固定優先級調度策略中,可以通過采用FIFO(先進先出)的調度機制,即先獲得CPU執行權的任務先執行,實現CPU時間片輪詢的調度方式,從而處理相同優先級別的任務[1,6]。如圖2所示,優先級相同的任務task2和task3在t3時刻都處于就緒狀態,由于task2先進就緒鏈表,從而task2先獲得CPU執行權,按照時間片輪詢調度原則執行task2與task3。

2.3任務同步通信

FreeRTOS操作系統中,任務間的同步通信是通過信號量與互斥量兩種機制來實現的,其中信號量包括計數信號量、二值信號量和遞歸信號量[7,8]。這兩種任務同步通信機制都是基于隊列機制來實現的。通過獲取信號量,需執行的任務獲得CPU執行權,執行完后再通過釋放信號量來讓出CPU使用權。需要注意的是,通信的信號量必須在使用之前先創建[1,9]。

計數信號量的作用是事件計數和資源管理。在事件計數中,通過獲取和給出信號量,對信號量的計數值減1或加1,來計數已發生的事件數與已處理的事件數之間的差值。在資源管理中,計數值用來統計資源的可用數目。具體的做法是:在初始化創建時先設定一個可用資源總數,當一個任務需獲取資源的使用權時,先獲得信號量同時計數信號量的值減1;在任務執行完后將給出信號量釋放資源,信號量計數值加1;當系統沒有可用資源時其計數值為0[1,10]。

二值信號量實質就是一個特殊的隊列的宏[1,11]。定義一個二值信號量為深度為1的一個隊列,隊列不滿時即為空,此時信號量的值為0或1,所以稱為二值信號量。二值信號量和互斥量極為相似,兩者不同的地方是互斥量包含了優先級繼承機制,而二值信號量并沒有包括。因此,在任務與任務、任務與中斷之間同步運用最好選擇二值信號量;而兩個任務間相互排斥時更適合運用互斥量[12]。

利用二值信號量實現任務與中斷同步的時序圖如圖3所示。在t2時刻中斷發生,執行相應的中斷服務函數,在中斷服務函數中調用xSemaphoreGiveFromISR函數釋放信號量。在FreeRTOS中只有帶ISR結尾的API函數才能在中斷處理函數中被調用。Handler_Task同步任務的優先級必須比被中斷前執行的任務優先級高。中斷服務例程釋放信號量,同步任務被喚醒并獲得CPU使用權。在t3時刻中斷服務函數處理完之后,同步任務隨之執行,執行完后釋放信號量。同步任務又進入阻塞狀態,等待下一次中斷的到來。在中斷服務例程中快速處理少量的操作,大量處理置于同步任務當中完成,如此便完成了中斷與任務之間的同步通信。

圖3 任務與中斷同步時序

3 FreeRTOS的移植

3.1內核源代碼

與大多數嵌入式實時操作系統一樣,FreeRTOS也針對不同編譯器和不同微處理器為開發者提供了移植接口的模板。但并非所有型號都有,開發者可以根據自己選用的編譯器和微處理器類型選擇相應或相近的模板作為參照來進行移植。在此,筆者以ARM7_LPC2129_Kiel_RVDS例程為模板,移植到S3C44b0x處理器的目標板和ADSv1.2編譯器上。此外,FreeRTOS在設計時,大部分內核代碼都是由C語言編寫,只有很少一部分與硬件相關的代碼是用匯編實現[1,12],以便于開發者移植應用。

如圖4所示,FreeRTOS支持的與硬件無關的內核所有源代碼包含在4個.c文件中,分別是queue.c、tasks.c、list.c和croutine.c,其中前3個是FreeRTOS 內核接口,croutine.c實現了常規功能封裝,一般用于在內存資源極為有限的系統中,這里不考慮。另一部分與硬件相關的源代碼,LPC2129例程中包含port.c、portasm.s、portmacro.inc和portmacro.h共4個接口文件,在移植過程中只需對這部分做相應修改即可。

圖4 FreeRTOS移植接口

3.2移植接口實現

當以匯編代碼來實現操作系統進行任務切換時,portmacro.h和portmacro.inc這兩個宏文件起到保存和恢復現場的作用,分別保存寄存器R0~R14的值。相關程序如下:

MACRO

portSAVE_CONTEXT;保存現場

STMDB SP!,{R0}

STMDB SP,{SP}^

NOP

SUB SP,SP,#4

LDMIA SP!,{R0}

STMDB R0!,{LR}

MOV LR,R0

LDMIA SP!,{R0}

STMDB LR,{R0-LR}^

NOP

SUB LR,LR,#60

MRS R0,SPSR

STMDB LR!,{R0}

LDR R0,=ulCriticalNesting

LDR R0,[R0]

STMDB LR!,{R0}

LDR R0,=pxCurrentTCB

LDR R1,[R0]

STR LR,[R1]

MEND

參考上述代碼可以根據堆棧“后進先出”的原則寫出portRESTORE_CONTEXT恢復現場部分的代碼,這里不做贅述。

portmacro.h文件中定義了堆棧的增長方向、一些操作系統的數據類型及臨界區管理函數等與編譯器相關的宏定義。

portasm.s文件在移植過程中需要根據不同CPU提供的時鐘和不同的編譯器語法進行修改從而給操作系統提供時鐘滴答、軟中斷等功能。此處,編譯器需修改為ADSv1.2編譯器以識別語法,相關處理要以不同處理器時鐘為準,這里選用S3C44b0x定時器0為系統提供時鐘嘀嗒,需自行實現如下代碼:

T0IR EQU 0x1e00024

T0MATCHBIT EQU (0x1<<13)

vPreemptiveTick;時鐘中斷0

PRESERVE8

portSAVE_CONTEXT

LDR R0,=vTaskIncrementTick

MOV LR,PC

BX R0

LDR R0,=vTaskSwitchContext

MOV LR,PC

BX R0

MOV R0,#T0MATCHBIT

LDR R1,=T0IR

STR R0,[R1]

portRESTORE_CONTEXT

vPortYieldProcessor;軟中斷

PRESERVE8

ADD LR,LR,#4

portSAVE_CONTEXT

LDR R0,=vTaskSwitchContext

MOV LR,PC

BX R0

portRESTORE_CONTEXT

port.c文件中包含為系統任務創建堆棧初始化、啟動任務調度、時鐘中斷和臨界保護的代碼。另外需自行實現的一部分代碼是,為臨界保護提供的開/關CPU中斷函數,這兩個函數是通過對S3C44b0x中CPSR寄存器中斷位寫1或清0,在portasm.s文件中以匯編的形式實現的,具體代碼如下:

EXPORT ARMDisableInt;關中斷

ARMDisableInt

STMFD sp!,{r0}

MRS r0,cpsr

ORR r0,r0,#0xC0

MSR cpsr_c,r0

MOV pc,lr

EXPORT ARMEnableInt;開中斷

ARMEnableInt

LDMFD sp!,{r0}

MRS r0,cpsr

BIC r0,r0,#0xC0

MSR cpsr_c,r0

MOV pc,lr

4 實驗測試

4.1任務調度實驗測試與分析

根據任務的調度算法原理,系統總是運行進入就緒態任務級最高的任務。為此,首先創建一個主任務,優先級為2,在主任務中再創建3個子任務分別是燈閃爍任務Task_LED、RTC系統時鐘顯示任務Task_Rtc_Disp和流水燈任務Task_GroupLed,優先級分別為5、2、2。主代碼如下:

void Task_Main(void*pvParameters)

{

xTaskCreate(Task_LED,(signed portCHAR*)"Task_LED",configMINIMAL_STACK_SIZE,NULL,

skIDLE_PRIORITY+5,NULL)

xTaskCreate(Task_Rtc_Disp,…);

xTaskCreate(Task_GroupLed,…);

for( ; ; )

{

Uart_Printf("執行主任務 ");

vTaskDelay(200);

}

}

系統執行流程如圖5所示。

圖5 系統執行流程

串口打印的任務調度畫面如圖6所示。可以看出,Task_LED任務的優先級最高為5,CPU首先執行Task_LED燈閃爍任務,其他任務優先級相同,以時間片輪換調度執行,輸出結果與任務調度策略分析的任務執行策略吻合。

圖6 串口打印任務調度畫面

4.2任務同步通信測試與分析

以二值信號量為例,進一步說明FreeRTOS操作系統中的任務間進行同步通信的過程。在二值信號量被使用之前首先需要被創建,創建一個二值信號量的代碼如下:

static xSemaphoreHandle xSemaphore=NULL;

vSemaphoreCreateBinary(xSemaphore);

當二值信號量被創建成功后,根據其宏定義會釋放出信號量。由于主任務的優先級最高,因此主任務通過 xSemaphoreTake函數首先獲得信號量,獲得CPU的執行權,最先執行Task_Main任務,代碼如下:

xTaskCreate(Task_Main,(signed portCHAR*)"Task_Main",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+6,NULL);

void Task_Main(void*pvParameters)

{

xTaskCreate(Task_LED,…);

xTaskCreate(Task_Rtc_Disp,…);

xTaskCreate(Task_GroupLed,…);

for( ; ; )

{

if(xSemaphoreTake(xSemaphore,(portTickType)0)==pdTRUE){

Uart_Printf("執行主任務 ");

xSemaphoreGive(xSemaphore);

}

vTaskDelay(400);

}

}

通過PC串口終端打印出來的任務調度執行情況畫面如圖7所示。可以看出,信號量創建完成后發出并由Task_Main任務最先獲取,當執行完Task_Main任務后,主任務調用xSemaphoreGive函數,隨后讓出CPU使用權,之后調用延遲函數vTaskDelay使主任務進入阻塞態。燈閃爍任務通過xSemaphoreTake函數獲得信號量,獲得CPU執行權,并開始執行,依此類推。可以看出,每個任務之間同步執行策略與任務同步執行策略的分析相符。

圖7 任務調度執行情況畫面

5 結束語

通過分析FreeRTOS實時操作系統內核,操作系統完成了從ARM7_LPC2129芯片到ARM7_S3C44b0x芯片、Kiel_RVDS編譯器到ADSv1.2編譯器的移植,并通過任務調度和任務同步通信實驗測試證明,FreeRTOS具有內核小、移植簡單及功能完善等特點,為嵌入式系統的開發與應用提供了一定參考。雖然FreeRTOS在我國仍處于初步應用階段,但憑借其開源、內核小、開發周期短及支持較多處理器架構和多種集成開發環境等優勢,在我國將會成為嵌入式開發者較好的選擇。

[1] 余曉光.基于實時操作系統FreeRTOS的Lwip協議的移植研究[D].昆明:昆明理工大學,2013.

[2] 王錚,靳世久,李健,等.嵌入式實時操作系統C/OS-II在管道泄漏檢測中的應用[J].化工自動化及儀表,2006,33(5):55~57.

[3] 黃義仿,朱曉然,趙榮珍,等.基于小波分析和矩不變量的轉子故障量化特征提取研究[J].化工機械,2007,34(6):309~312.

[4] 李志丹,姜印平,李亞南.基于S3C44B0X和SL811HS的USB主/從機模塊設計[J].化工自動化及儀表,2006,33(4):37~39.

[5] Sakairi T,Palachi E,Cohen C,et al.Model Based Control System Design Using SysML,Simulink,and Computer Algebra System[J].Journal of Control Science and Engineering,2013,2013:1~14.

[6] Bauer A,Leucher M,Schallhart C.Runtime Verification for LTL and TLTL[J].ACM Transactions on Software Engineering and Methodology,2011,20(4):14.

[7] 江杰,趙鳳鳴,陳洪翰,等.Ethernet Powerlink調度機制與實時通信剖析[J].自動化儀表,2013,34(2):84~88.

[8] 孫偉,陳楊,張明偉,等.基于ARM CM3和RTOS的礦用電磁調速電機控制器軟件設計[J].煤礦機械,2014,35(9):236~238.

[9] 甘勤操,陳西曲.基于V4L2的嵌入式視頻監控系統的研究[J].武漢輕工大學學報,2014,33(1):61~64.

[10] 梁艷.基于OpenCV的ARM嵌入式網絡視頻監控系統[J].微型機與應用,2013,32(9):29~31.

[11] 段永顥,陳睿.基于啟發式的靜態中斷數據競爭檢測方法[J].計算機工程與設計,2013,34(1):140~145.

[12] Mu Y M,Wang R,Zhang Z H,et al.Automatic Test Method Research on the Word Part of Document Format Translator[J]. Chinese Journal of Clectronics,2013,22(1):55~60.

ExperimentalResearchonTransplantofFreeRTOS

XIA Xin, ZHANG Guo, WANG Jian-ping, YANG Xiao-hong

(FacultyofInformationEngineeringandAutomation,KunmingUniversityofScienceandTechnology,Kunming650500,China)

The FreeRTOS’ working principle, kernel composition and task management were analyzed, including FreeRTOS’ cross-platform and cross-complier transplant on S3C44b0x platform. The experiment on synchronous communication between fixed priority scheduling and binary semaphore was implemented to verify FreeRTOS transplant’s correctness and experimental design’s reasonability.

FreeRTOS, transplant, S3C44b0x, synchronization communication between tasks, task scheduling

2015-11-13

國家自然科學基金項目(61364008);云南省應用基礎研究重點項目(2014FA029);云南省教育廳重點基金項目(2013Z127)

TH89

A

1000-3932(2016)07-0720-06

猜你喜歡
嵌入式系統管理
棗前期管理再好,后期管不好,前功盡棄
今日農業(2022年15期)2022-09-20 06:56:20
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
“這下管理創新了!等7則
雜文月刊(2016年1期)2016-02-11 10:35:51
人本管理在我國國企中的應用
現代企業(2015年8期)2015-02-28 18:54:47
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 日本午夜影院| 国产精品美女免费视频大全| 国产美女人喷水在线观看| 又粗又大又爽又紧免费视频| 亚洲日韩精品综合在线一区二区| 国产永久在线视频| 69免费在线视频| 一区二区三区四区在线| 国产麻豆另类AV| 日韩色图区| 欧美97欧美综合色伦图| 香蕉eeww99国产精选播放| 91精品久久久无码中文字幕vr| 巨熟乳波霸若妻中文观看免费| 香蕉蕉亚亚洲aav综合| 国产精品无码久久久久久| 98精品全国免费观看视频| 日本高清有码人妻| 国产无遮挡猛进猛出免费软件| 国产大片黄在线观看| 免费毛片a| 亚洲中久无码永久在线观看软件| 人妻91无码色偷偷色噜噜噜| 无码国产伊人| 免费可以看的无遮挡av无码| 欧美精品综合视频一区二区| 国产av无码日韩av无码网站 | 日韩欧美国产成人| 亚洲精品777| 欧美在线中文字幕| 亚洲VA中文字幕| a级毛片免费播放| 欧美日韩国产综合视频在线观看| 国产精品999在线| 欧美一区二区三区不卡免费| 国产无码网站在线观看| 亚洲人人视频| 国产91小视频| 国产欧美精品专区一区二区| 精品夜恋影院亚洲欧洲| 国产对白刺激真实精品91| 欧洲高清无码在线| 国产亚洲精品自在线| 91po国产在线精品免费观看| 欧美日本中文| 久久永久视频| 国产精品yjizz视频网一二区| 中国国产高清免费AV片| 欧美成人怡春院在线激情| 妇女自拍偷自拍亚洲精品| 久久亚洲中文字幕精品一区| 丰满人妻一区二区三区视频| 无码 在线 在线| 乱系列中文字幕在线视频| 热99精品视频| 亚洲,国产,日韩,综合一区| 在线日韩一区二区| 永久免费无码日韩视频| 国产区免费| 欧美伦理一区| 亚洲成人播放| 欧美日在线观看| 美女毛片在线| 无码高清专区| 国模私拍一区二区| 亚洲国产日韩在线成人蜜芽| 国产成人精品第一区二区| 国产精品网曝门免费视频| 伊人久久婷婷| 成人午夜天| 精品国产免费观看| 囯产av无码片毛片一级| aa级毛片毛片免费观看久| 国产18页| 波多野结衣在线se| 中文字幕色在线| www.亚洲国产| 香蕉久久国产超碰青草| 狠狠色婷婷丁香综合久久韩国| 亚洲伊人久久精品影院| 亚洲AⅤ综合在线欧美一区| 国产在线八区|