0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于微處理器LPC2210實現(xiàn)μC/OS-Ⅱ關(guān)鍵算法的改進設(shè)計

電子設(shè)計 ? 來源:微計算機信息 ? 作者:孟開元,侯貴雙,曹 ? 2020-09-14 17:59 ? 次閱讀

1 引言

當前,嵌入式開發(fā)領(lǐng)域?qū)?a target="_blank">產(chǎn)品的要求越來越多.如通信速率,穩(wěn)定性,產(chǎn)品功能,可擴展性,可移植性,適應(yīng)性等。為了適應(yīng)這些要求,作者對低版本的μC/OS-II做了一些改進。并選擇一款性價比高的微處理器LPC2210作為其運行的硬件平臺。本文論述的高級繼電器保護裝置除可以動態(tài)地實現(xiàn)模擬量和開關(guān)量的數(shù)據(jù)采集外,還可以作為web終端通過遠程主機對終端進行控制或訪問。

2 μC/OS-II其內(nèi)核結(jié)構(gòu)

宏觀的講,μC/OS-Ⅱ大致分成內(nèi)核結(jié)構(gòu)、任務(wù)管理、時間管理、任務(wù)之間的通信與同步和CPU的移植等5個部分。由于嵌入式多任務(wù)應(yīng)用功能軟件系統(tǒng)是應(yīng)用設(shè)計的范疇,所以并不包含在內(nèi)核中。內(nèi)核保留給上層應(yīng)用的接口有3個,分別是軟保護、任務(wù)間的通信ITC、和設(shè)備服務(wù)DSR。一個μC/OS-II內(nèi)核現(xiàn)狀的結(jié)構(gòu)圖如圖1所示。

基于微處理器LPC2210實現(xiàn)μC/OS-Ⅱ關(guān)鍵算法的改進設(shè)計

圖1 μC/OS-Ⅱ內(nèi)核現(xiàn)狀結(jié)構(gòu)簡圖

3 μC/OS-Ⅱ關(guān)鍵算法邏輯

μC/OS-II采用的是可剝奪型內(nèi)核,它總是執(zhí)行就緒條件下優(yōu)先級最高的任務(wù)。系統(tǒng)通過兩種方法進行任務(wù)調(diào)度:一是時鐘節(jié)拍或其它硬件中斷到來后,系統(tǒng)會調(diào)用函數(shù)執(zhí)行切換任務(wù)功能;二是任務(wù)主動進入掛起態(tài)或等待態(tài),這時系統(tǒng)通過發(fā)軟中斷命令或依靠處理器執(zhí)行陷阱指令來完成任務(wù)切換,中斷服務(wù)程序或陷阱處理程序的向量地址必須指向函數(shù)OSCtxSw()。任務(wù)的優(yōu)先級唯一地標識了任務(wù),即使兩個任務(wù)的重要性是相同的,任務(wù)間也必須有優(yōu)先級上的差異,這就意味著高優(yōu)先級的任務(wù)被處理完成之后,必須進入等待態(tài)或者掛起態(tài),否則低優(yōu)先級的任務(wù)永遠也不可能執(zhí)行,從而嚴重暴露出μC/OS-Ⅱ的缺點,甚至造成系統(tǒng)癱瘓。在產(chǎn)品的開發(fā)中也不難發(fā)現(xiàn)其內(nèi)核算法存在的一些問題,如內(nèi)核具體代碼方面的、體系結(jié)構(gòu)方面的、以及移植作者方面的問題,其中最顯著的就是硬實時性和設(shè)備驅(qū)動框架問題。

3.1硬保護算法的改進

在μC/OS-II操作系統(tǒng)中,臨界區(qū)、硬保護和軟保護是幾個緊密聯(lián)系的概念,而硬保護算法又與開關(guān)中斷、堆棧和局部變量相聯(lián)系。從保護的角度考慮,系統(tǒng)的代碼可以劃分為三種運行環(huán)境,即任務(wù)環(huán)境、中斷環(huán)境和設(shè)備環(huán)境。當代碼運行于這三種環(huán)境中時,需要的保護有很大的區(qū)別。下面將對臨界區(qū)及其保護措施中的部分概念作出定義。

