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