亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        ,,,

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

        引 言

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

        在這種方式下,MCU上電初始化時首先建立任務(wù)隊列,為每個任務(wù)設(shè)定合適的優(yōu)先級,并分配一定的堆棧用于存儲任務(wù)上下文。在系統(tǒng)運行階段,系統(tǒng)滴答、發(fā)送消息或事件、各種系統(tǒng)中斷都會觸發(fā)任務(wù)調(diào)度。執(zhí)行任務(wù)切換時,首先將當(dāng)前任務(wù)的上下文數(shù)據(jù)保存到任務(wù)堆棧中,然后將新任務(wù)堆?;謴?fù)到MCU各類寄存器和系統(tǒng)棧中[2],根據(jù)新的PC(程序計數(shù)器)指針執(zhí)行新任務(wù)。每個任務(wù)堆棧都會消耗寶貴的RAM資源,而且系統(tǒng)運行階段存在大量頻繁的中斷時,上下文的存儲和恢復(fù)會極大消耗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ù)后恢復(fù)系統(tǒng)棧。在這種方式下,一般以大量的全局變量和標(biāo)志位實現(xiàn)各個軟件模塊的交互,造成各個軟件模塊之間耦合性強,修改和維護不靈活。

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

        2 軟件設(shè)計

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

        為了清晰地反映應(yīng)用的實現(xiàn)邏輯,以邏輯任務(wù)的形式實現(xiàn)各個軟件模塊,每個邏輯任務(wù)都有相應(yīng)的任務(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查找對應(yīng)的邏輯任務(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ù)實際應(yīng)用而定。

        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ù)處理程序,直至當(dāng)前邏輯任務(wù)的優(yōu)先級為最低時,退出任務(wù)調(diào)度程序,返回進入主循環(huán)體。任務(wù)調(diào)度流程如圖1所示。

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

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

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

        執(zhí)行任務(wù)處理程序時,如果事件產(chǎn)生索引和事件消費索引兩者相等,說明事件隊列中不存在未被處理的事件,如果不相等,說明存在未被處理的事件,讀取以該任務(wù)結(jié)構(gòu)體的事件消費索引為下標(biāo)的事件隊列數(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)應(yīng)用,2017(5):239-246.

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

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

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

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

        猜你喜歡
        處理程序堆棧任務(wù)調(diào)度
        高速公路工程變更與計量支付處理程序的優(yōu)化方法
        基于改進NSGA-Ⅱ算法的協(xié)同制造任務(wù)調(diào)度研究
        基于時間負載均衡蟻群算法的云任務(wù)調(diào)度優(yōu)化
        嵌入式軟件堆棧溢出的動態(tài)檢測方案設(shè)計*
        基于堆棧自編碼降維的武器裝備體系效能預(yù)測
        基于C++的數(shù)控加工通用后處理程序的開發(fā)應(yīng)用研究
        企業(yè)危機公關(guān)管理問題分析
        云計算環(huán)境中任務(wù)調(diào)度策略
        云計算中基于進化算法的任務(wù)調(diào)度策略
        地鐵直流系統(tǒng)中框架保護原理及處理程序
        久久精品无码一区二区三区不卡| 日本h片中文字幕在线| 大尺度无遮挡激烈床震网站| 天天色天天操天天日天天射| 亚洲男人综合久久综合天堂| 国产av一区二区三区无码野战| 性色做爰片在线观看ww| 亚洲日韩欧美一区二区三区| 欧美日韩国产在线人成dvd| 亚洲人妻有码中文字幕| 亚洲av日韩专区在线观看| 丰满人妻被两个按摩师| 国语自产偷拍精品视频偷| 国产农村三片免费网站| 欧美日韩亚洲国产无线码| 免费人成黄页在线观看国产| 网站在线观看视频一区二区| 日韩 无码 偷拍 中文字幕| 国产国产裸模裸模私拍视频| 日日碰狠狠躁久久躁9| 97色综合| 亚洲性久久久影院| 少妇被粗大的猛烈进出69影院一| 亚洲色大成网站www永久一区| 欧美va亚洲va在线观看| 成年毛片18成年毛片| 羞涩色进入亚洲一区二区av| 日韩一区av二区三区| 无码无套少妇毛多18p| 情侣黄网站免费看| 精品人妻少妇一区二区中文字幕| 一区二区三区av资源网| 九七青青草视频在线观看| 亚洲成av人在线观看网址| 久久人人玩人妻潮喷内射人人| 精品一区二区三区影片| 男女打扑克视频在线看| 插上翅膀插上科学的翅膀飞| 久久久久人妻一区精品色欧美| 综合色天天久久| 中文字幕久久国产精品|