定義1:和中斷環(huán)境相關(guān)的系統(tǒng)保護稱為硬保護(HP,Hard Protect)。

定義2:和設(shè)備環(huán)境相關(guān)的系統(tǒng)保護稱為設(shè)備保護(DP , Device Protect)。

定義3:純粹任務(wù)之間的保護稱為軟保護(SP,Soft Protect)。

區(qū)別使用不同的保護機制對提高系統(tǒng)的中斷能力和穩(wěn)定性是非常重要的。當系統(tǒng)中大部分功能是與硬件設(shè)備進行數(shù)據(jù)交流時應(yīng)盡量用軟保護SP和設(shè)備保護DP代替硬保護HP,也是提高系統(tǒng)實時反應(yīng)能力的重要手段。硬保護的方法有三種,在三種硬保護算法的實現(xiàn)方法中。第一種方法只是單純的開關(guān)中斷,因此最簡單;但在嵌套調(diào)用時通常會出現(xiàn)內(nèi)層的開中斷代碼干擾外層保護的邏輯。第二種方法借助堆棧功能很好地解決了第一種方法的嵌套問題,但堆棧指針無法確定。第三種方法是在每個硬保護代碼的函數(shù)中定義一個局部變量,進入保護前保存狀態(tài),退出保護時恢復(fù)狀態(tài)。當OS_CRITICAL_METHOD==3時,實現(xiàn)代碼如下:

Void functionx()

{

#if OS_CRITICAL_METHOD==3

OS_CPU_SR cpu_sr;

#endif

??

OS_ENTER_CRITICAL();

?? //需要硬保護的臨界區(qū)代碼

OS_EXIT_CRITICAL();

}

3.2調(diào)度器算法的改進

眾所周知,μC/OS-II在設(shè)計時強調(diào)實時性。它采用單一的基于優(yōu)先級的搶先式調(diào)度算法,有效地保證了實時性的要求。其另外一個特點是任務(wù)切換帶來的時延窗口很小。在任務(wù)的邏輯狀態(tài)中,只有就緒態(tài)中優(yōu)先級最高的任務(wù)才可以被真正運行。μC/OS-II任務(wù)級的調(diào)度器是通過函數(shù)OSSched()實現(xiàn)的,0ssched()基本上分布在μC/OS-II的各種ITC功能塊中。調(diào)度器函數(shù)的偽代碼如下:

{

(1)如果鎖定任務(wù)切換(配合軟保護),則直接退出。

(2)計算當前優(yōu)先級任務(wù)。

(3)如果當前任務(wù)就是最高優(yōu)先級任務(wù),則直接退出。

(4)將最高優(yōu)先級任務(wù)編號(OSPrioHighRdy)賦給當前任務(wù)編號(OSPrioCur)。

(5)讀出最高優(yōu)先級任務(wù)的控制塊數(shù)據(jù)指針到OSTCBHighRdy指針。

(6)保存當前任務(wù)的環(huán)境。保存當前任務(wù)的sP到OS_TCB結(jié)構(gòu)中的堆棧指針。

(7)讀出最高優(yōu)先級任務(wù)OSTCBHighRdy及其中的SP,設(shè)置堆棧,恢復(fù)所改任務(wù)的環(huán)境,并讀出堆棧中保存的PC(程序計數(shù)器,任務(wù)當前代碼位置)設(shè)置好處理器的PC器存器,任務(wù)即可開始執(zhí)行。

}

在任務(wù)數(shù)據(jù)結(jié)構(gòu)0S_TCB描述中只能見到等待、休眠和就緒三個標記值。每個任務(wù)具有一個任務(wù)控制塊OS_TCB,任務(wù)控制塊負責記錄任務(wù)執(zhí)行的環(huán)境,包括任務(wù)的優(yōu)先級、堆棧指針和相關(guān)事件控制塊指針等。內(nèi)核將系統(tǒng)中處于就緒態(tài)的任務(wù)在就緒表中進行標注,通過就緒表中的兩個變量OSRdyGrp和OSRdyTbl[]可快速查找系統(tǒng)中就緒的任務(wù)。讓任務(wù)進入等待、就緒等狀態(tài)等標記任務(wù)狀態(tài)描述值的功能是分散在其它模塊中完成的,在此需要修OS_TCB中的OSTCBStat字段。如用ITC中的信號量把任務(wù)設(shè)置到等待態(tài)或者把相關(guān)任務(wù)設(shè)置為就緒態(tài)等。

