嵌入式实时系统的任务设计
嵌入式實(shí)時(shí)系統(tǒng)的任務(wù)設(shè)計(jì)主要為任務(wù)函數(shù)的設(shè)計(jì)、任務(wù)優(yōu)先級(jí)的安排、任務(wù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),任務(wù)之間的同步與通信設(shè)計(jì)。
一.任務(wù)函數(shù)的設(shè)計(jì)
任務(wù)函數(shù)按任務(wù)結(jié)構(gòu)可分為單次執(zhí)行任務(wù)、周期執(zhí)行任務(wù)和事件觸發(fā)任務(wù),各任務(wù)的主要差異點(diǎn)如下:
單次執(zhí)行任務(wù):執(zhí)行完任務(wù)后進(jìn)入休眠狀態(tài)(一般是從任務(wù)調(diào)度中刪除自己)
周期執(zhí)行任務(wù):執(zhí)行完任務(wù)后進(jìn)入等待狀態(tài),等待時(shí)間為周期時(shí)間(當(dāng)執(zhí)行周期小于一個(gè)時(shí)鐘節(jié)拍或者不是時(shí)鐘節(jié)拍的整數(shù)倍時(shí),可設(shè)計(jì)為定時(shí)器中斷觸發(fā)任務(wù))
事件觸發(fā)任務(wù):等待事件觸發(fā)后再執(zhí)行任務(wù)
?
二.任務(wù)優(yōu)先級(jí)的安排
任務(wù)優(yōu)先級(jí)一般按以下順序由高到低安排:
中斷關(guān)聯(lián)性
緊迫性
關(guān)鍵性
周期性
快捷性
傳遞性
?
實(shí)際優(yōu)先級(jí)設(shè)計(jì)應(yīng)留有余地,以至于將來(lái)做功能擴(kuò)充時(shí)不必對(duì)原有優(yōu)先級(jí)做大幅度調(diào)整。考慮到優(yōu)先級(jí)繼承情況,不應(yīng)將任務(wù)的優(yōu)先級(jí)安排得太緊密。
?
三.任務(wù)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
任務(wù)的數(shù)據(jù)結(jié)構(gòu)分為與操作系統(tǒng)有關(guān)的數(shù)據(jù)結(jié)構(gòu)和與操作系統(tǒng)無(wú)關(guān)的數(shù)據(jù)結(jié)構(gòu),與操作系統(tǒng)有關(guān)的數(shù)據(jù)結(jié)構(gòu)可在操作系統(tǒng)配置中進(jìn)行裁剪,與操作系統(tǒng)無(wú)關(guān)的數(shù)據(jù)結(jié)構(gòu)要注意作用域(局部變量還是全局變量)
?
四.任務(wù)之間的同步與通信
在操作系統(tǒng)的管理下,任務(wù)間不允許相互調(diào)用,需通過(guò)同步與通信機(jī)制來(lái)進(jìn)行協(xié)調(diào),可參考多任務(wù)實(shí)時(shí)系統(tǒng)的同步與通信。具體可分為行為同步、資源同步和數(shù)據(jù)通信。
?
對(duì)于任務(wù)調(diào)用的公共函數(shù),有二個(gè)處理方法:
①互斥調(diào)用:執(zhí)行時(shí)間短設(shè)置開(kāi)關(guān)中斷,執(zhí)行時(shí)間長(zhǎng)則配置信號(hào)量
②可重入設(shè)計(jì):不使用全局資源
?
1. 行為同步
①中斷與任務(wù)間的單向同步:通過(guò)信號(hào)量或消息郵箱同步
?
②兩個(gè)任務(wù)間的單向同步:通過(guò)信號(hào)量同步,當(dāng)控制方優(yōu)先級(jí)高于被控制方優(yōu)先級(jí)時(shí),控制方在發(fā)出信息后調(diào)用延時(shí)函數(shù)掛起自身,讓低優(yōu)先級(jí)的被控制任務(wù)得以盡快運(yùn)行
?
③兩個(gè)任務(wù)間的雙向同步:設(shè)立交匯點(diǎn),任務(wù)A在交匯點(diǎn)向B發(fā)送消息,并等待B回復(fù);B到達(dá)交匯點(diǎn)后等待A發(fā)送消息,在收到消息后回復(fù)A。其執(zhí)行過(guò)程如下:
若任務(wù)A優(yōu)先級(jí)高于任務(wù)B,任務(wù)A先運(yùn)行,到達(dá)交匯點(diǎn)后發(fā)送消息給任務(wù)B,等待B回復(fù);在A等待的時(shí)候,B進(jìn)入運(yùn)行狀態(tài),B到達(dá)交匯點(diǎn)后,收到A發(fā)送的消息,B給A回復(fù)消息;高優(yōu)先級(jí)任務(wù)A被激活,離開(kāi)交匯點(diǎn),A被掛起后,B離開(kāi)交匯點(diǎn)。
若任務(wù)A優(yōu)先級(jí)低于任務(wù)B,任務(wù)B先運(yùn)行,到達(dá)交匯點(diǎn)后等待A發(fā)送的消息;在B等待的時(shí)候,A進(jìn)入運(yùn)行狀態(tài),A到達(dá)交匯點(diǎn)后,發(fā)送消息給任務(wù)B并等待B回復(fù);B收到A的消息后給A回復(fù),高優(yōu)先級(jí)任務(wù)B先離開(kāi)交匯點(diǎn),B被掛起后,A收到回復(fù)離開(kāi)交匯點(diǎn)。
?
④兩個(gè)以上任務(wù)同步一個(gè)任務(wù):使用事件標(biāo)志組
?
⑤多個(gè)任務(wù)相互同步:用一個(gè)初始值為0的全局變量作為簽到計(jì)數(shù)器,每個(gè)任務(wù)先從簽到計(jì)數(shù)器的當(dāng)前值判斷是否是最后一個(gè)到達(dá)任務(wù),如果是就清零簽到計(jì)數(shù)器并向其他任務(wù)發(fā)出同步信號(hào),如果不是就通過(guò)將簽到計(jì)數(shù)器加1來(lái)進(jìn)行簽到,然后等待同步信號(hào)(掛起)
?
2. 資源同步
①? 關(guān)中斷
②? 關(guān)調(diào)度
③? 互斥信號(hào)量
④? 計(jì)數(shù)信號(hào)量
?
3. 數(shù)據(jù)通信
①? 全局變量:沒(méi)有行為同步,數(shù)據(jù)量小的情況下
②? 內(nèi)存數(shù)據(jù)塊:沒(méi)有行為同步,數(shù)據(jù)量大的情況下
③? 消息郵箱:有行為同步,通信雙方執(zhí)行頻度相同下適用;在發(fā)送消息方為中斷處理程序時(shí),消息保存有全局變量、靜態(tài)局部變量和將消息內(nèi)容冒充指針發(fā)送的方法,后二種方法較優(yōu)
④? 消息隊(duì)列:適用于以下情況:消息雙方至少一方?jīng)]有穩(wěn)定的執(zhí)行周期;通信雙方執(zhí)行周期不同
轉(zhuǎn)載于:https://www.cnblogs.com/yueze/p/7243750.html
總結(jié)
以上是生活随笔為你收集整理的嵌入式实时系统的任务设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu 安装中文
- 下一篇: java信息管理系统总结_java实现科