關(guān)于嵌入式程序設(shè)計思路的詳細介紹從硬件驅(qū)動層到應(yīng)用層-設(shè)計應(yīng)用_第1頁
關(guān)于嵌入式程序設(shè)計思路的詳細介紹從硬件驅(qū)動層到應(yīng)用層-設(shè)計應(yīng)用_第2頁
關(guān)于嵌入式程序設(shè)計思路的詳細介紹從硬件驅(qū)動層到應(yīng)用層-設(shè)計應(yīng)用_第3頁
關(guān)于嵌入式程序設(shè)計思路的詳細介紹從硬件驅(qū)動層到應(yīng)用層-設(shè)計應(yīng)用_第4頁
關(guān)于嵌入式程序設(shè)計思路的詳細介紹從硬件驅(qū)動層到應(yīng)用層-設(shè)計應(yīng)用_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

精品文檔-下載后可編輯關(guān)于嵌入式程序設(shè)計思路的詳細介紹,從硬件驅(qū)動層到應(yīng)用層-設(shè)計應(yīng)用要做到嵌入式應(yīng)用的代碼邏輯清晰,且避免重復(fù)的造輪子,沒有好的應(yīng)用架構(gòu)怎么行。

如果沒有好的架構(gòu),移植將會是一件很痛苦的事情。

如果沒有好的架構(gòu),復(fù)用是的難題,沒法更大限度的復(fù)用原有的代碼。

如果沒有好的架構(gòu),一旦驅(qū)動改了,所有的地方都要改,費時費力且很容易出錯。

如果沒有好的架構(gòu),應(yīng)用層中穿插著硬件驅(qū)動層的代碼,看著會是一片混亂,邏輯不清,代碼維護起來會很困難。

這里總結(jié)下我的嵌入式程序設(shè)計思路,分享出來與大家共同探討,同時也歡迎提出不同意見。

現(xiàn)在的小朋友都愛玩搭積木的游戲,一個模塊一個模塊的拼裝起來,快速組成各種不同的模型。

現(xiàn)在的產(chǎn)品設(shè)計也很少從零開始。大都復(fù)用現(xiàn)有成熟的模塊,專注于某個擅長領(lǐng)域。

我的嵌入式應(yīng)用架構(gòu)思路與此,即功能模塊設(shè)計與分層。

把API分為驅(qū)動層和應(yīng)用層API,而不是所有程序都調(diào)用驅(qū)動層API。(整個應(yīng)用中都調(diào)用驅(qū)動層API會導(dǎo)致應(yīng)用中驅(qū)動調(diào)用隨處可見,無法移植和限度的復(fù)用)

先把一個應(yīng)用進行功能模塊劃分,并對整體結(jié)構(gòu)進行分層,然后設(shè)計出功能獨立的各個模塊(如算法模塊,文件庫模塊,通信庫模塊),在模塊之上開放公共接口。

驅(qū)動層提供出公共接口供上層調(diào)用。各個功能模塊可以獨立編譯(如算法模塊純ANSIC,可在任意平臺復(fù)用),或者調(diào)用驅(qū)動層接口(文件庫模塊調(diào)用了驅(qū)動讀寫Flash),總而言之,言而總之,封裝出各個功能獨立的可復(fù)用的功能模塊。

總體分硬件驅(qū)動層--》功能模塊層--》應(yīng)用接口層--》業(yè)務(wù)邏輯層--》應(yīng)用層

總體結(jié)構(gòu)示意框圖:

應(yīng)用層,為程序的總體的運行框架,組織調(diào)用業(yè)務(wù)邏輯??梢杂媚撤N嵌入式操作系統(tǒng)實現(xiàn)幾種任務(wù)。如定時任務(wù),卡處理任務(wù),菜單任務(wù),通信任務(wù)。

業(yè)務(wù)邏輯層,如CPU卡處理,交通部卡處理,銀聯(lián)卡處理,M1卡處理,通信記錄上傳,黑名單,票價參數(shù)等。

應(yīng)用接口層,提供公共的api接口供應(yīng)用接口供上層調(diào)用。這些接口也可由下層的功能模塊開放出來,應(yīng)用接口層負責匯總。

功能模塊層,可以封裝不同的功能模塊。如算法庫,文件庫,通信庫,銀聯(lián)庫,向上提供應(yīng)用接口層的接口,向下調(diào)用驅(qū)動接口。

硬件驅(qū)動層,由各個驅(qū)動模塊組成,向上提供統(tǒng)一的接口。