為了提高μC/OS-II適應(yīng)性,在保證其實時性的前提下,對μC/OS-II的任務(wù)狀態(tài)圖的等待或掛起態(tài)分離為阻塞和等待態(tài),以便實現(xiàn)優(yōu)先級與時間片結(jié)合式調(diào)度。從而可以從體系結(jié)構(gòu)上避免μC/OS-II存在的不足。如缺乏時間片調(diào)度、低優(yōu)先級的任務(wù)很難得到執(zhí)行、不支持同優(yōu)先級任務(wù)的調(diào)度、優(yōu)先級反轉(zhuǎn)等問題。改進的任務(wù)狀態(tài)轉(zhuǎn)換圖2。

圖2改進的任務(wù)狀態(tài)轉(zhuǎn)換圖

3.3任務(wù)就緒算法的改進

改進的μC/OS-II可以管理多達255個任務(wù)甚至更多,并且提供功能齊全的實時操作服務(wù)。實際上,就緒任務(wù)表是一個位矩陣。OSRdyTb1矩陣中位的值為0或1,表示對應(yīng)的prio任務(wù)是否就緒。prio的數(shù)據(jù)位分為兩部分,Y表示縱坐標,x表示橫坐標,和矩陣中的一位對應(yīng)。OSRdyGrp是縱坐標上就緒任務(wù)組的紀錄,只要該組中任何一位代表的任務(wù)就緒(非零),Os_RdyGrp縱坐標的對應(yīng)位就標記為就緒。任務(wù)就緒算法和查詢就緒算法如下:

(1)任務(wù)就緒算法:根據(jù)任務(wù)優(yōu)先級數(shù)使任務(wù)進入就緒狀態(tài)

OSRdyGrp 1=OSMapTbl[prio》》3]; //用Y映射出縱坐標位

OSRdyTb1[prio》》3] 1=OSMapTb1[prio&0x07]; //用X映射出橫坐標位

(2)查詢就緒算法:通過此算法。μC/OS-II可以找出進入就緒態(tài)的優(yōu)先級最高的任務(wù)。

y = OSUnMapTbl[OSRdyGrp]; //直接對應(yīng)出縱坐標

x = OSUnMapTbl[OSRdyTbl[y]]; //直接對應(yīng)出橫坐標

prio=(y《《3)+x; //算出優(yōu)先級

由于老版本的μC/OS-II最多只能管理64個任務(wù).分別對應(yīng)優(yōu)先級0~63,其中0為最高優(yōu)先級,63為最低級,系統(tǒng)保留了4個最高優(yōu)先級的任務(wù)和4個最低優(yōu)先級的任務(wù).實際上用戶可以使用的任務(wù)數(shù)僅有56個。就緒任務(wù)表其實是一個8x8的位矩陣,而且這個矩陣可以簡化為橫縱兩個數(shù)組,同時保持了常數(shù)運算。對于要求用μC/OS-II管理更多任務(wù)的情況,如要管理255個任務(wù),該算法仍然具有意義。改進前和改進后的任務(wù)就緒表如圖3。

圖3改進前和改進后的任務(wù)就緒表

此時。最低優(yōu)先級OS_LOWEST_PRIO的定義值可以大于63,但不能大于254。當μC/OS-II初始化的時候。最低優(yōu)先級OS_LOWEST_PRIO總是被賦給空閑任務(wù)idle task。就緒表(readv list)和事件等待表(event wait lists)由一個16x16的矩陣代替。從理論上講.這也是最低優(yōu)先級OS_LOWEST_PRIO的定義值不能大于254的原因。

3.4軟保護算法

純粹任務(wù)之間的保護稱為軟保護(SP,Soft Protect)。在μC/OS-II中,軟保護包括OSSchedLock和OSSchedUnLock兩個函數(shù),用于保護純?nèi)蝿?wù)間全局變量的訪問?;舅悸肥墙柚脖Wo遞增(解鎖時遞減)標記變量OSLockNesting,并在任務(wù)調(diào)度器中判斷此標記變量,以此鎖住任務(wù)調(diào)度器。

