當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]本文從嵌入式系統(tǒng)的并行程序出發(fā),結(jié)合實時性的要求,討論了μC/OS-II操作系統(tǒng)環(huán)境下的任務(wù)劃分和優(yōu)先級確定的相關(guān)問題,提出了一些在μC/OS-II中用于減少資源耗用和同

本文從嵌入式系統(tǒng)的并行程序出發(fā),結(jié)合實時性的要求,討論了μC/OS-II操作系統(tǒng)環(huán)境下的任務(wù)劃分和優(yōu)先級確定的相關(guān)問題,提出了一些在μC/OS-II中用于減少資源耗用和同時運行的任務(wù)數(shù)量的改進措施。實踐證明,這些措施可以充分發(fā)揮μC/OS-II小巧精悍的特點,提高程序代碼的重用性,節(jié)約寶貴的RAM資源。

從產(chǎn)品研發(fā)的角度,針對小資源系統(tǒng)中使用μC/OS-II的實時性和優(yōu)先級關(guān)系進行了分析。

提出了可刪除任務(wù)的靈活應(yīng)用和可變大小任務(wù)棧的實現(xiàn)方法,對于并行任務(wù)使用共享資源的幾種情況給出了實用解決方案。這些措施獲得了良好的任務(wù)并行性和實時響應(yīng),節(jié)約了代碼存儲空間。

引言

μC/OS-II作為一種輕量級的嵌入式實時操作系統(tǒng),正隨著嵌入式微處理器性能的不斷提高和外圍資源(主要是存儲器資源)的不斷增加,得到越來越多的應(yīng)用。例如,原來的51系列單片機,限于6~12 MHz的主頻、12個Clock的機器周期以及有限的存儲器資源,使用μC/OS-II會大大加重系統(tǒng)負擔,使應(yīng)用程序的運行受到影響,特別在快速A/D轉(zhuǎn)換等實時性較強的場合,無法得到及時的響應(yīng),于是才有了更輕量級的Small RTOS等操作系統(tǒng)的出現(xiàn)。

但目前更強勁的51內(nèi)核版本微處理器的大量出現(xiàn),從根本上改變了這種情況。40 MHz以上的主頻,單周期指令的微處理器,加上64 KB的程序空間和8 KB以上的數(shù)據(jù)空間,這樣的系統(tǒng)已經(jīng)可以流暢地運行μC/OS-II[1]。μC/OS-II的移植版本很多,選擇一個適合系統(tǒng)CPU的版本,然后進行正確的配置和優(yōu)化是非常重要的。

1 系統(tǒng)實時性分析

本系統(tǒng)工作原理是在恒定溫度條件下,任意啟動4個測試通道來進行多個項目的并行分析,每個測試通道的工作流程完全相同,如圖1所示。

C8051F120集成了8路12位高速A/D轉(zhuǎn)換器(ADC0)和8路8位高速A/D轉(zhuǎn)換器(ADC2)。系統(tǒng)要求對4個光學傳感器輸出進行采樣,ADC0可以構(gòu)成4個差分測試通道以滿足需求。系統(tǒng)還要求能對2路溫度實現(xiàn)實時控制,用于監(jiān)控2個外部溫度傳感器的輸出電壓: 一個保證測試部分的溫度恒定在37±0.2 ℃,通過對加熱組件的PWM控制來完成;另一個用于監(jiān)測機箱溫度,在32 ℃以上時啟動風扇散熱,30 ℃以下關(guān)閉風扇。

圖1 通道工作流程

從圖1中可以看出,完整的流程包括信息輸入、樣本預(yù)溫、通道啟動、試劑添加、微分測量、結(jié)果處理6個階段。其中前4個屬于操作階段,操作者通過每個通道的進度條、轉(zhuǎn)動條和狀態(tài)標志塊,在LCD界面上獲得明確的操作指示,確保每個通道的正確操作。

要求在通道啟動后,能精確地每隔0.1 s完成一次采樣并處理數(shù)據(jù),所以每個通道的最長處理時間不能超過25 ms,且軟件微分法需要較高的A/D轉(zhuǎn)換精度和穩(wěn)定性。C8051F120中的A/D最高采樣速率可達100 ksps,約10 μs/次,因此可采用過采樣后的高平滑,同時提高精度和穩(wěn)定性。簡單地計算,如果每個通道采樣1 024次后平均計算,則4個通道的A/D總速率為:ADMAX=1 024×4×10=40 ksps。

