![基于時(shí)間觸發(fā)調(diào)度改進(jìn)的嵌入式編程模式_第1頁](http://file4.renrendoc.com/view10/M00/21/02/wKhkGWVtz5GAefKdAANxVms_uFA469.jpg)
![基于時(shí)間觸發(fā)調(diào)度改進(jìn)的嵌入式編程模式_第2頁](http://file4.renrendoc.com/view10/M00/21/02/wKhkGWVtz5GAefKdAANxVms_uFA4692.jpg)
![基于時(shí)間觸發(fā)調(diào)度改進(jìn)的嵌入式編程模式_第3頁](http://file4.renrendoc.com/view10/M00/21/02/wKhkGWVtz5GAefKdAANxVms_uFA4693.jpg)
![基于時(shí)間觸發(fā)調(diào)度改進(jìn)的嵌入式編程模式_第4頁](http://file4.renrendoc.com/view10/M00/21/02/wKhkGWVtz5GAefKdAANxVms_uFA4694.jpg)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于時(shí)間觸發(fā)調(diào)度改進(jìn)的嵌入式編程模式
引言
目前,RTOS特別是搶先式RTOS在嵌入式系統(tǒng)中的應(yīng)用越來越廣泛,但是還有很大一部分產(chǎn)品使用是小型單片機(jī)。這些系統(tǒng)由于成本的限制,通常資源非常有限,比如ROM往往小丁32KB,RAM小于2KB,由于RTOS對每個(gè)任務(wù)都要開辟單獨(dú)內(nèi)存區(qū)域,存放任務(wù)的上下文和各任務(wù)獨(dú)立的堆棧,所以在這種系統(tǒng)中使用RTOS非常勉強(qiáng)。對于這些低成本資源受限系統(tǒng)通常采用“前后臺”(或者叫“超級循環(huán)”)結(jié)構(gòu)進(jìn)行編程,這實(shí)際上是一種事件觸發(fā)的編程模式,當(dāng)中斷數(shù)目較多且系統(tǒng)完成的功能相對復(fù)雜時(shí),就會使系統(tǒng)的程序編寫變得非常復(fù)雜并使系統(tǒng)運(yùn)行的可預(yù)測性迅速下降。
針對這個(gè)問題,MichaelJ.Pont提出了一種“基于時(shí)間觸發(fā)的編程模式”,這種方法有助于降低CPU的負(fù)荷并減少存儲器的使用量,提高系統(tǒng)行為的可預(yù)測性,并使程序的結(jié)構(gòu)變得簡潔。但是在實(shí)際使用中,當(dāng)系統(tǒng)中不同的任務(wù)對時(shí)間要求差異較大時(shí),“基于時(shí)間觸發(fā)的編程模式”難以給出簡單有效的解決方案。為此,對“基于時(shí)間觸發(fā)的編程模式”進(jìn)行了改進(jìn),使之適應(yīng)性更強(qiáng),可以為成本和資源受限的小型嵌入式系統(tǒng)提供統(tǒng)一且有效的編程模式。1傳統(tǒng)編程結(jié)構(gòu)的局限性
當(dāng)不使用RTOS時(shí),嵌入式軟件通常采用兩種傳統(tǒng)的編程結(jié)構(gòu)進(jìn)行編程,一種叫“前后臺廳式”或者叫“超級循環(huán)結(jié)構(gòu)”,本質(zhì)上是事件觸發(fā)的編程方式;另一種叫時(shí)間觸發(fā)編程模式,MichaelJ.Pont的“基于時(shí)間觸發(fā)的編程模式”即屬于此。
在實(shí)際工作中,當(dāng)系統(tǒng)稍微復(fù)雜時(shí),會發(fā)現(xiàn)這兩種方式都有一定局限性,下面以一個(gè)實(shí)際產(chǎn)品設(shè)計(jì)中遇到的問題為例來說明。在設(shè)計(jì)一個(gè)用于配電柜的壁裝式智能配電儀表時(shí),CPU的程序設(shè)計(jì)需完成以下任務(wù):
①每半秒對前顯示屏的顯示數(shù)據(jù)進(jìn)行一次刷新。
②每0.1s對DI/DO進(jìn)行一次刷新。
③每0.2s對鍵盤進(jìn)行一次掃描。
④每半秒對測量數(shù)據(jù)進(jìn)行一次重新采集和計(jì)算。
⑤異步串行口與上位機(jī)使用Modhus通信,速率最高19200bps。
⑥CPU通過I2C總線與時(shí)鐘芯片和EEPROM通信。
⑦CPU通過SPI總線與LED數(shù)碼管及采集芯片通信。
⑧CPU要對所采集的6路信號進(jìn)行FFT變換。
⑨當(dāng)系統(tǒng)掉電時(shí),CPU要能快速響應(yīng),把當(dāng)前的電度底數(shù)寫入EEPROM中。
上述任務(wù)中,任務(wù)⑤和任務(wù)⑨是強(qiáng)實(shí)時(shí)性的,如果對串口的收發(fā)事件得不到及時(shí)響應(yīng),接收時(shí)會導(dǎo)致字節(jié)丟失,發(fā)送時(shí)會導(dǎo)致字節(jié)間時(shí)間間隔太大,造成接收方的Modbus幀定界錯(cuò)誤,對系統(tǒng)掉電事件如果不能及時(shí)響應(yīng)會造成EEPROM的寫入失敗。其他任務(wù)只要在指定的周期內(nèi)能得到執(zhí)行就行,但是任務(wù)⑧比較特殊,使用通常的8位CPU進(jìn)行6種信號的FFT變換,哪怕每種信號只做128點(diǎn)的FFT,運(yùn)算一次也要好幾秒。下面來看用傳統(tǒng)編程結(jié)構(gòu)實(shí)現(xiàn)上述設(shè)計(jì)時(shí)遇到的困擾。
1.1使用“前后臺方式”進(jìn)行編程
使用“前后臺方式”進(jìn)行編程時(shí),為保證任務(wù)⑤的及時(shí)性,使用了UART中斷,當(dāng)UART完成一個(gè)字節(jié)的收發(fā)后產(chǎn)生中斷,在中斷程序中將接收到的字符保存在接收緩沖區(qū)或從發(fā)送緩沖區(qū)取下一個(gè)待發(fā)字符裝入U(xiǎn)ART進(jìn)行發(fā)送,對Modbus協(xié)議的處理可以單獨(dú)用一個(gè)任務(wù)在中斷外處理,這保證了巾斷程序的簡短。為保證任務(wù)⑨響應(yīng)的及時(shí)性,也必須為它安排一個(gè)中斷。因?yàn)楫?dāng)系統(tǒng)掉電時(shí),系統(tǒng)只有不到10ms的過渡時(shí)間,系統(tǒng)如果不能在這個(gè)時(shí)間內(nèi)完成相關(guān)的操作,系統(tǒng)電壓將跌落至有效電壓以下而喪失工作能力。
安排好了后臺的中斷任務(wù)后再來看看前臺的任務(wù)如何完成。這里遇到的最大的挑戰(zhàn)是對任務(wù)⑧的處理,因?yàn)槿蝿?wù)⑧需要的執(zhí)行時(shí)間太長了,簡單的把它當(dāng)成一個(gè)任務(wù)處理將影響系統(tǒng)對其他任務(wù)的響應(yīng),在超級循環(huán)中的代碼結(jié)構(gòu)如下:
while(1){
任務(wù)①;
任務(wù)②;
……
任務(wù)⑧;
}
由于任務(wù)⑧執(zhí)行一次要幾秒鐘的時(shí)間,整個(gè)超級循環(huán)執(zhí)行一次至少大于任務(wù)⑧需要的時(shí)間,也就是說這個(gè)超級循環(huán)循環(huán)一次要幾秒鐘時(shí)間,將滿足不了各任務(wù)響應(yīng)時(shí)間的要求。
要解決這個(gè)問題,只有把任務(wù)⑧拆分成很多個(gè)子任務(wù),將每個(gè)子任務(wù)的耗時(shí)壓縮到10ms左右,并定義好各個(gè)子任務(wù)完成后的狀態(tài),在超級大循環(huán)中每次根據(jù)狀態(tài)只執(zhí)行一個(gè)子任務(wù),程序結(jié)構(gòu)如下:
while(1){
任務(wù)①;
任務(wù)②;
……
switch(子任務(wù)狀態(tài)){
case子任務(wù)狀態(tài)①:
子任務(wù)①;
break;
……
case子任務(wù)狀態(tài)②:
子任務(wù)②;
break;
……
case子任務(wù)狀態(tài):
子任務(wù);
break;
}
}
這樣,就需要把一個(gè)耗時(shí)幾秒的FFT運(yùn)算任務(wù)拆分成幾百個(gè)耗時(shí)10ms左有的子任務(wù),這顯然是不可接受的。除此之外,超級大循環(huán)結(jié)構(gòu)隱含的一個(gè)缺點(diǎn)就是隨著任務(wù)的增加,循環(huán)體的執(zhí)行時(shí)間是線性增加的,在實(shí)際設(shè)計(jì)中即使沒有像任務(wù)⑧那樣的高耗時(shí)任務(wù),當(dāng)系統(tǒng)功能增加時(shí)要保證系統(tǒng)響應(yīng)的及時(shí)性也是一個(gè)不小的挑戰(zhàn)。
1.2使用“時(shí)間觸發(fā)編程模式”進(jìn)行編程
“時(shí)間觸發(fā)編程模式”的核心是建立一個(gè)基丁時(shí)間觸發(fā)的合作式的任務(wù)調(diào)度器,在系統(tǒng)中盡量減少事件觸發(fā)(減少中斷的使用),系統(tǒng)通過任務(wù)調(diào)度器完成各任務(wù)的調(diào)度執(zhí)行,下面是“時(shí)間觸發(fā)編程模式”的典型程序結(jié)構(gòu):
系統(tǒng)中每個(gè)任務(wù)都定義了優(yōu)先級、任務(wù)循環(huán)周期和任務(wù)延遲時(shí)間,系統(tǒng)定時(shí)器中斷程序SCHUpdatc()按設(shè)定的節(jié)拍對任務(wù)隊(duì)列進(jìn)行刷新,在超級大循環(huán)中只執(zhí)行任務(wù)調(diào)度器SCH_Dispatch_Tasks(),根據(jù)任務(wù)隊(duì)列的狀念安排任務(wù)的執(zhí)行。
這種編程結(jié)構(gòu)避免了超級大循環(huán)結(jié)構(gòu)循環(huán)時(shí)間隨代碼量的增加而線性增加的問題,但是由于任務(wù)是不可剝奪的,一旦任務(wù)啟動執(zhí)行,任務(wù)調(diào)度器只有在當(dāng)前任務(wù)完成后才有機(jī)會執(zhí)行,這就要求每個(gè)任務(wù)占用CPU的時(shí)間不能太長,否則將影響整個(gè)系統(tǒng)的響應(yīng)速度。所以,F(xiàn)FT運(yùn)算在這種編程模式下還是必須進(jìn)行有效的拆分,否則就必須提高CPU的檔次或使用可剝奪型的搶先式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升辦學(xué)水平的高標(biāo)準(zhǔn)創(chuàng)新方案
- 保溫棉廠家采購合同范例
- 2025年度金融風(fēng)險(xiǎn)管理培訓(xùn)及認(rèn)證服務(wù)協(xié)議
- 東莞員工公寓租賃合同范例
- 前臺接待續(xù)簽合同范例
- 兩人合伙買裝載機(jī)合同范例
- 出租商鋪協(xié)議合同范例
- 勞務(wù)公司招工合同范本
- 2025年度海運(yùn)貨物跟蹤與運(yùn)輸合同示范
- 2025版茅臺酒出口業(yè)務(wù)代理及銷售合同模板4篇
- 新版《醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范》(2024)培訓(xùn)試題及答案
- 2025年人教版數(shù)學(xué)五年級下冊教學(xué)計(jì)劃(含進(jìn)度表)
- 北師大版七年級上冊數(shù)學(xué)期末考試試題及答案
- 初中信息技術(shù)課堂中的項(xiàng)目式學(xué)習(xí)實(shí)踐研究結(jié)題報(bào)告
- 2025年初級社會工作者綜合能力全國考試題庫(含答案)
- 復(fù)工復(fù)產(chǎn)安全培訓(xùn)考試題
- 上下樓梯安全我知道安全教育課件
- 市級臨床重點(diǎn)專科申報(bào)書
- 手術(shù)風(fēng)險(xiǎn)及醫(yī)療意外險(xiǎn)告知流程
- 《醫(yī)院重點(diǎn)專科建設(shè)專項(xiàng)資金管理辦法》
評論
0/150
提交評論