4 改進的μC/OS-II在LPC2210上的移植

移植μC/OS-II到LPC2210上,需編寫與處理器相關(guān)的幾個文件:OS_CPU.H、OS_CPU_A.S、OS_CPU_C.C。除了編寫這三個文件之外,還必須編寫目標板的初始化啟動代碼,這是運行任何其它軟件的基礎(chǔ)。μC/OS-II要求所有*.c文件都要包含頭文件includes.h,這樣使得用戶項目中的每個*.c文件不用考慮它實際上需要那些頭文件。使用includes.h的缺點是可能會包含一些不相關(guān)的頭文件,也可能會增加每個文件的編澤時間,但卻增強了代碼的可移植性。本移植不使用軟中斷SWI做底層接口,在OS_CPU.H中定義#define OS_CRITICAL_METHOD 3,即采用第三種方式實現(xiàn)開/關(guān)中斷。具體用法已在前面作了介紹。

5 結(jié)束語

本文針對μC/OS-II的關(guān)鍵算法在分析的基礎(chǔ)上進行了改進,并將其應(yīng)用到了基于ARM7的RISC微處理器LPC2210上。通過實際的調(diào)試和在高級繼電器保護裝置中的應(yīng)用,表明改進方案是可行的。在不損害實時性的前提下,增強了μC/OS-Ⅱ?qū)π枨蟮倪m應(yīng)性、執(zhí)行效率和對任務(wù)的管理能力。

本文創(chuàng)新點:(1)通過對μC/OS-Ⅱ的體系結(jié)構(gòu)和關(guān)鍵算法的分析,指出了其在應(yīng)用中存在的不足和改進的方法。(2)增強了μC/OS-II對需求的適應(yīng)性、執(zhí)行效率和對任務(wù)的管理能力。(3)對EasyARM2200開發(fā)板提供的例程做了改進并將其移植到了自己的開發(fā)板上,為應(yīng)用功能的擴展打下了基礎(chǔ)。

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5052

    文章

    18912

    瀏覽量

    300806
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10772

    瀏覽量

    210445
  • 微處理器
    +關(guān)注

    關(guān)注

    11

    文章

    2231

    瀏覽量

    82206