理論上來說,即使把采樣次數(shù)再加倍,仍然略小于100 ksps,但考慮到每次A/D中斷后,中斷服務(wù)程序都要簡單地處理采樣數(shù)據(jù),然后才能啟動下一次A/D轉(zhuǎn)換,所以實際轉(zhuǎn)換速度是不能達到100 ksps的。通過調(diào)試,合理的選擇為每個采樣點取1 024次平滑濾波。實際處理中,把A/D轉(zhuǎn)換精度從12位擴展到了16位,以滿足0~2 000 mV范圍內(nèi)0.1 mV的精度和穩(wěn)定性,這可以簡單地通過改變求均值時的右移次數(shù)和擴大滿量程基數(shù)來完成[2]。

除了實時性的要求必須得到嚴格滿足外,有很多因素需要一并考慮。例如每個通道測試過程中的圖形動態(tài)顯示,通道測試過程中的鍵值交叉處理,獨立于測試之外的實時溫度控制,耗時較多的測試結(jié)果傳送和打印等,這些人為操作和功能處理均不能中斷,或影響正在測試的通道每0.1 s一次的數(shù)據(jù)采樣。另外,還必須提供一項強制結(jié)束功能:在任何測試階段按Exit鍵,確認后可退出所有測試。

總體上看,系統(tǒng)在各個通道共用1個鍵盤、1個串口、1個打印機、1個LCD顯示器、1個A/D轉(zhuǎn)換器的條件下,能進行獨立控制,互不干擾地進行各自的測試、計算、顯示、傳送和輸出,滿足實時性和并行性要求。

2 內(nèi)存分配

μC/OS-II最多有64個任務(wù)優(yōu)先級,根據(jù)版本的不同可供用戶使用的優(yōu)先級有56~62個。每個任務(wù)優(yōu)先級不能相同,最大優(yōu)先級數(shù)即用戶的最大任務(wù)數(shù)[1]。

每個任務(wù)必須有自己的任務(wù)棧,任務(wù)棧由系統(tǒng)物理??截悈^(qū)和模擬棧兩部分組成,是μC/OS-II移植的核心內(nèi)容[3-4],因此任務(wù)的多少直接影響數(shù)據(jù)RAM的需求。在本系統(tǒng)中,物理??截悈^(qū)為64字節(jié),模擬??梢园才?6~64字節(jié),這種可變大小任務(wù)棧稍后分析。

C8051F120微處理器帶有8 KB的RAM,系統(tǒng)沒有擴展外部數(shù)據(jù)存儲器。首先分析一下系統(tǒng)數(shù)據(jù)內(nèi)存的需求情況:

① 系統(tǒng)顯示部分使用了240×128點陣的LCD模塊和圖形GUI,如果建立完整的顯示緩沖區(qū),需要240/8×128=3 840字節(jié),約4 KB的RAM空間;

② Flash除了用作程序存儲器外,剩下的部分作為非易失性數(shù)據(jù)存儲器。每個Flash塊為1 KB,故需要1 KB的RAM作為Flash的讀寫緩沖區(qū);

③ GUI自身約占去了1 KB內(nèi)存;

④ 傳感器響應(yīng)曲線需打印,其點坐標數(shù)據(jù)(對應(yīng)打印機384個點行)約占1 KB。

以上共占用7 KB,最終僅剩下1 KB的RAM留給操作系統(tǒng)以及用戶函數(shù),這顯然不夠??赏ㄟ^優(yōu)化GUI的驅(qū)動,去掉LCD的顯示緩沖區(qū),增加4 KB的RAM,以滿足系統(tǒng)需要。

3 可變?nèi)蝿?wù)棧和任務(wù)劃分

3.1 可變大小任務(wù)棧

一般來說,一個嵌入式系統(tǒng)中不會建立60個以上的任務(wù)。從簡單的角度考慮,應(yīng)用μC/OS-II時,建立的所有任務(wù)均駐留不刪除,使用足夠大并且同樣大小的堆棧。這種處理任務(wù)的方法會對內(nèi)存數(shù)量提出較高要求。例如50個任務(wù),每個任務(wù)棧均為128字節(jié),則需要6 KB的RAM。

