国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式系統(tǒng)裸機的任務(wù)調(diào)度應用設(shè)計*

2018-06-15 07:56,,,
關(guān)鍵詞:處理程序堆棧任務(wù)調(diào)度

,,,

(1.齊魯工業(yè)大學(山東省科學院),濟南 250353;2.山東省科學院自動化研究所;3.山東省汽車電子技術(shù)重點實驗室)

引 言

在嵌入式系統(tǒng)的軟件設(shè)計中,要根據(jù)具體應用要求和系統(tǒng)資源大小,選擇合適的嵌入式操作系統(tǒng),根據(jù)應用邏輯劃分任務(wù),然后利用操作系統(tǒng)提供的一系列API建立任務(wù)隊列,以消息或事件的形式進行任務(wù)間通信,實現(xiàn)任務(wù)調(diào)度[1],這種方式可以讓開發(fā)人員將精力集中在應用邏輯的開發(fā)上,不僅可以實現(xiàn)軟件的模塊化,還可以靈活地進行修改和維護。

在這種方式下,MCU上電初始化時首先建立任務(wù)隊列,為每個任務(wù)設(shè)定合適的優(yōu)先級,并分配一定的堆棧用于存儲任務(wù)上下文。在系統(tǒng)運行階段,系統(tǒng)滴答、發(fā)送消息或事件、各種系統(tǒng)中斷都會觸發(fā)任務(wù)調(diào)度。執(zhí)行任務(wù)切換時,首先將當前任務(wù)的上下文數(shù)據(jù)保存到任務(wù)堆棧中,然后將新任務(wù)堆棧恢復到MCU各類寄存器和系統(tǒng)棧中[2],根據(jù)新的PC(程序計數(shù)器)指針執(zhí)行新任務(wù)。每個任務(wù)堆棧都會消耗寶貴的RAM資源,而且系統(tǒng)運行階段存在大量頻繁的中斷時,上下文的存儲和恢復會極大消耗MCU的計算資源,因此,只有在RAM資源豐富、主頻高的高端MCU中才選擇使用操作系統(tǒng)。在那些由于成本限制只能選擇RAM資源較小、主頻較低的中低端MCU的嵌入式系統(tǒng)的軟件設(shè)計中,只能采用不加操作系統(tǒng)的裸機方式。

1 方案設(shè)計

在不帶操作系統(tǒng)的裸機嵌入式系統(tǒng)中,軟件系統(tǒng)在一個主循環(huán)體中運行。MCU循環(huán)調(diào)用由各種軟件模塊組成的主循環(huán)體,各個軟件模塊不存在各自的任務(wù)堆棧,共享一個系統(tǒng)棧。執(zhí)行中斷處理程序或調(diào)用子函數(shù)時,MCU將一些局部變量、中間計算結(jié)果和寄存器存入系統(tǒng)棧,執(zhí)行完中斷處理程序或子函數(shù)后恢復系統(tǒng)棧。在這種方式下,一般以大量的全局變量和標志位實現(xiàn)各個軟件模塊的交互,造成各個軟件模塊之間耦合性強,修改和維護不靈活。

本文借鑒操作系統(tǒng)的任務(wù)調(diào)度思想,提出一種裸機嵌入式系統(tǒng)的任務(wù)調(diào)度方法[3]。在裸機開發(fā)方式中,設(shè)計一種不帶任務(wù)堆棧的邏輯任務(wù),按照具體應用劃分若干邏輯任務(wù),這些邏輯任務(wù)共享一個系統(tǒng)棧,每個邏輯任務(wù)都有自己的事件隊列和任務(wù)處理程序,任務(wù)之間通過發(fā)送事件的形式進行通信。這種方法實現(xiàn)了類似于操作系統(tǒng)的任務(wù)調(diào)度機制,能夠清晰反映應用實現(xiàn)邏輯,同時提高了軟件模塊的內(nèi)聚性,降低了軟件模塊之間的耦合性[4]。

2 軟件設(shè)計

2.1 邏輯任務(wù)設(shè)計

為了清晰地反映應用的實現(xiàn)邏輯,以邏輯任務(wù)的形式實現(xiàn)各個軟件模塊,每個邏輯任務(wù)都有相應的任務(wù)處理函數(shù)和事件隊列,任務(wù)之間通過事件的形式進行通信,發(fā)送的事件填充到任務(wù)的事件隊列中,任務(wù)處理函數(shù)根據(jù)任務(wù)事件隊列中的事件執(zhí)行相關(guān)操作。

為了便于管理,以結(jié)構(gòu)體的形式描述邏輯任務(wù),結(jié)構(gòu)體成員變量包括任務(wù)ID、事件隊列、事件產(chǎn)生索引、事件消費索引。邏輯任務(wù)結(jié)構(gòu)體如下所示:

typedef struct{

e_Event event[DEFAULT_EVENTQ_SIZE];

e_TaskId task_id;

uint8_ttick_idx;

uint8_ttalk_idx;

}s_Task;

以能夠反映任務(wù)具體功能的枚舉類型定義任務(wù)ID,以ID查找對應的邏輯任務(wù)結(jié)構(gòu)體。同時,以任務(wù)ID作為任務(wù)優(yōu)先級,ID值越大,優(yōu)先級越高。筆者為某汽車廠開發(fā)的BCM的任務(wù)包括輸入信號檢測、RKE、CAN通信、LIN通信、網(wǎng)絡(luò)管理、門鎖控制、車燈控制、雨刮控制、車窗防盜報警、車身防盜報警、故障診斷、發(fā)動機防盜、定時器管理[2],定義任務(wù)ID枚舉類型如下:

