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

?

一種基于建立索引查詢方式實(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)層次化查詢方式的多級(jí)調(diào)用的軟件結(jié)構(gòu)。

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

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

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

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

1 應(yīng)用介紹

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

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

(1)功能介紹。

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

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

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

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

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

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

(2)液晶顯示。

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

(3)I/O檢測(cè)。

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

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

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)體中的定義不同功能下的索引號(hào)IndexState,并建立對(duì)于電機(jī)運(yùn)行軌跡的索引號(hào),以及函數(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ù)需要對(duì)數(shù)據(jù)類型進(jìn)行定義,本文使用無(wú)符號(hào)整形變量。結(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)成菜單索引號(hào),包括同一驅(qū)動(dòng)函數(shù)不同層次下的下一級(jí)指向的索引號(hào)和每個(gè)獨(dú)立操作的底層驅(qū)動(dòng)函數(shù)的函數(shù)指針,共同組成了一個(gè)“標(biāo)簽”,通過(guò)同層次上的索引號(hào),電機(jī)控制的X軸正、X軸負(fù)、Y軸正、Y軸負(fù)4個(gè)方向的運(yùn)動(dòng)軌跡就可以依據(jù)同級(jí)菜單的索引號(hào)找到下一級(jí)next_index索引號(hào),并通過(guò)更新next_index索引號(hào),并根據(jù)next_index對(duì)應(yīng)的*DealOperate()函數(shù)的操作號(hào),執(zhí)行DealOperate()函數(shù)。不同功能函數(shù)對(duì)應(yīng)的索引號(hào)和層數(shù)數(shù)通過(guò)Sizeofmenu的具體操作值來(lái)定義。如下所示為具體的設(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ì)過(guò)程中可以把結(jié)構(gòu)體數(shù)組放在程序代碼的code區(qū),這樣在建立大體量的多層次結(jié)構(gòu)索引時(shí)可以減少了內(nèi)存的使用。另外可根據(jù)需要優(yōu)化菜單的層數(shù)。如下是通過(guò)查詢方式更新索引號(hào)并執(zhí)行相應(yīng)函數(shù)指針的操作:

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

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

3 結(jié)語(yǔ)

產(chǎn)品設(shè)計(jì)中針對(duì)硬件系統(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)平臺(tái)上查詢帶來(lái)了方便。

參考文獻(xiàn)

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

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

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

猜你喜歡
嵌入式軟件層次化
面向量化分塊壓縮感知的區(qū)域?qū)哟位A(yù)測(cè)編碼
基于人工智能的模塊化嵌入式軟件開發(fā)研究
法律德語(yǔ)翻譯的層次化策略——以法律判決書的評(píng)論性文本翻譯為例
實(shí)時(shí)嵌入式軟件的測(cè)試技術(shù)
全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
電子制作(2017年17期)2017-12-18 06:40:56
紐加德“層次化結(jié)構(gòu)”配器技法研究(上)
鐵路傳送網(wǎng)OTN設(shè)備互聯(lián)互通開銷層次化處理研究
基于Eclipse的航天嵌入式軟件集成開發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
艦船系統(tǒng)間電磁兼容性的層次化優(yōu)化方法
天等县| 晋中市| 伊春市| 遵义县| 葫芦岛市| 桐庐县| 荃湾区| 乌拉特后旗| 临颍县| 辽阳县| 大荔县| 集安市| 无为县| 金溪县| 南华县| 丹凤县| 宁武县| 清苑县| 五常市| 德惠市| 深州市| 措勤县| 莎车县| 榆林市| 麦盖提县| 吴江市| 西城区| 吐鲁番市| 延安市| 新巴尔虎左旗| 固安县| 凭祥市| 合肥市| 张家川| 耒阳市| 定安县| 青铜峡市| 武乡县| 积石山| 彭阳县| 屏东市|