本著這樣一個原則來改進任務(wù)劃分:不需要駐留的任務(wù)運行完畢即刪除,可以自身刪除,也可以在別的任務(wù)里刪除。這種任務(wù)處理不僅可以重用任務(wù)優(yōu)先級,還可以重用任務(wù)堆棧,并且減少同時運行的任務(wù)數(shù)量。[!--empirenews.page--]

刪除任務(wù)的辦法不僅可獲得共享的任務(wù)棧資源,而且也是一個方便中止某些應(yīng)用程序的手段,前面提及的任何測試階段按Exit鍵退出所有測試的動作,就可以依靠刪除任務(wù)來實現(xiàn)。

把任務(wù)看作有大小的,這里的“大小”指需要“重入”到任務(wù)堆棧的變量的數(shù)量。如果每一個任務(wù)都使用相同大小的任務(wù)棧,對小任務(wù)而言顯然是在浪費寶貴的RAM,大小可變的任務(wù)棧才是經(jīng)濟合理的。

首先,在os_cfg.h頭文件中增加大、小兩個宏參數(shù),如果需要更多不同的棧大小,還可以繼續(xù)增加參數(shù)。

#define MaxSTkSize128//大任務(wù)棧

#define MinStkSize80//小任務(wù)棧

然后定義任務(wù)棧時使用它們:

OS_STK TaskDelStk1[MinStkSize];

OS_STK TaskDelStk2[MaxStkSize];

TaskDelStk1和TaskDelStk2是兩個可刪除任務(wù)所使用的任務(wù)棧,一個80字節(jié),另一個128字節(jié)。

接下來是關(guān)鍵,要在任務(wù)堆棧初始化函數(shù)OSTaskStkInit中進行處理:定義一個全局整型變量STK_SIZE,創(chuàng)建任務(wù)前給它賦值,任務(wù)創(chuàng)建時執(zhí)行的OSTaskStkInit函數(shù)用它來初始化模擬棧的長度。

修改前,OSTaskStkInit中的?C_XBP仿真堆棧指針(即模擬棧指針)的初始化語句如下:

*stk++ = (INT16U) (ptos + MaxStkSize) >> 8;//MaxStkSize是固定的棧長度

*stk++ = (INT16U) (ptos + MaxStkSize) & 0xFF;

注意:ptos是任務(wù)棧棧底,模擬棧從任務(wù)堆棧的另一頭開始。

修改后變?yōu)椋?/p>

*stk++ = (INT16U) (ptos + STK_SIZE) >> 8;//指針高8位

*stk++ = (INT16U) (ptos + STK_SIZE) & 0xFF;//指針低8位

創(chuàng)建任務(wù)前要給STK_SIZE賦予堆棧定義匹配的棧長度值,否則,會因為堆棧不能正確初始化導致任務(wù)崩潰。不同大小的任務(wù)棧結(jié)構(gòu)如圖2所示,可以看出區(qū)別在于模擬棧不同。

圖2 可變大小任務(wù)棧結(jié)構(gòu)

利用可變大小任務(wù)棧創(chuàng)建一個小堆棧任務(wù),示例如下:

STK_SIZE=MinStkSize;//提供堆棧大小值

/*創(chuàng)建帶TimeLimit參數(shù)的,分配有任務(wù)棧TaskDelStk1,優(yōu)先級為10的任務(wù)OverTime*/

OSTaskCreate(OverTime,(void*)&TimeLimit, &TaskDelStk1[0],10);

3.2 系統(tǒng)任務(wù)劃分

用戶任務(wù)分為兩類: 一類任務(wù)是常駐任務(wù),即創(chuàng)建后不用刪除的任務(wù);另一類是可刪除任務(wù),運行時建立,運行完刪除,該任務(wù)資源又可用來創(chuàng)建新的任務(wù)。

4 任務(wù)優(yōu)先級分配

優(yōu)先級的合理分配圍繞實時性要求進行,因為可用優(yōu)先級較多,所以任務(wù)優(yōu)先級之間可取較大間隔。這樣當有更多的任務(wù)加入時,能安排在這些間隔中,不用改變已有任務(wù)的優(yōu)先級。本系統(tǒng)中優(yōu)先級關(guān)系可以按由高到低順序依次排列: 鍵盤掃描任務(wù),超時檢測任務(wù), A/D掃描轉(zhuǎn)換任務(wù),主任務(wù),各通道測試任務(wù),數(shù)據(jù)打印和傳送任務(wù),溫度檢測任務(wù),日期時間顯示任務(wù),如圖3所示。

