• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種基于建立索引查詢方式實(shí)現(xiàn)層次化嵌入式軟件設(shè)計(jì)的方法

      2018-02-03 09:29:20張偉張建霍亮高巖孫天澳李旭升王云亮
      科技創(chuàng)新導(dǎo)報(bào) 2017年31期
      關(guān)鍵詞:嵌入式軟件層次化

      張偉++張建++霍亮++高巖++孫天澳++李旭升++王云亮

      摘 要:本文介紹一種基于建立索引查詢方式實(shí)現(xiàn)層次化的嵌入式軟件設(shè)計(jì)方法,本方法具有可移植性、可重構(gòu)性等特點(diǎn),特別適合在控制器嵌入式軟件實(shí)現(xiàn)層次化查詢方式的多級調(diào)用的軟件結(jié)構(gòu)。

      關(guān)鍵詞:嵌入式軟件 可移植性 可重構(gòu)性 層次化

      中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-098X(2017)11(a)-0157-02

      在嵌入式軟件系統(tǒng)設(shè)計(jì)中,C或C++軟件結(jié)構(gòu)設(shè)計(jì)是一種過程設(shè)計(jì),對于軟件設(shè)計(jì)中存在的事件調(diào)用,一般都使用硬件或軟件中斷調(diào)用方式,但由于子函數(shù)在調(diào)用過程中體量的大小不同,容易導(dǎo)致中斷,在設(shè)計(jì)中往往對于程序存在隱患。而查詢方式又過多地占用CPU的運(yùn)行時(shí)間。

      本文介紹一種基于建立索引查詢方式的層次化的嵌入式軟件設(shè)計(jì)應(yīng)用,通過結(jié)合硬件或軟件中斷產(chǎn)生信號量,通過查詢方式來實(shí)現(xiàn)多層次函數(shù)的調(diào)用,既避免了過程設(shè)計(jì)中重復(fù)調(diào)用子函數(shù)導(dǎo)致的代碼冗余,也避免了中斷調(diào)用子函數(shù)導(dǎo)致的程序隱患。本方法已經(jīng)成功運(yùn)用到固態(tài)物料鐵品位檢測儀的產(chǎn)品中。

      1 應(yīng)用介紹

      目前較為流行的控制器包括單片機(jī)、ARM、DSP等,利用有限的存儲空間和設(shè)計(jì)資源,提高嵌入式軟件的設(shè)計(jì)方法,減少數(shù)據(jù)結(jié)構(gòu)冗余,提高程序效率是提高軟件設(shè)計(jì)穩(wěn)定性的重要方法。

      本文利用一個(gè)簡單的硬件環(huán)境實(shí)現(xiàn)靜態(tài)物料移動(dòng)平臺的功能。包括利用電機(jī)控制、顯示、按鍵控制、I/O等硬件外設(shè),實(shí)現(xiàn)電機(jī)軌跡的返回原點(diǎn)、方向控制、功能控制、菜單顯示、I/O檢測等功能。其基本功能如下。

      (1)功能介紹。

      “X軸正”:通過查詢X軸正索引值,找到需要操作的函數(shù)指針,并執(zhí)行相應(yīng)移動(dòng)。

      “X軸負(fù)”:通過查詢X軸負(fù)索引值,找到需要操作的函數(shù)指針,并執(zhí)行相應(yīng)移動(dòng)。

      “Y軸正”:通過查詢Y軸正索引值,找到需要操作的函數(shù)指針,并執(zhí)行相應(yīng)移動(dòng)。

      “Y軸負(fù)”:通過查詢Y軸負(fù)索引值,找到需要操作的函數(shù)指針,并執(zhí)行相應(yīng)移動(dòng)。

      “復(fù)位”:通過查詢復(fù)位索引值,找到需要操作的函數(shù)指針,并執(zhí)行相應(yīng)移動(dòng)。

      “停止”:通過查詢停止索引值,找到需要操作的函數(shù)指針,并執(zhí)行相應(yīng)移動(dòng)。

      (2)液晶顯示。

      執(zhí)行相應(yīng)操作后,在液晶顯示屏中,顯示對應(yīng)的操作。

      (3)I/O檢測。

      檢測接近開關(guān)狀態(tài),實(shí)現(xiàn)原點(diǎn)復(fù)位操作。

      本系統(tǒng)相關(guān)底層驅(qū)動(dòng)程序,包括I/O檢測、顯示屏顯示、電機(jī)控制等程序已經(jīng)測試完成。

      2 軟件結(jié)構(gòu)設(shè)計(jì)

      索引查詢方式的層次化軟件設(shè)計(jì)結(jié)構(gòu)是根據(jù)結(jié)構(gòu)體加函數(shù)指針實(shí)現(xiàn)的。結(jié)構(gòu)體變量IndexlistStruct,并在結(jié)構(gòu)體中的定義不同功能下的索引號IndexState,并建立對于電機(jī)運(yùn)行軌跡的索引號,以及函數(shù)指針變量,指向需下一步操作所需執(zhí)行的函數(shù)。

      底層驅(qū)動(dòng)函數(shù)名如下所示:

      void I_Ocheck(void); //采樣函數(shù) void XPosMove(void); //左移函數(shù)

      void XNegMove(void); //右移函數(shù) void YPosMove(void); //加法函數(shù)

      void YNegMove(void); //減法函數(shù) void ResetMove(void); //菜單函數(shù)

      void StopMove(void); //返回函數(shù)

      結(jié)構(gòu)體定義根據(jù)需要對數(shù)據(jù)類型進(jìn)行定義,本文使用無符號整形變量。結(jié)構(gòu)體所示如下:

      typedef struct

      {uint8 IndexState; //當(dāng)前狀態(tài)索引 uint8 XPosState;//按“向左”鍵時(shí)轉(zhuǎn)向的索引

      uint8 XNegState;//按“向右”鍵時(shí)轉(zhuǎn)向的索引uint8 YPosState; //按“向上”鍵時(shí)轉(zhuǎn)向的索引 uint8 YNegState;//按“向下”鍵時(shí)轉(zhuǎn)向的索引 uint8 ResetState; //按“菜單”鍵時(shí)轉(zhuǎn)向的索引 uint8 StopMoveState; //按“退出”鍵時(shí)轉(zhuǎn)向的索引 void (*DealOperate);//當(dāng)前狀態(tài)應(yīng)該執(zhí)行的功能操作} IndexlistStruct; IndexlistStruct結(jié)構(gòu)體需要建立一個(gè)數(shù)組構(gòu)成菜單索引號,包括同一驅(qū)動(dòng)函數(shù)不同層次下的下一級指向的索引號和每個(gè)獨(dú)立操作的底層驅(qū)動(dòng)函數(shù)的函數(shù)指針,共同組成了一個(gè)“標(biāo)簽”,通過同層次上的索引號,電機(jī)控制的X軸正、X軸負(fù)、Y軸正、Y軸負(fù)4個(gè)方向的運(yùn)動(dòng)軌跡就可以依據(jù)同級菜單的索引號找到下一級next_index索引號,并通過更新next_index索引號,并根據(jù)next_index對應(yīng)的*DealOperate()函數(shù)的操作號,執(zhí)行DealOperate()函數(shù)。不同功能函數(shù)對應(yīng)的索引號和層數(shù)數(shù)通過Sizeofmenu的具體操作值來定義。如下所示為具體的設(shè)計(jì)方法:

      IndexlistStruct code IndexTab[Sizeofmenu]=

      {{0,0,1,2,3,4,5,(*XPosMove)},//X軸正 {1,0,1,2,3,4,5,(*XNegMove)}, //X軸負(fù)

      {2,0,1,2,3,4,5,(*YPosMove)}, //Y軸正 {3,0,1,2,3,4,5,(*YNegMove)},//Y軸負(fù)

      {4,0,1,2,3,4,5,(*ResetMove)}, //復(fù)位 {5,0,1,2,3,4,5,(*StopMove)} //停止

      ……}

      在設(shè)計(jì)過程中可以把結(jié)構(gòu)體數(shù)組放在程序代碼的code區(qū),這樣在建立大體量的多層次結(jié)構(gòu)索引時(shí)可以減少了內(nèi)存的使用。另外可根據(jù)需要優(yōu)化菜單的層數(shù)。如下是通過查詢方式更新索引號并執(zhí)行相應(yīng)函數(shù)指針的操作:

      //錯(cuò)誤處理返回主菜單 break; }

      DealOperateFunc=IndexTab[next_index].DealOperate; (*DealOperateFunc)(); //執(zhí)行需要處理的操作 }綜上所述,通過建立結(jié)構(gòu)體變量實(shí)現(xiàn)對驅(qū)動(dòng)函數(shù)的說明,構(gòu)建包括索引號及函數(shù)指針的數(shù)組菜單,通過查詢方式,更新不同操作的索引號,可以通過預(yù)先設(shè)計(jì)的功能順序,實(shí)現(xiàn)不同函數(shù)功能,不同函數(shù)調(diào)用的交叉設(shè)計(jì)。在軟件設(shè)計(jì)上,減少了多次調(diào)用函數(shù)的冗余設(shè)計(jì),減少了C語言執(zhí)行過程中的邏輯錯(cuò)誤,提高了設(shè)計(jì)的重構(gòu)性,方便地實(shí)現(xiàn)了在函數(shù)調(diào)用上的復(fù)雜性。

      3 結(jié)語

      產(chǎn)品設(shè)計(jì)中針對硬件系統(tǒng)和嵌入式軟件系統(tǒng)的設(shè)計(jì)體量平衡是提高產(chǎn)品性能的重要指標(biāo),應(yīng)避免“頭大腳輕”。本文介紹的基于建立索引查詢方式實(shí)現(xiàn)層次化的嵌入式軟件設(shè)計(jì)方法,能夠更好地平衡軟件設(shè)計(jì)結(jié)構(gòu),提高軟件設(shè)計(jì)效率,其可移植性和可重構(gòu)性,也給在不同硬件系統(tǒng)平臺上查詢帶來了方便。

      參考文獻(xiàn)

      [1] 楊智明.C語言指針使用分析[J].保山學(xué)院學(xué)報(bào),2012,31 (2):67-70.

      [2] 夏偉偉.C語言指針用法的探討[J].電腦編程技巧與維護(hù), 2014(21):12-13.

      [3] 華玉明.51單片機(jī)C語言模塊化多文件編程方法探討[J].吉林廣播電視大學(xué)學(xué)報(bào),2014(10):11-12.endprint

      猜你喜歡
      嵌入式軟件層次化
      面向量化分塊壓縮感知的區(qū)域?qū)哟位A(yù)測編碼
      基于人工智能的模塊化嵌入式軟件開發(fā)研究
      法律德語翻譯的層次化策略——以法律判決書的評論性文本翻譯為例
      實(shí)時(shí)嵌入式軟件的測試技術(shù)
      電子測試(2018年10期)2018-06-26 05:54:08
      全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
      電子制作(2017年17期)2017-12-18 06:40:56
      紐加德“層次化結(jié)構(gòu)”配器技法研究(上)
      樂府新聲(2017年1期)2017-05-17 06:06:22
      鐵路傳送網(wǎng)OTN設(shè)備互聯(lián)互通開銷層次化處理研究
      基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
      航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
      艦船系統(tǒng)間電磁兼容性的層次化優(yōu)化方法
      准格尔旗| 永宁县| 思南县| 台北县| 临沂市| 玉树县| 白河县| 宜春市| 正安县| 武定县| 博兴县| 松阳县| 东宁县| 兴城市| 朝阳区| 延长县| 宜城市| 土默特左旗| 威宁| 五河县| 六枝特区| 廉江市| 永和县| 阿克陶县| 永丰县| 交城县| 古田县| 蓬溪县| 贵德县| 资溪县| 绿春县| 忻城县| 高邮市| 新巴尔虎右旗| 涞源县| 焦作市| 上蔡县| 沅江市| 永嘉县| 松江区| 宁强县|