咨詢電話
ENGLISH0755-88840386發(fā)布時(shí)間:2021-07-06 14:52:41 |來(lái)源:網(wǎng)絡(luò)轉(zhuǎn)載
嵌入式稱重物聯(lián)網(wǎng)的開(kāi)發(fā),包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩個(gè)過(guò)程。近年來(lái),隨著微控制器MCU)內(nèi)部Flash存儲(chǔ)器可靠性的提高以及擦除/寫入方法的變化,內(nèi)部RAM及Flash存儲(chǔ)器容量的增大,以及外部模塊內(nèi)置化程度的提高,設(shè)計(jì)復(fù)雜性、設(shè)計(jì)規(guī)模及開(kāi)發(fā)手段已經(jīng)發(fā)生了根本變期化,使得硬件設(shè)計(jì)變得越來(lái)越復(fù)雜,軟件的份量也急劇增加。但是,我們的開(kāi)發(fā)方法卻顯得比較落后。如在硬件設(shè)計(jì)時(shí),開(kāi)發(fā)人員缺乏統(tǒng)一的設(shè)計(jì)規(guī)范,往往是憑個(gè)人工作經(jīng)驗(yàn)和習(xí)慣的積累進(jìn)行設(shè)計(jì),當(dāng)開(kāi)發(fā)完一個(gè)嵌入式應(yīng)用系統(tǒng)再進(jìn)行下一個(gè)應(yīng)用系統(tǒng)開(kāi)發(fā)時(shí),硬件電路原理圖往往需要從零開(kāi)始,重新繪制,造成時(shí)間和精力的浪費(fèi),而且還容易出錯(cuò);在軟件開(kāi)發(fā)時(shí),開(kāi)發(fā)人員缺乏軟件工程的思想支撐,缺少標(biāo)準(zhǔn)化、文檔化的管理,軟件的通用性、可移植性和可復(fù)用性較差,給開(kāi)發(fā)人員之間的交流及日后系統(tǒng)的維護(hù)帶來(lái)很大的困難。以上問(wèn)題導(dǎo)致的結(jié)果是系統(tǒng)開(kāi)發(fā)周期長(zhǎng),效率低?;跇?gòu)件重用技術(shù)的開(kāi)發(fā)思想,在一定程度上能解決這些問(wèn)題。
一、構(gòu)件重用技術(shù)
(一)構(gòu)件與構(gòu)件模型
構(gòu)件是系統(tǒng)中實(shí)際存在的可更換部分,它實(shí)現(xiàn)特定的功能,符合一套接口標(biāo)準(zhǔn)并實(shí)現(xiàn)一組接口。構(gòu)件代表系統(tǒng)中的一部分物理實(shí)施,包括軟件代碼(源代碼、二進(jìn)制代碼或可執(zhí)行代碼)或其等價(jià)物(如腳本或命令文件)。
構(gòu)件模型(model)是對(duì)構(gòu)件本質(zhì)特征的抽象描述。目前,國(guó)際上已經(jīng)形成了許多構(gòu)件模型,這些模型的目標(biāo)和用途各不相同。國(guó)內(nèi)許多學(xué)者在構(gòu)件模型的研究方面做了不少工作,取得了一定成績(jī),其中較為突出的是北京大學(xué)楊芙清院士等人提出的“青鳥(niǎo)構(gòu)件模型”,如圖1所示,該模型充分吸收了國(guó)內(nèi)外構(gòu)件模型的優(yōu)點(diǎn),并與它們相容,它由外部接口(interface)與內(nèi)部結(jié)構(gòu)兩部分組成。
(二)構(gòu)件的獲取
可重用信息具有領(lǐng)域特性,領(lǐng)域具有內(nèi)聚性
(cohesion)和穩(wěn)定性(stability)。領(lǐng)域是一組具有相似或相近軟件需求的應(yīng)用系統(tǒng)所覆蓋的功能區(qū)域,領(lǐng)域工程(domainengineering)是一組相似或相近系統(tǒng)的應(yīng)用工程(applicationengineering)建立基本能力和必備基礎(chǔ)的過(guò)程。領(lǐng)域工程過(guò)程可劃分為領(lǐng)域分析、領(lǐng)域設(shè)計(jì)和領(lǐng)域?qū)崿F(xiàn)等多個(gè)活動(dòng),其中的活動(dòng)與結(jié)果,如圖2所示。
在建立基于構(gòu)件的軟件開(kāi)發(fā)(CBSD,Compo-nent-BasedSoftwareDevelopmen)t中,構(gòu)件獲取可以有多種不同形式,如:
(1)從現(xiàn)有構(gòu)件中獲得符合要求的構(gòu)件;
(2)通過(guò)遺留工程(Legacyengineering),將具有潛在重用價(jià)值的構(gòu)件提取出來(lái),得到可重用的構(gòu)件;
(3)從市場(chǎng)上購(gòu)買現(xiàn)成的構(gòu)件;
(4)開(kāi)發(fā)新的符合要求的構(gòu)件。
(三)構(gòu)件庫(kù)
在構(gòu)件重用過(guò)程中,建立構(gòu)件庫(kù)以進(jìn)行可重用構(gòu)件的推廣和使用,為后繼嵌入式產(chǎn)品的開(kāi)發(fā)提供良好的可重用基礎(chǔ)。構(gòu)件庫(kù)的組織應(yīng)方便構(gòu)件的存儲(chǔ)和檢索。可重用技術(shù)對(duì)構(gòu)件庫(kù)組織方法的要求是:
(1)支持構(gòu)件庫(kù)的各種維護(hù)動(dòng)作,如增加、刪除以及修改構(gòu)件,盡量不要影響構(gòu)件庫(kù)的結(jié)構(gòu);
(2)不僅要支持精確匹配,還要支持相似構(gòu)件的查找;
(3)不僅能進(jìn)行簡(jiǎn)單的語(yǔ)法匹配,而且能夠查找在功能或行為方面等價(jià)或相似的構(gòu)件;
(4)對(duì)應(yīng)用領(lǐng)域具有較強(qiáng)的描述能力和較好的描述精度;
(5)庫(kù)管理員和用戶容易使用。
目前,已有的構(gòu)件分類方法可以歸納為三類,分別是關(guān)鍵字分類法、刻面分類法和超文本分類法。構(gòu)件庫(kù)的關(guān)鍵字分類結(jié)構(gòu)示例,如圖3所示,它支持圖形用戶界面設(shè)計(jì)。
(四)構(gòu)件的體系結(jié)構(gòu)
在軟件設(shè)計(jì)時(shí)采用層次式軟件體系結(jié)構(gòu),將產(chǎn)品的系統(tǒng)結(jié)構(gòu)模型定義為四個(gè)層次,如圖4所示。
通過(guò)系統(tǒng)構(gòu)件的分層,將頻繁變動(dòng)的業(yè)務(wù)邏輯層分離出來(lái),實(shí)現(xiàn)通用類構(gòu)件的完全重用,并且在各個(gè)模塊之間設(shè)計(jì)統(tǒng)一的接口,當(dāng)某一模塊業(yè)務(wù)邏輯改變時(shí),使系統(tǒng)之間的影響最小。系統(tǒng)實(shí)現(xiàn)即插即用(plugandplay),容易升級(jí)。
二、嵌入式稱重物聯(lián)網(wǎng)的構(gòu)件化設(shè)計(jì)
嵌入式稱重物聯(lián)網(wǎng)是軟件與硬件的綜合體,硬件設(shè)計(jì)和軟件設(shè)計(jì)相輔相成。嵌入式系統(tǒng)中的驅(qū)動(dòng)程序是直接工作在各種硬件上的軟件,是硬件和高層軟件之間的橋梁。正是通過(guò)驅(qū)動(dòng)程序,各種硬件設(shè)備才能正常運(yùn)行,達(dá)到既定的工作效果。
(一)嵌入式稱重物聯(lián)網(wǎng)組成結(jié)構(gòu)
嵌入式稱重物聯(lián)網(wǎng)主要由秤臺(tái)、數(shù)字稱重傳感器、網(wǎng)絡(luò)型稱重顯示控制儀、PC機(jī)、大屏幕顯示器和打印機(jī)等硬件組成,其組成結(jié)構(gòu)示意圖,如圖5所示。
(1)數(shù)字式稱重傳感器(簡(jiǎn)稱“數(shù)字傳感器”),是嵌入式稱重物聯(lián)網(wǎng)的關(guān)鍵部件,它的作用是將被稱物體的重量轉(zhuǎn)換成數(shù)字信號(hào)傳給網(wǎng)絡(luò)型稱重顯示儀表,本系統(tǒng)采用最新型的數(shù)字傳感器,它具有稱量精度高、抗干擾、防雷擊、防作弊能力強(qiáng)、可在各種惡劣環(huán)境下工作等優(yōu)點(diǎn)。
網(wǎng)絡(luò)型稱重顯示儀具有界面圖形化、接口網(wǎng)絡(luò)化、存儲(chǔ)海量化、格式多樣化、維護(hù)簡(jiǎn)單化等特點(diǎn),采用了不同于傳統(tǒng)儀表的設(shè)計(jì)方法,在設(shè)計(jì)中間采用了一些最新的技術(shù),如智能與診斷、網(wǎng)絡(luò)通訊識(shí)別等,使整個(gè)系統(tǒng)能達(dá)到最高的精度及超低的故障率。它的核心部件采用高端32位MCU,具有4GB的地址空間,能在單片內(nèi)提供以太網(wǎng)控制器及以太網(wǎng)物理層和閃存,它在遠(yuǎn)程數(shù)據(jù)采集、以太網(wǎng)供電等嵌入式物聯(lián)網(wǎng)中得到了廣泛的應(yīng)用。
(3)網(wǎng)絡(luò)接口構(gòu)件是指實(shí)現(xiàn)異步串行通信的模塊,又稱為串行通信接口(SerialCommunicationInterface,SC)I,它可以將終端或個(gè)人計(jì)算機(jī)連接到MCU,也可以將幾個(gè)分散的MCU連接成通信網(wǎng)絡(luò)。在臺(tái)式計(jì)算機(jī)上帶的兩個(gè)串口,COM1口和COM2口,部分筆記本上也帶有串口COM。網(wǎng)絡(luò)接口構(gòu)件,如圖6所示。
(二)嵌入式硬件構(gòu)件和軟件構(gòu)件的層次模型嵌入式軟件構(gòu)件(EmbeddedSoftwareCompo-nent,ESC)是實(shí)現(xiàn)一定嵌入式功能的一組封裝的、規(guī)范的、可重用的、具有嵌入特性的軟件單元,是組織嵌入式系統(tǒng)的功能單位。
嵌入式軟件結(jié)構(gòu)分為高層軟件結(jié)構(gòu)和底層軟件結(jié)構(gòu)(以下簡(jiǎn)稱為高層構(gòu)件和底層構(gòu)件)。高層構(gòu)件與硬件無(wú)關(guān),而底層構(gòu)件與硬件密不可分,是硬件驅(qū)動(dòng)程序的封裝。
在硬件構(gòu)件中,核心構(gòu)件為MCU的最小系統(tǒng)。通常,MCU內(nèi)部包含GPIO(即通用I/O)口和一些內(nèi)置功能模塊,我們將通用I/O口的驅(qū)動(dòng)程序封裝為GPIO構(gòu)件,各內(nèi)置功能模塊的驅(qū)動(dòng)程序封裝為功能構(gòu)件,相對(duì)于核心構(gòu)件而言,中間構(gòu)件和終端構(gòu)件是核心構(gòu)件的“外設(shè)”,由這些“外設(shè)”的驅(qū)動(dòng)程序封裝而成的軟件構(gòu)件稱為底層外設(shè)構(gòu)件。注意,并不是所有的中間構(gòu)件和終端構(gòu)件都可以作為編程對(duì)象。例如鍵盤、LED、LCD等硬件構(gòu)件與編程有關(guān),而電平轉(zhuǎn)換硬件構(gòu)件就與編程無(wú)關(guān),因而不存在相應(yīng)的底層驅(qū)動(dòng)程序,當(dāng)然也就沒(méi)有相應(yīng)的軟件構(gòu)件。嵌入式硬件構(gòu)件與軟件構(gòu)件的層次模型,如圖7所示。
底層外設(shè)構(gòu)件可以調(diào)用底層內(nèi)部控件,如LCD構(gòu)件可以調(diào)用GPIO構(gòu)件,PCF8563構(gòu)件(時(shí)鐘構(gòu)件)可以調(diào)用IZC構(gòu)件等。高層構(gòu)件可以調(diào)用底層外設(shè)構(gòu)件和底層內(nèi)部構(gòu)件中的功能構(gòu)件,而不能直接調(diào)用GPIO構(gòu)件。另外,考慮到幾乎所有的底層內(nèi)部構(gòu)件都涉及到MCU各種寄存器的使用,因此將MCU的所有寄存器定義組織在一起,形成MCU頭文件,以便其它構(gòu)件頭文件中包含該頭文件。
(三)底層構(gòu)件的實(shí)現(xiàn)方法與編程思想
(1)底層構(gòu)件的組成
底層構(gòu)件是與硬件直接打交道的軟件,由頭文件和源程序兩部分組成。
頭文件中的主要內(nèi)容有:包含下層頭文件的#include語(yǔ)句、用以描述構(gòu)件屬性的宏定義語(yǔ)句以及對(duì)外接口函數(shù)原型說(shuō)明。在頭文件中使用函數(shù)原型,對(duì)于建立代碼模塊和外部接口的規(guī)范,便于他人使用,都是很有幫助的。使用這些函數(shù)的用戶,不需要查找源代碼去了解參數(shù)的具體類型,直接查看函數(shù)原型即可。
源程序文件中存放構(gòu)件的內(nèi)部函數(shù)和外部函數(shù)的定義,即函數(shù)的實(shí)現(xiàn)代碼,以完成函數(shù)所要實(shí)現(xiàn)的功能。
在對(duì)底層構(gòu)件進(jìn)行設(shè)計(jì)時(shí),最關(guān)鍵的工作是要對(duì)構(gòu)件的共性和個(gè)性進(jìn)行分析,抽取出構(gòu)件的屬性和對(duì)外接口函數(shù)。盡可能做到:當(dāng)一個(gè)底層構(gòu)件應(yīng)用到不同系統(tǒng)中時(shí),僅需修改構(gòu)件頭文件,對(duì)于構(gòu)件的源程序文件則不必修改或改動(dòng)很小。
(2)編寫構(gòu)件時(shí)注意事項(xiàng)
1)構(gòu)件的頭文件和源程序文件的主文件名一致,且為構(gòu)件名;
2)屬性和操作的命名統(tǒng)一以構(gòu)件名開(kāi)頭。這樣的好處是:當(dāng)使用底層構(gòu)件組裝軟件系統(tǒng)時(shí),避免構(gòu)件之間出現(xiàn)同名現(xiàn)象。同時(shí),名稱要使人有“顧名思義”的效果;
3)對(duì)MCU內(nèi)的模塊寄存器名和端口名進(jìn)行重定義,在其他的代碼里都將使用宏名對(duì)模塊寄存器端口進(jìn)行操作。這樣,當(dāng)?shù)讓域?qū)動(dòng)程序移植到其他MCU時(shí),只要修改重定義語(yǔ)句即可;
4)內(nèi)部函數(shù)與外部函數(shù)要設(shè)計(jì)合理,函數(shù)參數(shù)個(gè)數(shù)及類型要考慮全面。內(nèi)部函數(shù)僅提供給同一構(gòu)件中的其他內(nèi)部函數(shù)或外部函數(shù)調(diào)用,作用域僅限于定義該函數(shù)的文件。外部函數(shù)是對(duì)外接口函數(shù),供上層應(yīng)用程序調(diào)用。在定義外部函數(shù)時(shí),應(yīng)該對(duì)函數(shù)名、函數(shù)功能、入口參數(shù)、函數(shù)回值、使用說(shuō)明、函數(shù)適用范圍等進(jìn)行詳細(xì)描以增強(qiáng)程序的可讀性。上層應(yīng)用程序不能直接對(duì)構(gòu)件的屬性進(jìn)行讀取或設(shè)置,必須借助于該構(gòu)件提供的接口操作函數(shù)來(lái)實(shí)現(xiàn);
5)應(yīng)用程序在使用底層構(gòu)件時(shí),嚴(yán)格禁止通過(guò)全局變量來(lái)傳遞參數(shù),所有的數(shù)據(jù)傳遞都要通過(guò)函數(shù)的形式參數(shù)來(lái)接收。這樣做不但使得接口簡(jiǎn)捷,更加避免了全局變量可能引發(fā)的安全隱患。
(四)軟件構(gòu)件設(shè)計(jì)
軟件構(gòu)件設(shè)計(jì)包括低端軟件設(shè)計(jì)和高端軟件設(shè)計(jì)兩部分。
(1)底層構(gòu)件設(shè)計(jì)
底層構(gòu)件是硬件的驅(qū)動(dòng)程序,是構(gòu)建低端軟件的基石。在進(jìn)行低端軟件設(shè)計(jì)時(shí),首先要結(jié)合軟件所要實(shí)現(xiàn)的功能,按照構(gòu)件化思想設(shè)計(jì)并規(guī)劃底層構(gòu)件。本系統(tǒng)涉及到的底層構(gòu)件有:
1)通用I/O構(gòu)件:初始化端口,設(shè)置端口狀態(tài)以及獲取端口狀態(tài)等;
2)指示燈(Light)構(gòu)件:點(diǎn)亮火熄滅出錯(cuò)指示燈、運(yùn)行指示燈;
3)Flash構(gòu)件:將指定內(nèi)容寫入Flash的指定單元中,用于設(shè)置系統(tǒng)工作參數(shù);
4)以太網(wǎng)物理層收/發(fā)器(EPHY)構(gòu)件:初始化EPHY模塊,獲取網(wǎng)絡(luò)連接狀態(tài);
5)快速以太網(wǎng)控制器(FEC)構(gòu)件:初始化FEC模塊、發(fā)送以太幀、接收以太幀;
6)定時(shí)器(GPT)構(gòu)件:初始化定時(shí)器;
7)模數(shù)轉(zhuǎn)換(AD)構(gòu)件:初始化A/D轉(zhuǎn)換模塊、啟動(dòng)A/D轉(zhuǎn)換、均值濾波等;
8)鍵盤(KeyBoard)構(gòu)件:掃描并獲取鍵盤按鍵值;
9)液晶指示(LCD)構(gòu)件:初始化LCD、顯示字符數(shù)據(jù)等。
(2)主程序設(shè)計(jì)
低端軟件的主程序負(fù)責(zé)獲取A/D采集數(shù)據(jù),再將A/D值轉(zhuǎn)換為物理量,并在LCD顯示屏上顯示。當(dāng)檢測(cè)到用戶按鍵時(shí),根據(jù)不同的按鍵,完成不同的功能,流程如圖8所示。
(3)中斷程序設(shè)計(jì)
低端軟件的中斷程序主要響應(yīng)PC需要數(shù)據(jù)的請(qǐng)求。當(dāng)接收到PC發(fā)生的一條命令后,低端軟件進(jìn)入FEC接收中斷。在中斷服務(wù)子程序中,首先獲取接收幀內(nèi)容并分析,根據(jù)命令的不同,將相關(guān)數(shù)據(jù)組裝成以太幀,并將幀內(nèi)容寫入到FEC模塊的發(fā)送緩沖區(qū)中,然后再通過(guò)發(fā)送緩沖區(qū)描述激活寄存器TDAR將其發(fā)送出去。
(4)高端軟件設(shè)計(jì)
PC的高端軟件需要實(shí)現(xiàn)的功能是:向低端程序提出稱重?cái)?shù)據(jù)請(qǐng)求并等待接收,對(duì)接收到的數(shù)據(jù)進(jìn)行存儲(chǔ)、顯示、磅單以及報(bào)表打印等。其開(kāi)發(fā)環(huán)境使用MicrosoftVisualStudio2010,編程語(yǔ)言使用VB.NET。運(yùn)行界面如圖9所示。
三、結(jié)語(yǔ)
構(gòu)件重用技術(shù)在嵌入式稱重物聯(lián)網(wǎng)開(kāi)發(fā)中的應(yīng)用,使得整個(gè)開(kāi)發(fā)過(guò)程構(gòu)件化,減少了開(kāi)發(fā)時(shí)間、提高了開(kāi)發(fā)效率,保證了開(kāi)發(fā)質(zhì)量和產(chǎn)品的可靠性,使得應(yīng)用系統(tǒng)的開(kāi)發(fā)流程標(biāo)準(zhǔn)化、易于管理,降低了維護(hù)難度和工作量。同時(shí),也需要我們加強(qiáng)構(gòu)件庫(kù)的建設(shè)與管理,積累更多的可重用構(gòu)件,使得應(yīng)用系統(tǒng)更好更快地開(kāi)發(fā)。
本文源于網(wǎng)絡(luò)轉(zhuǎn)載,如有侵權(quán),請(qǐng)聯(lián)系刪除