遵循一些約定,

1.每個模塊提供出的接口要統(tǒng)一,后續(xù)只能增,不能改原來的接口。

2.模塊與模塊之間相互獨立,互不影響,不能相互調(diào)用,只能調(diào)用它下層的接口。

3.由模塊構(gòu)成層,層與層之間不能跨級調(diào)用。如在應(yīng)用層中不能看到直接調(diào)用驅(qū)動層的代碼。

4.模塊中又可以繼續(xù)分層,如接口層,驅(qū)動層,硬件層。

如果驅(qū)動變動了,或者換不同平臺,只需更改驅(qū)動層,應(yīng)用層不受影響。

如果功能模塊變動了,只需升級功能功能模塊,其他的模塊不受影響,應(yīng)用層也不受影響。

按照這種邏輯設(shè)計好之后,主要的工作就是在業(yè)務(wù)邏輯層。應(yīng)用層則為程序的總體流程和框架,主要調(diào)用業(yè)務(wù)邏輯層實現(xiàn)不同的功能。

我們現(xiàn)在的代碼結(jié)構(gòu),基本是按這個思路來的。

硬件驅(qū)動層--》功能模塊層--》應(yīng)用接口層--》業(yè)務(wù)邏輯層--》應(yīng)用層。

看看以下兩種風格的代碼,你更喜歡哪個。

另一種風格:

同樣是保存參數(shù),非要拆成AlgCRC16,WritePraFlash((unsignedchar*)NetPra,NETPRA_ADDR,sizeof(_NetPra))兩步嗎?

還有AH_Para_Verify這個,在應(yīng)用層中真是多余啊,檢測失敗又從Flash讀取。關(guān)于參數(shù),一開機就應(yīng)該檢測合法性了。

既然都是要保存參數(shù),就應(yīng)該做個封裝,如上圖所示,把系統(tǒng)用到的不同參數(shù)做個規(guī)劃。應(yīng)用層調(diào)用APP_Open_UseFile或者APP_Read_UseFile,

而不是直接的去讀寫Flash。

來看看赫赫有名的谷歌的android架構(gòu),雖然很復(fù)雜,但從框圖上看,也像是搭積木,各個功能模塊獨立,層次分明。層建立在linuxKernel基礎(chǔ)上,然后是各個組件庫libraries,再往上是應(yīng)用框架和應(yīng)用。

以NC_FileLib,文件庫模塊為例,如果要用在其他平臺,如EH0918手持機設(shè)備,只需要移植幾個硬件層接口即可。

NC_FileSys文件庫,跟硬件相關(guān)的接口在Hook文件夾,

voidHW_FRAM_Init(void)

unsignedintHW_FRAM_Read(unsignedintaddr,unsigned

intsize,unsignedchar*buffer)

unsignedintHW_FRAM_Write(unsignedintaddr,

unsignedintsize,unsignedchar*buffer)

//擦除FLASH一頁(FLASH擦除的單元)

unsignedintHW_Flash_PageErase(unsignedintpage)

unsignedintHW_Flash_Read(unsignedintaddr,

unsignedintsize,unsignedchar*buffer)

unsignedintHW_Flash_NotEraseWrite(unsigned

intaddr,unsignedintsize,unsignedchar*buffer)

//擦除FLASH一頁(FLASH擦除的單元)

unsignedintHW_Flash_PageErase(unsignedintpage)

按照以上模塊化設(shè)計思想,很容易實現(xiàn)一模擬pos機。

以開發(fā)一個智能pos應(yīng)用為例:

一個智能pos涉及到的功能模塊有:

讀寫卡功能,保存與讀取消費記錄,查找保存黑名單,界面顯示,菜單顯示,通信參數(shù)上傳記錄等。

以下為移植功能模塊到電腦上,自己做的一個模擬Pos工具:

在電腦上實現(xiàn)一模擬pos(只是功能上的實現(xiàn),完成刷卡消費,記錄存儲,記錄上傳,黑名單,票價等功能。界面為Dos窗口。后續(xù)如果用QT把界面也做出來,就是一功能齊全的模擬POS機,不過得把荒廢多年的C++重新拾起來了??梢岳^續(xù)完善做一個上位機模擬pos,改變編譯器在上位機仿真調(diào)試并交叉編譯后運行在真實POS上)。

用到的功能模塊有文件存儲模塊,卡處理模塊,算法模塊,銀聯(lián)庫模塊。我把這些模塊移植到電腦上。

關(guān)于卡處理模塊的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論