圖3 任務(wù)關(guān)系示意圖

常駐任務(wù)一般是固定優(yōu)先級,而可刪除任務(wù)每一次創(chuàng)建時卻能夠?qū)?yīng)不同的任務(wù)函數(shù)和優(yōu)先級,且使用同一個任務(wù)棧。

一個任務(wù)函數(shù)可用于多個任務(wù),這種“重用”的特性在獲得任務(wù)并行性的同時,最大限度地節(jié)約了代碼。本系統(tǒng)只有一個測試函數(shù),卻構(gòu)成了4個并行的通道任務(wù)。這些任務(wù)都是進入測試菜單后隨著各自通道鍵被按下后在主任務(wù)中創(chuàng)建的,復(fù)用的4個測試函數(shù)接受任務(wù)創(chuàng)建時主任務(wù)傳遞過來的參數(shù),為本通道的計算、顯示、數(shù)據(jù)存儲等一系列工作服務(wù)。

5 資源共享的處理

ADC0、LCD、打印機和串口等資源被4個測試任務(wù)所共享。資源共享有一些經(jīng)典的方法(如信號量、全局變量等),需要根據(jù)實際需求靈活運用。

本系統(tǒng)的處理如下:

① 對于ADC0,在A/D掃描轉(zhuǎn)換任務(wù)中每0.1 s輪流掃描4個通道一次,產(chǎn)生4個郵箱消息發(fā)往各自通道任務(wù),以讀取對應(yīng)的轉(zhuǎn)換結(jié)果。0.1 s的精確定時由定時器中斷獲得,中斷服務(wù)發(fā)出信號量啟動AD任務(wù)。一次掃描完成后A/D掃描轉(zhuǎn)換任務(wù)掛起,直至下一次信號量到來。

② 對于LCD,情況要復(fù)雜一些,每個測試任務(wù)都要在LCD的各自區(qū)域顯示,但是LCD不能實現(xiàn)2個以上位置同時進行顯示處理,所以當涉及顯示過程時需要禁止任務(wù)切換,否則會造成顯示混亂。例如,當一個低優(yōu)先級任務(wù)的顯示工作還沒有完成時,若發(fā)生了任務(wù)切換,則高優(yōu)先級任務(wù)去進行另一個顯示。當重新切換回低優(yōu)先級任務(wù)后就沒有辦法繼續(xù)未完的顯示,因為顯示位置已經(jīng)被高優(yōu)先級任務(wù)所改變。

③ 對于打印機和串口,也有類似的問題,不允許一個結(jié)果尚未打印完成又去打印另一個結(jié)果。禁止任務(wù)切換的辦法不適合這里,因為打印和傳送耗時比LCD顯示長很多,禁止任務(wù)切換會影響到測試的實時性,它們單獨建立后臺任務(wù)的原因也在于此。

數(shù)據(jù)打印和傳送任務(wù)循環(huán)掃描各個通道的請求服務(wù)標志,當標志有效時即為該通道服務(wù),服務(wù)完畢清除該標志,因數(shù)據(jù)打印和傳送任務(wù)的優(yōu)先級較低而不會對其他測試任務(wù)造成任何影響。被服務(wù)的通道測試任務(wù)循環(huán)檢測請求服務(wù)標志,檢測到標志被清除后才可以繼續(xù)下次測試,表示此次數(shù)據(jù)已經(jīng)輸出。其他高優(yōu)先級測試任務(wù)不會影響打印過程,因為先檢測到標志的通道獨占資源,直至傳送和打印完成后,打印任務(wù)才去檢測下一個標志;高優(yōu)先級任務(wù)的輸出請求要等低優(yōu)先級輸出完畢才能得到響應(yīng),優(yōu)先級反轉(zhuǎn)在這里是正確的。

6 結(jié)論

本系統(tǒng)與采用雙通道測試、沒有RTOS、采用前后臺方式解決并行問題的方法比較[5],后者占用了54 KB代碼,在人機界面和并行度上均不及前者。前者在加入了μC/OS-II和GUI,并能進行四通道測試的情況下,僅有59 KB代碼;排除更大的漢字庫容量后,實際代碼大小幾乎與原來相同,性能卻有了很大的提高。[!--empirenews.page--]

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