<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > μC/OS-II的多任務(wù)系統實(shí)時(shí)性分析與優(yōu)先級分配

μC/OS-II的多任務(wù)系統實(shí)時(shí)性分析與優(yōu)先級分配

作者: 時(shí)間:2010-07-05 來(lái)源:網(wǎng)絡(luò ) 收藏

引言

本文引用地址:http://dyxdggzs.com/article/257945.htm

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

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


1 系統分析

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

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

        圖1 通道工作流程

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

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

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

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

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


2 內存分配

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

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

  C8051F120微處理器帶有8 KB的RAM,系統沒(méi)有擴展外部數據存儲器。首先分析一下系統數據內存的需求情況:

 ?、?系統顯示部分使用了240×128點(diǎn)陣的LCD模塊和圖形GUI,如果建立完整的顯示緩沖區,需要240/8×128=3 840字節,約4 KB的RAM空間;
 ?、?Flash除了用作程序存儲器外,剩下的部分作為非易失性數據存儲器。每個(gè)Flash塊為1 KB,故需要1 KB的RAM作為Flash的讀寫(xiě)緩沖區;
 ?、?GUI自身約占去了1 KB內存;
 ?、?傳感器響應曲線(xiàn)需打印,其點(diǎn)坐標數據(對應打印機384個(gè)點(diǎn)行)約占1 KB。

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


3 可變任務(wù)棧和任務(wù)劃分

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

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

  本著(zhù)這樣一個(gè)原則來(lái)改進(jìn)任務(wù)劃分:不需要駐留的任務(wù)運行完畢即刪除,可以自身刪除,也可以在別的任務(wù)里刪除。這種任務(wù)處理不僅可以重用任務(wù)優(yōu)先級,還可以重用任務(wù),并且減少同時(shí)運行的任務(wù)數量。

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

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

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

  #define MaxStkSize128//大任務(wù)棧
  #define MinStkSize80//小任務(wù)棧
  然后定義任務(wù)棧時(shí)使用它們:
  OS_STK TaskDelStk1[MinStkSize];
  OS_STK TaskDelStk2[MaxStkSize];

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

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

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

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

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

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

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

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

圖2 可變大小任務(wù)棧結構

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

  STK_SIZE=MinStkSize;//提供堆棧大小值
  /*創(chuàng )建帶TimeLimit參數的,分配有任務(wù)棧TaskDelStk1,優(yōu)先級為10的任務(wù)OverTime*/
  OSTaskCreate(OverTime,(void*)TimeLimit, TaskDelStk1[0],10);

3.2 系統任務(wù)劃分

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


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

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

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

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

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


5 資源共享的處理
  

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

本系統的處理如下:
  

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

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

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

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


6 結論
  

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

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>