收藏 人收藏

    評論

    相關(guān)推薦

    基于LPC2210嵌入式微處理器實現(xiàn)智能安防系統(tǒng)的設(shè)計

    價格適中且工作穩(wěn)定的智能安防系統(tǒng)來最大限度的減小損失。本文主要針對前述現(xiàn)象設(shè)計基于ARM技術(shù)的智能安防系統(tǒng),該系統(tǒng)主要采用ARM系列芯片中的LPC2210嵌入式微處理器.選用可同時處理多任務(wù)的ucos-Ⅱ操作系統(tǒng)。
    的頭像 發(fā)表于 10-26 10:39 ?5715次閱讀
    基于<b class='flag-5'>LPC2210</b>嵌入式<b class='flag-5'>微處理器</b><b class='flag-5'>實現(xiàn)</b>智能安防系統(tǒng)的設(shè)計

    μCOS-II操作系統(tǒng)在各種處理器上的移植

    的工作就是操作系統(tǒng)的移植。本文選取使用較多的51單片機、LPC2210、NiosII三種處理器進行介紹。 1 μC/OS-II操作系統(tǒng)移植條件μC
    發(fā)表于 08-14 09:46

    ARM處理器LPC2210在腦血氧監(jiān)測儀中的應(yīng)用

    。模塊的工作電壓是5V,而LPC2210的I/O電壓為3.3V,所以在總線上串接470的保護電阻。讓圖形液晶模塊的C/D與A1連接,使用A1控制模塊處理數(shù)據(jù)命令,并且可以利用LPC2210
    發(fā)表于 12-04 10:38

    1632位微控制LPC2210相關(guān)資料下載

    1632位微控制LPC2210資料下載內(nèi)容主要介紹了:LPC2210功能和特性LPC2210引腳功能LPC2210內(nèi)部方框圖
    發(fā)表于 03-29 06:04

    如何去改進μC/OS-II的關(guān)鍵算法?

    μC/OS-關(guān)鍵算法邏輯如何去改進μC/OS-II
    發(fā)表于 04-27 06:37

    實時操作系統(tǒng)μC/OS-II 在LPC2210 上的移植研究

    嵌入式實時操作系統(tǒng)在目標處理器平臺上的移植是嵌入式軟件開發(fā)的基礎(chǔ)和前提。論文實現(xiàn)了源碼公開的嵌入式實時操作系統(tǒng)μC/OS-II 在ARM7 微控制
    發(fā)表于 06-03 09:48 ?20次下載

    實時操作系統(tǒng)μC/OS-II在LPC2210上的移植

    介紹了PHILIPS LPC2210 微控制的特點,以及如何將源代碼開放的μC/OS-II 移植到此微控制,重點介紹了如何通
    發(fā)表于 06-16 08:59 ?26次下載

    μC/OS-II 在LPC2210上的移植實現(xiàn)

    對嵌入式實時操作系統(tǒng)μC/OS-II 的組成和LPC2210 微處理器進行了簡單介紹。在此基礎(chǔ)上,詳細介紹了將μC/
    發(fā)表于 07-08 08:57 ?41次下載

    基于LPC2210的遠程Modem管理系統(tǒng)

    摘要:隨著電子技術(shù)的發(fā)展 ,ARM系列微處理器得到越來越廣泛的應(yīng)用。介紹了一種基于 LPC2210的嵌入式 Modem,詳細地闡述了 Modem的硬件及嵌入式操作系統(tǒng)移植方案,實  現(xiàn) Mod
    發(fā)表于 09-09 16:14 ?24次下載

    lpc2210開發(fā)板電路圖

    lpc2210開發(fā)板電路圖
    發(fā)表于 09-14 11:07 ?142次下載
    <b class='flag-5'>lpc2210</b>開發(fā)板電路圖

    移植µC/OS-Ⅱ教程

    這一章介紹如何將µC/OS-Ⅱ移植到不同的處理器上。所謂移植,就是使一個實時內(nèi)核能在某個微處理器或微控制上運行。為了方便移植,
    發(fā)表于 09-29 10:08 ?31次下載

    uCOSII在LPC2210上的移植詳解

    uCOSII在LPC2210上的移植詳解:嵌入式實時操作系統(tǒng)在目標處理器平臺上的移植是嵌入式軟件開發(fā)的基礎(chǔ)和前提。論文實現(xiàn)了源碼公開的嵌入式實時操作系統(tǒng)μC/
    發(fā)表于 12-31 15:11 ?144次下載

    改進的μCOS-Ⅱ關(guān)鍵算法在ARM7上的應(yīng)用

    本文在討論了實時操作系統(tǒng)μC/OS-Ⅱ的部分關(guān)鍵算法邏輯的基礎(chǔ)上,針對遠程視頻監(jiān)控系統(tǒng)及高級繼電器保護裝置的特點和要求對μC/
    發(fā)表于 01-13 16:15 ?12次下載

    ARM處理器LPC2210在腦血氧監(jiān)測儀中的應(yīng)用

    ARM處理器LPC2210在腦血氧監(jiān)測儀中的應(yīng)用 氧是人體新陳代謝的重要物質(zhì),腦組織新陳代謝率高,耗氧量占全身總量的20%左右。在心腦血管疾病及腦外傷
    發(fā)表于 10-17 10:25 ?1577次閱讀
    ARM<b class='flag-5'>處理器</b><b class='flag-5'>LPC2210</b>在腦血氧監(jiān)測儀中的應(yīng)用

    LPC2210應(yīng)用到遠程視頻監(jiān)控系統(tǒng)的設(shè)計

    本文為LPC2210應(yīng)用到遠程視頻 監(jiān)控系統(tǒng) 的設(shè)計,給出了軟件設(shè)計結(jié)構(gòu)。
    發(fā)表于 06-29 15:47 ?39次下載
    <b class='flag-5'>LPC2210</b>應(yīng)用到遠程視頻監(jiān)控系統(tǒng)的設(shè)計