999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2018-02-03 09:29:20張偉張建霍亮高巖孫天澳李旭升王云亮
科技創(chuàng)新導(dǎo)報(bào) 2017年31期

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

摘 要:本文介紹一種基于建立索引查詢方式實(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

主站蜘蛛池模板: 中文字幕欧美日韩高清| 久草性视频| 国产成人禁片在线观看| 日本高清免费不卡视频| 色呦呦手机在线精品| 一本久道热中字伊人| 国产成人综合网| 欧美在线视频a| 久久亚洲精少妇毛片午夜无码| 精品少妇人妻av无码久久| 国产香蕉97碰碰视频VA碰碰看 | 国产精品午夜福利麻豆| 伊人天堂网| 国产精品一区在线麻豆| 美女视频黄又黄又免费高清| 嫩草影院在线观看精品视频| 久久青草热| 日韩欧美高清视频| 成人毛片免费在线观看| 国模私拍一区二区三区| 精品国产免费观看| 夜夜爽免费视频| 女人18毛片久久| 国产av无码日韩av无码网站| 欧美日韩在线国产| AⅤ色综合久久天堂AV色综合| 国产精品无码在线看| AV在线天堂进入| 99精品热视频这里只有精品7| 看看一级毛片| 美女无遮挡免费视频网站| 尤物午夜福利视频| 国产精品免费p区| 波多野结衣一区二区三区四区视频| 久久中文字幕av不卡一区二区| 2021天堂在线亚洲精品专区| 中国国产A一级毛片| 国产迷奸在线看| 成人伊人色一区二区三区| 婷婷在线网站| 18黑白丝水手服自慰喷水网站| 亚洲av无码成人专区| 亚洲欧美成人影院| 91精品国产自产在线观看| 亚洲区视频在线观看| 一本大道视频精品人妻| 国产日韩精品欧美一区灰| 高清亚洲欧美在线看| 欧美三级日韩三级| 国产精品99在线观看| 亚洲成人一区二区| 久久精品娱乐亚洲领先| 在线看免费无码av天堂的| 刘亦菲一区二区在线观看| 亚洲午夜福利精品无码| 亚洲精品成人7777在线观看| 色爽网免费视频| 久久香蕉国产线看观看亚洲片| 成人午夜亚洲影视在线观看| 91精品视频网站| 2020国产精品视频| 无码不卡的中文字幕视频| 亚洲综合欧美在线一区在线播放| 国产美女无遮挡免费视频| 欧美精品三级在线| 91精品视频在线播放| 久久久久亚洲AV成人人电影软件| 亚洲男人天堂久久| 色网站在线免费观看| 久久久久无码国产精品不卡| 亚洲人成网7777777国产| 国产又大又粗又猛又爽的视频| 福利在线不卡一区| 国模沟沟一区二区三区| 欧洲精品视频在线观看| 精品国产99久久| 无码专区第一页| 日韩精品专区免费无码aⅴ| 日韩一级二级三级| 久久国产高潮流白浆免费观看 | 91青青草视频| 九九香蕉视频|