typedef enum{

MIN_TASK_PRIO,

INPUT_DETECT_TASK_PRIO = MIN_TASK_PRIO,

RKE_TASK_PRIO,

CAN_TASK_PRIO,

LIN_TASK_PRIO,

NM_TASK_PRIO,

LOCK_CTRL_TASK_PRIO,

LGT_CTRL_TASK_PRIO,

WIPER_CTRL_TASK_PRIO,

WDW_CTRL_TASK_PRIO,

ALARMSTATE_TASK_PRIO,

SYS_MONITOR_TASK_PRIO,

IMMO_TASK_PRIO,

TIMER_TASK_PRIO,

MAX_TASK_PRIO = TIMER_TASK_PRIO,

}e_TaskId;

事件隊列從邏輯上來說是一個環(huán)形隊列,從實現(xiàn)上來說是一個枚舉類型的數(shù)組,包括兩個索引:事件產(chǎn)生索引和事件消費索引,事件產(chǎn)生索引以tick_idx表示,事件消費索引以talk_idx表示。事件隊列的大小根據(jù)實際應用而定。

2.2 任務(wù)調(diào)度

MCU上電初始化時,按照任務(wù)優(yōu)先級從低到高的順序?qū)⒏鱾€邏輯任務(wù)結(jié)構(gòu)體的事件隊列數(shù)組成員初始化為0,事件產(chǎn)生索引和事件消費索引初始化為0,然后進入主循環(huán)體。進入主循環(huán)體,在主循環(huán)體中執(zhí)行任務(wù)調(diào)度程序,按照邏輯任務(wù)優(yōu)先級從高到低的順序依次調(diào)用每個邏輯任務(wù)的任務(wù)處理程序,直至當前邏輯任務(wù)的優(yōu)先級為最低時,退出任務(wù)調(diào)度程序,返回進入主循環(huán)體。任務(wù)調(diào)度流程如圖1所示。

圖1 任務(wù)調(diào)度流程圖

2.3 任務(wù)處理程序設(shè)計

當中斷處理程序或任務(wù)處理程序向某個任務(wù)發(fā)送事件時,向該任務(wù)結(jié)構(gòu)體中的事件隊列中填充事件,將事件賦值給以該任務(wù)結(jié)構(gòu)體的事件產(chǎn)生索引為下標的事件隊列數(shù)組成員,然后將事件產(chǎn)生索引加1,如果索引值等于事件隊列數(shù)組的長度,將事件產(chǎn)生索引置0。

執(zhí)行任務(wù)處理程序時,如果事件產(chǎn)生索引和事件消費索引兩者相等,說明事件隊列中不存在未被處理的事件,如果不相等,說明存在未被處理的事件,讀取以該任務(wù)結(jié)構(gòu)體的事件消費索引為下標的事件隊列數(shù)組成員,根據(jù)具體事件執(zhí)行相關(guān)操作,然后將事件消費索引加1,如果索引值等于事件隊列數(shù)組的長度,將事件消費索引置0。再次判斷事件產(chǎn)生索引和事件消費索引是否相等,循環(huán)處理,直到事件隊列中不再存在未被處理的事件。任務(wù)處理程序流程如圖2所示。

圖2 任務(wù)處理程序流程圖

結(jié) 語

[1] 常華利,尹震宇.基于MicroBlaze的μC/OS-II操作系統(tǒng)移植[J].計算機系統(tǒng)應用,2017(5):239-246.

[2] 陳發(fā)堂,主父文剛,童慶.Nucleus PLUS操作系統(tǒng)在TMS320C81 68上的移植及TD-LTE中的應用[J].廣東通信技術(shù),2016(2):22-25,33.

[3] 山東省科學院自動化研究所.一種嵌入式軟件的任務(wù)調(diào)度方法及裝置:中國,201810128162.1[P].2018-2-8.

[4] 張智慧.C語言嵌入式系統(tǒng)編程軟件設(shè)計架構(gòu)研究[J].單片機與嵌入式系統(tǒng)應用,2018(1):3-5,10.

[5] 馬建輝,王知學,李研強.車身控制系統(tǒng)BCM的設(shè)計與實現(xiàn)[J].中國科技成果,2011(13):49-51.

猜你喜歡
處理程序堆棧任務(wù)調(diào)度
基于行為監(jiān)測的嵌入式操作系統(tǒng)堆棧溢出測試*
高速公路工程變更與計量支付處理程序的優(yōu)化方法
基于改進NSGA-Ⅱ算法的協(xié)同制造任務(wù)調(diào)度研究
基于時間負載均衡蟻群算法的云任務(wù)調(diào)度優(yōu)化
基于堆棧自編碼降維的武器裝備體系效能預測
基于C++的數(shù)控加工通用后處理程序的開發(fā)應用研究
企業(yè)危機公關(guān)管理問題分析
處理房地產(chǎn)糾紛中行政與民事交叉問題的正當程序
云計算環(huán)境中任務(wù)調(diào)度策略
云計算中基于進化算法的任務(wù)調(diào)度策略