




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第八 基于 的程設(shè)計例8.1 實例介為了使讀者對 COS-II 操作系統(tǒng)有更深的理解,本章將介紹一個在 STM32F103 處理器平臺上使用 COS-II 實時操作系統(tǒng)的程序設(shè)計實例。此實例使 用英倍特公司提供的 STM103V100 評估板來實現(xiàn)一個簡易溫度計。該實例使用 STM103V100 評估板自帶的高靈敏度數(shù)字溫度傳感器來傳送溫度數(shù)據(jù),根據(jù)實際采 樣周期的需要,安排了四種不同的采樣方式。采樣的條件和周期可以通過鍵盤輸入 進(jìn)行調(diào)節(jié),采樣得到的結(jié)果可以在評估板的液晶屏上同步顯示,并通過串口將采樣 所得的結(jié)果送到上位機(jī)。關(guān)于 STM103V100 評估板的更多內(nèi)容超出本書范圍,請讀 者參閱
2、其它相關(guān)資料。8.2 實例分本節(jié)主要分析如何通過基于實時操作系統(tǒng)編程的方法實現(xiàn)整個系統(tǒng)的所有功 能。下面的內(nèi)容將從任務(wù)劃分開始,詳細(xì)說明任務(wù)分析的過程。8.2.1 實例任務(wù)劃分為了更合理的將整個系統(tǒng)劃分為不同任務(wù),首先要明確一個好的實時系統(tǒng)應(yīng) 具備那些特點,即任務(wù)劃分的基本原則是什么。一般說來,任務(wù)劃分的基本原則有 以下幾點:滿足系統(tǒng)“實時性”:一般使用 COS-II 嵌入式應(yīng)用系統(tǒng),對于響應(yīng)時間 要求很高,如果實時性得不到滿足,系統(tǒng)會出現(xiàn)錯誤甚至導(dǎo)致難以挽回的故障。因 此在任務(wù)劃分時,保證系統(tǒng)實時性是首要原則。較少資源需求:多個任務(wù)協(xié)同運轉(zhuǎn),依靠操作系統(tǒng)的調(diào)度策略。任務(wù)之間的 同步,任務(wù)之間
3、的通信,內(nèi)存管理都需要消耗系統(tǒng)資源。所以在任務(wù)劃分時,盡量 將使用同類資源的應(yīng)用歸入同一任務(wù)中,以減少操作系統(tǒng)調(diào)度時所消耗的資源。合理的任務(wù)數(shù):同一系統(tǒng),任務(wù)劃分的數(shù)目越多,每個任務(wù)的功能越簡單, 實現(xiàn)越容易,但任務(wù)數(shù)目的增多,加大了操作系統(tǒng)的調(diào)度負(fù)擔(dān),資源開銷也隨之加 大;相反,如果任務(wù)劃分的數(shù)目太少,會增加每個任務(wù)的復(fù)雜性,使任務(wù)設(shè)計難度 加大。最極端的情況,當(dāng)系統(tǒng)任務(wù)數(shù)目減少到 時,也就失去了使用多任務(wù)操作系 統(tǒng)的意義。對一個具體的嵌入式應(yīng)用系統(tǒng)進(jìn)行任務(wù)劃分時,可以有不同的任務(wù)劃分方 案。常用的任務(wù)劃分方法有:以硬件模塊為對象劃分任務(wù)、以實時性優(yōu)先原則劃分 任務(wù)和切分耗時任務(wù)等。所謂“以
4、硬件模塊為對象劃分任務(wù)”就是根據(jù)系統(tǒng)需求, 以硬件模塊相關(guān)驅(qū)動為基礎(chǔ),根據(jù)硬件驅(qū)動在系統(tǒng)中的關(guān)鍵性設(shè)定優(yōu)先級的任務(wù)劃 分方法;“實現(xiàn)性優(yōu)先原則劃分任務(wù)”即,將對實時性要求較高的應(yīng)用劃分為單獨 任務(wù),并賦予較高的優(yōu)先級來保證整個系統(tǒng)實時性的要求;而“切分耗時任務(wù)”的 任務(wù)劃分方法,顧名思義就是將一些占用大量 處理時間的繁瑣應(yīng)用從系統(tǒng)中分 離出來,作為一個優(yōu)先級較低的任務(wù)在系統(tǒng)空閑時運行。根據(jù)上述任務(wù)劃分的原則和方法,本實例被劃分為 個任務(wù):包括 4 個采用 任務(wù),1 個負(fù)責(zé)和用戶交互的鍵盤任務(wù),1 個顯示任務(wù)和 個向上位機(jī)傳送數(shù)據(jù)的 串口發(fā)送任務(wù)。其中,4 個采樣任務(wù)分別使用不同的采樣條件:延時
5、采樣、使用系 統(tǒng)時鐘節(jié)拍采樣、定時中斷采樣和使用高優(yōu)先級中斷的采樣。鍵盤任務(wù)除負(fù)責(zé)接收 用戶輸入并做出反饋外,還需要完成操作系統(tǒng)和系統(tǒng)資源的初始化,包括系統(tǒng)中用 到的消息隊列、郵箱和互斥信號量的創(chuàng)建等。因為按鍵任務(wù)是第一個啟動的用戶任 務(wù),所以目標(biāo)板的初始化也由該任務(wù)完成。8.2.2 實例任務(wù)設(shè)計與優(yōu)先分配完成系統(tǒng)任務(wù)劃分后,需要對任務(wù)的優(yōu)先級進(jìn)行設(shè)定。任務(wù)優(yōu)先級分配是否 合理,直接影響到系統(tǒng)的實時性和可靠性。對任務(wù)優(yōu)先級的安排一般遵循以下原 則:外設(shè)相關(guān)任務(wù)安排高優(yōu)先級:因為外設(shè)任務(wù)直接與中斷服務(wù)程序相對應(yīng),如 果外設(shè)任務(wù)優(yōu)先級低,當(dāng)需要中斷處理時,系統(tǒng)資源可能被高優(yōu)先級任務(wù)占用,而 導(dǎo)致中
6、斷丟失;根據(jù)任務(wù)實現(xiàn)功能的重要性安排優(yōu)先級:一般情況下,任務(wù)越重要優(yōu)先級越 高;占用關(guān)鍵資源的任務(wù)優(yōu)先級盡量高:只有保證占用關(guān)鍵資源的任務(wù)優(yōu)先運 行,才能使其盡早釋放資源,以便其它任務(wù)運行;對于周期性任務(wù),執(zhí)行周期越短的任務(wù),優(yōu)先級應(yīng)越高,以保證其得到及時 運行;當(dāng)以上條件相近時,耗時越短的任務(wù)優(yōu)先級應(yīng)越高。這樣可以縮短其它就緒 任務(wù)的延時時間。根據(jù)以上優(yōu)先級安排原則,系統(tǒng)中存在的 個采樣任務(wù)實現(xiàn)同樣功能且均為 一次性任務(wù)。所以,4 個任務(wù)的優(yōu)先級應(yīng)一致。但在 操作系統(tǒng)中,同一 優(yōu)先級不允許存在多個任務(wù),所以將 4 個采樣任務(wù)的優(yōu)先級依次排列,因為它們不 可能同時發(fā)生,則對于應(yīng)用來說,4 個任
7、務(wù)的優(yōu)先級是一致的。鍵盤任務(wù)是系統(tǒng)運行的第一個任務(wù),負(fù)責(zé)與用戶交互。根據(jù)優(yōu)先級安排原 則,將其優(yōu)先級定為 7 個任務(wù)中的中等級別,設(shè)為 。顯示任務(wù)負(fù)責(zé)將采集的數(shù)據(jù)顯示在 LED 屏上,它由采樣任務(wù)觸發(fā)。根據(jù)優(yōu)先 級安排原則,將其優(yōu)先級定為 7 個任務(wù)中的最低優(yōu)先級,設(shè)為 。系統(tǒng)中任務(wù)的優(yōu)先級安排如下程序清單所示,void Task_FastSamp(void *pdata); /使用高優(yōu)先級中斷的采樣,優(yōu)先級 5void Task_HookSamp(void *pdata); /使用鉤子函數(shù)的采樣任務(wù),優(yōu)先級 6void Task_TimerSamp(void *pdata); /使用定時中斷
8、的采用任務(wù),優(yōu)先 級 7void Task_DelaySamp(void *pdata); /使用延時函數(shù)的采用任務(wù),優(yōu)先 級 8void Task_Send(void *pdata); /串口發(fā)送任務(wù),優(yōu)先級 13void Task_Key (void *pdata); /鍵盤任務(wù),優(yōu)先級 15void Task_Disply(void *pdata); /顯示任務(wù),優(yōu)先級 17程序運行過程中,當(dāng)系統(tǒng)檢測到鍵盤輸入后,根據(jù)采樣周期的設(shè)定值而創(chuàng)建 一個采樣任務(wù)和串口發(fā)送任務(wù) Task_Send() 個采樣任務(wù) Task_FastSamp (),Task_HookSamp(),Task_Time
9、rSamp),Task_DelaySamp()和串口發(fā) 送任務(wù) Task_Send()均為一次性任務(wù),且在任務(wù)完成后自動刪除。 ()為消息隊列驅(qū)動的任務(wù),根據(jù)消息隊列傳送的內(nèi)容進(jìn)行不同的顯示操作。 Task_Key()是周期性執(zhí)行的任務(wù),不斷檢測鍵盤輸入,并根據(jù)檢測結(jié)果,做出不 同的響應(yīng)。鍵盤任務(wù)是系統(tǒng)運行的第一個任務(wù),負(fù)責(zé)系統(tǒng)初始化和其它任務(wù)的創(chuàng)建。該 任務(wù)運行后,接收用戶輸入并根據(jù)接收到的輸入值啟動不同的采樣任務(wù)。同時,將 接收到的輸入值通過消息隊列的形式發(fā)送到顯示任務(wù)。顯示任務(wù)負(fù)責(zé)顯示用戶輸入的參數(shù)值和采樣任務(wù)采樣得到的數(shù)據(jù)。串口發(fā)送任務(wù)在鍵盤任務(wù)檢測到發(fā)送操作按鍵確定時創(chuàng)建。該任務(wù)負(fù)責(zé)
10、從全 局采樣數(shù)組中讀取數(shù)據(jù)并使用中斷方式發(fā)送到上位機(jī)。全局采樣數(shù)組是系統(tǒng)初始化 時建立的 FIFO 緩存,通過互斥信號量保護(hù)。4 個采樣任務(wù)均在鍵盤接收到用戶輸入后創(chuàng)建,不同的采樣任務(wù)使用不同的 采樣方式進(jìn)行采樣,并將采樣所得數(shù)據(jù)保存在全局 緩存中。所有采樣任務(wù)在 采樣過程中的工作就是檢測什么時候采樣結(jié)束,并且負(fù)責(zé)將采樣所得的數(shù)據(jù)進(jìn)行處 理。處理完畢后,發(fā)送消息通知顯示任務(wù),最后刪除自己本身。8.3 任務(wù)實詳解開始程序設(shè)計之前,首先了解一下主函數(shù)。在主函數(shù)中,進(jìn)行了操作系統(tǒng)的 初始化,創(chuàng)建了一個鍵盤任務(wù),然后,啟動多任務(wù)操作系統(tǒng)。主程序代碼如下:int main(void)#if (OS_TA
11、SK_NAME_SIZE = 16)INT8U err;#endifBsp_Init(); /系統(tǒng)外設(shè)初始化PWM_IoConfiguration(); /初始化系統(tǒng)時鐘OSInit(); /* 初始化 OS */Tmr_TickInit(); / 操作系統(tǒng) Tick 初始化OSTaskCreateExt(Task_Key, /任務(wù)指針(void *)0,(OS_STK *)&InitTaskStkOS_INIT_TASK_STACK_SIZE - 1,OS_TASK_KEY_PRIO, /任務(wù)優(yōu)先級OS_TASK_KEY_PRIO,(OS_STK *)&InitTaskStk0,OS_INI
12、T_TASK_STACK_SIZE,(void *)0,OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);#if (OS_TASK_NAME_SIZE = 16)OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)Idle task, &err);OSTaskNameSet(OS_TASK_INIT_PRIO, (INT8U *)Init task, &err);#endifOSStart(); /* 啟動多任務(wù)環(huán)境 */return(0);從程序中可以看到,當(dāng)執(zhí)行 OSStart()后,主函數(shù)返回,但了解了 操作系統(tǒng)后,可以
13、知道這個“return 0”的語句是不可能執(zhí)行的。在主函數(shù)中創(chuàng)建了一個鍵盤任務(wù) Task_Key(),其優(yōu)先級為 ,負(fù)責(zé)初始化目標(biāo)板和根據(jù)用戶輸 入創(chuàng)建其他任務(wù)。8.3.1 鍵盤任務(wù)鍵盤任務(wù)的主要工作就是周期性掃描鍵盤,優(yōu)先級為 。其程序流程圖如圖 8.1 所示。圖 8.1 鍵盤任務(wù)程序流程圖程序中,首先進(jìn)行目標(biāo)板初始化,目標(biāo)板初始化過程請參見 處 理器內(nèi)部資源 C 編程與實例一章講解。之所以將目標(biāo)的初始化放在第一個任務(wù) 里,是為了保證該初始化在 OSStart()執(zhí)行后完成。值得注意的是,與采樣任務(wù)相 關(guān)的 A/D 轉(zhuǎn)換初始化也放在了這里,這是因為 個采樣任務(wù)都用到了 A/D 轉(zhuǎn)換,放 在鍵
14、盤任務(wù)中一次完成,避免了在每個采樣任務(wù)中單獨初始化而帶來的代碼冗余。接下來創(chuàng)建顯示任務(wù) Task_Disp(),屏幕初始化工作放在 該任務(wù)中完成。最后創(chuàng)建了任務(wù)輪轉(zhuǎn)不可或缺的一些操作系統(tǒng)資源,包括一個互斥信號量 Sem,一個郵箱 MyMbox 和一個消息隊列 ReMsgQeue其中消息隊列中消息數(shù)目定義 為 10。按鍵處理是這個鍵盤任務(wù)的關(guān)鍵,這個鍵盤任務(wù)中狀態(tài)轉(zhuǎn)移情況如表 所 示。表 8.1 鍵盤狀態(tài)轉(zhuǎn)移表初始狀態(tài)操作鍵動作“確定”鍵 flag 狀態(tài)翻轉(zhuǎn),進(jìn)入周期修改狀態(tài)或退出修改狀態(tài)“數(shù)字”鍵 狀態(tài) 1:狀態(tài)選定 “清零”鍵“移動”鍵如果為數(shù)字鍵并且 flag=1,則設(shè)定數(shù)字有效并顯 示;否則不響應(yīng)如果 flag=1,則將保存的設(shè)定值清零并顯示,否 則不響應(yīng)如果 flag=0,則進(jìn)入啟動選定狀態(tài)并顯示,否則 不響應(yīng)如果 clflagp=1,則清零 clflagp。狀態(tài) 2:啟動采 樣“確定”鍵如果采樣周期為 20ms,則創(chuàng)建鉤子函數(shù)采樣任務(wù)如果采樣周期為 20ms 的整倍數(shù),但不為 ,則 創(chuàng)建延時函數(shù)采樣任務(wù)。狀態(tài) 3:清屏操 作狀態(tài) 4:發(fā)送命 令狀態(tài)“移動”鍵“確定”鍵“移動”鍵“確定”鍵“移動”鍵進(jìn)入顯示選定狀態(tài)清除上一次顯示的采樣數(shù)據(jù)創(chuàng)建發(fā)送任務(wù),將采樣所得數(shù)據(jù)送上位機(jī)創(chuàng)建發(fā)生任務(wù),將采樣所得的數(shù)據(jù)發(fā)送到上位機(jī) 進(jìn)入周期選定狀態(tài)“確定”鍵 flag
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院招聘護(hù)士合同范例
- 公共器材租賃合同范本
- 合同范本 合作
- 公司勞動用工合同范本簡版
- 售后回租合同范本
- 出租野餐工具合同范本
- 合同范本些可以修改
- 化妝造型合同范本
- 華能電廠合同范本
- 員工內(nèi)部合同范本
- GB/T 45229-2025劇場工藝安全要求
- 2025-2030年中國數(shù)字告示(數(shù)字標(biāo)牌)行業(yè)需求現(xiàn)狀及發(fā)展趨勢分析報告
- 矛盾糾紛排查知識講座
- 2025年廣州市黃埔區(qū)東區(qū)街招考社區(qū)居委會專職工作人員高頻重點模擬試卷提升(共500題附帶答案詳解)
- 汽車制動系統(tǒng)課件
- 2025年黑龍江省高職單招《職測》高頻必練考試題庫400題(含答案)
- 統(tǒng)編版七年級語文下冊《第16課有為有不為》教案
- GB 45184-2024眼視光產(chǎn)品元件安全技術(shù)規(guī)范
- 【上?!康谝淮卧驴季?1【20~21章】
- 2025年湖南科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025年東營科技職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
評論
0/150
提交評論