本發(fā)明屬于計(jì)算機(jī)控制技術(shù)領(lǐng)域,具體涉及一種共享內(nèi)存的嵌入式軟件接口設(shè)計(jì)方法,能解耦應(yīng)用層軟件和硬件或外部總線之間的關(guān)系。
背景技術(shù):
大部分的嵌入式軟件都過分依賴硬件,從而導(dǎo)致軟件的可移植性比較差。而對(duì)于嵌入式軟件來說,有一大部分的工作都是和硬件在進(jìn)行數(shù)據(jù)交互,那么采取何種行之有效的方法,可以對(duì)嵌入式軟件的接口數(shù)據(jù)進(jìn)行統(tǒng)一的管理,也就成了亟待解決的問題。
在嵌入式軟件中,應(yīng)用層軟件通常難以進(jìn)行項(xiàng)目之間的復(fù)用,原因是每個(gè)軟件項(xiàng)目接口部分都會(huì)不盡相同。如果將應(yīng)用層軟件和接口軟件交織在一起,則會(huì)發(fā)現(xiàn)每個(gè)項(xiàng)目都需要對(duì)軟件進(jìn)行大幅度的更改,尤其是和接口數(shù)據(jù)相關(guān)的部分。如果存在一種軟件接口的設(shè)計(jì),將嵌入式應(yīng)用層軟件和硬件地址或總線進(jìn)行剝離,接口軟件專門負(fù)責(zé)和外設(shè)、硬件地址或總線數(shù)據(jù)交互,而應(yīng)用層軟件不再和硬件地址或總線進(jìn)行數(shù)據(jù)交互,則在一定程度上可以解耦嵌入式應(yīng)用層軟件和硬件地址或總線之間的關(guān)系。
同時(shí),對(duì)于嵌入式軟件而言,在應(yīng)用層軟件計(jì)算過程中,難免也會(huì)產(chǎn)生很多的中間變量,產(chǎn)生這些中間變量的應(yīng)用可能各不相同,從而數(shù)據(jù)的存放格式也會(huì)不盡相同。對(duì)于該部分中間變量的數(shù)據(jù)進(jìn)行存取,就會(huì)有很多種方式,這樣無疑增加了編程人員的工作難度。
圖1顯示的是原始的嵌入式應(yīng)用層軟件和硬件地址或總線數(shù)據(jù)的交互模式??梢钥闯鰬?yīng)用層軟件需要和硬件設(shè)備或總線每周期進(jìn)行交互,不同的項(xiàng)目,就 會(huì)使得軟件的應(yīng)用層移植性較差,同時(shí),不利于接口數(shù)據(jù)的統(tǒng)一管理。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是,能夠?qū)崿F(xiàn)嵌入式應(yīng)用層軟件和硬件設(shè)備或外部總線之間解耦合,從而使得應(yīng)用層軟件不再和硬件地址或外部總線直接交互,進(jìn)一步提高應(yīng)用層軟件的可移植性。
綜合以上提出的問題,我們需要提出一種方法,在嵌入式軟件的設(shè)計(jì)過程中,應(yīng)用層軟件所需要和產(chǎn)生的數(shù)據(jù)不再出現(xiàn)在應(yīng)用層里,而是專門去一個(gè)共享內(nèi)存數(shù)據(jù)字典池里存取,于此同時(shí),共享內(nèi)存數(shù)據(jù)字典池的數(shù)據(jù)都統(tǒng)一管理,這樣一來就可以實(shí)現(xiàn)嵌入式應(yīng)用層軟件和硬件設(shè)備的接耦合,并提高編程效率。
本發(fā)明中的嵌入式軟件接口的設(shè)計(jì)方法,采用共享內(nèi)存數(shù)據(jù)字典池作為載體,并包括以下步驟:
步驟1.建立硬件地址或總線的數(shù)據(jù)和共享內(nèi)存數(shù)據(jù)數(shù)據(jù)字典池的索引
共享內(nèi)存數(shù)組字典池的地址分配,將輸入/輸出硬件地址或總線數(shù)據(jù)分配到共享內(nèi)存數(shù)據(jù)字典池中的固定地址;對(duì)于輸入/輸出硬件地址或總線的數(shù)據(jù),通過配置文件和共享內(nèi)存數(shù)據(jù)字典池建立對(duì)應(yīng)關(guān)系;該配置文件存放的是輸入/輸出硬件地址或總線的數(shù)據(jù)和共享內(nèi)存數(shù)據(jù)字典池中數(shù)據(jù)的對(duì)應(yīng)關(guān)系,即數(shù)據(jù)索引,數(shù)據(jù)索引包括模擬量、離散量、整形、浮點(diǎn)型數(shù)據(jù)的輸入/輸出索引;
步驟2.建立應(yīng)用層軟件的數(shù)據(jù)和共享內(nèi)存數(shù)據(jù)字典池的交互
應(yīng)用層軟件和共享內(nèi)存數(shù)據(jù)字典池通過函數(shù)或宏,實(shí)現(xiàn)交互數(shù)據(jù)的讀取或存放,并進(jìn)一步進(jìn)行計(jì)算。
本發(fā)明具有的優(yōu)點(diǎn)和有益效果:實(shí)現(xiàn)了嵌入式應(yīng)用層軟件和硬件地址或總線數(shù)據(jù)的解耦合,使用共享內(nèi)存數(shù)據(jù)字典池的方法,對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一管理,可 以進(jìn)一步提高數(shù)據(jù)的一致性,可以采用工具生成配置文件,從而提高程序設(shè)計(jì)人員的工作效率。
附圖說明
圖1是原始的嵌入式軟件接口數(shù)據(jù)的設(shè)計(jì)模式;
圖2是本發(fā)明的嵌入式軟件接口數(shù)據(jù)的設(shè)計(jì)模式;
圖3是本發(fā)明的一個(gè)應(yīng)用實(shí)例模型。
具體實(shí)施方式
使用本發(fā)明時(shí),首先需要建立一個(gè)共享內(nèi)存數(shù)據(jù)字典池,如圖2中,共享內(nèi)存數(shù)據(jù)字典池中包含了應(yīng)用層軟件所輸入輸出所需要的所有數(shù)據(jù),還包括產(chǎn)生的中間變量。
接下來形成一個(gè)配置文件,該配置文件是將硬件地址或總線數(shù)據(jù)和共享內(nèi)存中定義的數(shù)據(jù)對(duì)應(yīng)起來。這樣通過專用的數(shù)據(jù)接收方法,硬件地址或總線數(shù)據(jù)直接放入共享內(nèi)存中統(tǒng)一管理起來,這個(gè)步驟可以通過工具來實(shí)現(xiàn)。
接下來對(duì)于嵌入式應(yīng)用層軟件來說,與之交互的就只剩下共享內(nèi)存的數(shù)據(jù)了。共享內(nèi)存數(shù)據(jù)可以分成整形和浮點(diǎn)型數(shù)據(jù)等,數(shù)據(jù)的整形和浮點(diǎn)型也都滿足對(duì)應(yīng)關(guān)系,從而滿足應(yīng)用層軟件所需要的輸入輸出。
嵌入式應(yīng)用層軟件獲取自己需要的數(shù)據(jù),運(yùn)算之后將運(yùn)算結(jié)果或產(chǎn)生的中間變量在一一放置在共享內(nèi)存中,需要輸出的數(shù)據(jù)則通過配置文件和硬件地址或總線進(jìn)行關(guān)聯(lián),從而實(shí)現(xiàn)數(shù)據(jù)的輸出。
完成以上步驟之后,就可以實(shí)現(xiàn)基于共享內(nèi)存的嵌入式軟件接口設(shè)計(jì)方法。
實(shí)施例
應(yīng)用場(chǎng)景如下:在基于DSP的伺服控制中,一個(gè)伺服的系統(tǒng)軟件可以控制 多個(gè)舵機(jī)(本例中控制兩個(gè)舵機(jī))。對(duì)于舵機(jī)的控制來說,首先需要舵機(jī)控制的數(shù)據(jù),也就是舵機(jī)的相關(guān)信息,其次需要舵機(jī)的控制命令,最后將舵機(jī)控制的狀態(tài)再匯報(bào)給上位的系統(tǒng)。
對(duì)于伺服的軟件,采用基于共享內(nèi)存的方法進(jìn)行接口部分的設(shè)計(jì),如圖3所示。首先建立共享內(nèi)存數(shù)據(jù)字典池。在該實(shí)例中,共享內(nèi)存的數(shù)據(jù)字典池包括兩部分,分別是整形的共享內(nèi)存數(shù)據(jù)字典池和浮點(diǎn)型的共享內(nèi)存數(shù)據(jù)字典池。對(duì)于定義好的共享內(nèi)存數(shù)據(jù)池,然后通過工具生成IO_Config文件,將FPGA或硬件設(shè)備的數(shù)據(jù)地址和共享內(nèi)存數(shù)據(jù)池關(guān)聯(lián)起來,通過數(shù)據(jù)的采集就可以將FPGA或硬件設(shè)備上的數(shù)據(jù)放置到整形的共享內(nèi)存中去,然后將部分需要轉(zhuǎn)換成浮點(diǎn)型的數(shù)據(jù)進(jìn)行浮點(diǎn)型的轉(zhuǎn)化,存放在浮點(diǎn)型的共享內(nèi)存數(shù)據(jù)字典池中去,這樣就實(shí)現(xiàn)了共享內(nèi)存數(shù)據(jù)字典池和FPGA或硬件設(shè)備的數(shù)據(jù)交互。
整形和浮點(diǎn)型的共享內(nèi)存數(shù)據(jù)池的內(nèi)容都包括舵機(jī)1、舵機(jī)2和系統(tǒng)相關(guān)的信息。對(duì)于伺服的應(yīng)用層軟件,直接從共享內(nèi)存的數(shù)據(jù)字典池中取數(shù)據(jù)進(jìn)行運(yùn)算,將最終的結(jié)果在重新填入共享內(nèi)存數(shù)據(jù)池中,從而通過配置文件輸出到FPGA或硬件設(shè)備中去,完成整個(gè)伺服軟件的輸入輸出過程。