在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式應用開發應用架構有什么作用?嵌入式程序設計的一些思路

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:易水寒 ? 2018-08-12 10:49 ? 次閱讀

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

如果沒有好的架構,復用是最大的難題,沒法更大限度的復用原有的代碼。

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

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

現在的小朋友都愛玩搭積木的游戲,一個模塊一個模塊的拼裝起來,快速組成各種不同的模型?,F在的產品設計也很少從零開始。大都復用現有成熟的模塊,專注于某個擅長領域。

要做到嵌入式應用的代碼邏輯清晰,且避免重復的造輪子,沒有好的應用架構怎么行!

把API分為驅動層和應用層API,而不是所有程序都調用驅動層API。(整個應用中都調用驅動層API會導致應用中驅動調用隨處可見,無法移植和最大限度的復用)

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

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

總體分 硬件驅動層-->功能模塊層-->應用接口層-->業務邏輯層-->應用層

總體結構示意框圖:

應用層,為程序的總體的運行框架,組織調用業務邏輯。可以用某種嵌入式操作系統實現幾種任務 。如定時任務,卡處理任務,菜單任務,通信任務。

業務邏輯層,如CPU卡處理,交通部卡處理,銀聯卡處理,M1卡處理,通信記錄上傳,黑名單下載,票價參數下載等。

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

功能模塊層,可以封裝不同的功能模塊。如算法庫,文件庫,通信庫,銀聯庫,向上提供應用接口層的接口,向下調用驅動接口。

硬件驅動層,由各個驅動模塊組成,向上提供統一的接口。

遵循一些約定:1.每個模塊提供出的接口要統一,后續只能增,不能改原來的接口。

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

3.由模塊構成層,層與層之間不能跨級調用。如在應用層中不能看到直接調用驅動層的代碼。

4.模塊中又可以繼續分層,如接口層,驅動層,硬件層。

如果驅動變動了,或者換不同平臺,只需更改驅動層,應用層不受影響。

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

按照這種邏輯設計好之后,主要的工作就是在業務邏輯層。應用層則為程序的總體流程和框架,主要調用業務邏輯層實現不同的功能。

我們現在的代碼結構,基本是按這個思路來的。

硬件驅動層-->功能模塊層-->應用接口層-->業務邏輯層-->應用層。

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

另一種風格:

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

還有AH_Para_Verify這個,在應用層中真是多余啊,檢測失敗又從Flash讀取。關于參數,一開機就應該檢測合法性了。

既然都是要保存參數,就應該做個封裝,如上圖所示,把系統用到的不同參數做個規劃。應用層調用APP_Open_UseFile 或者APP_Read_UseFile,而不是直接的去讀寫Flash。

來看看赫赫有名的谷歌的android架構,雖然很復雜,但從框圖上看,也像是搭積木,各個功能模塊獨立,層次分明。最低層建立在linux Kernel基礎上,然后是各個組件庫libraries,再往上是應用框架和應用。

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

NC_FileSys文件庫,跟硬件相關的接口在Hook文件夾,重新實現以下幾個函數即可:void HW_FRAM_Init( void )unsigned int HW_FRAM_Read( unsigned int addr,unsigned int size,unsigned char *buffer)unsigned int HW_FRAM_Write( unsigned int addr,unsigned int size,unsigned char *buffer )//擦除FLASH一頁 (FLASH擦除的最小單元)unsigned int HW_Flash_PageErase( unsigned int page )unsigned int HW_Flash_Read( unsigned int addr, unsigned int size, unsigned char *buffer )unsigned int HW_Flash_NotEraseWrite( unsigned int addr, unsigned int size, unsigned char *buffer )//擦除FLASH一頁 (FLASH擦除的最小單元)unsigned int HW_Flash_PageErase( unsigned int page )

按照以上模塊化設計思想,很容易實現一模擬pos機:

以開發一個智能pos應用為例:一個智能pos涉及到的功能模塊有:讀寫卡功能,保存與讀取消費記錄,查找保存黑名單,界面顯示,菜單顯示,通信下載參數上傳記錄等。

電腦上實現一模擬pos用到的功能模塊有 文件存儲模塊,卡處理模塊,算法模塊,銀聯庫模塊。我把這些模塊移植到電腦上。

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

關于卡處理模塊的實現,由于電腦上沒讀卡頭,于是用外接讀卡器。把讀卡器串口接電腦上。電腦上做一讀寫卡服務,提供TCP接口的讀寫卡接口。

移植文件庫,嵌入式程序中是操作的flash,在電腦上把文件庫中用到的接口用讀寫文件的形式替換。

移植算法庫,算法庫都是c寫的,直接用gcc在windows平臺重新編譯即可。

各個功能模塊,又可以進一步細分為子模塊。

拿通信庫舉例:嵌入式設備都需要支持各種不同的通訊模塊。比如硬件設備有A701、A801、B502等,通訊模塊有GL868、MG323、MC8630、N710、ZIGBEE等,這些設備分別支持全部或部分通訊模塊。

整體架構分為如下:

驅動大致分為三層:1、接口層:為用戶提供統一的接口,比如:Connect、TxData、RxData、Disconnect等。2、驅動層:向接口層暴露統一的接口,這些接口用于完成實際的連接斷開和數據收發等,比如:DevConnect、DevTxData、RxData、Disconnect等。該層只會和支持的通訊模塊相關,不會直接訪問任何硬件功能,包括串口通訊、GPIO控制全部通過底層的設備層實現。3、設備層:向驅動層提供統一的接口,這些接口通過訪問物理硬件來實現和模塊的通訊,比如:XXXPowerOn、SerialSend、SerialReceive等,并定義該設備支持哪些模塊。

對于部分編寫通訊模塊驅動常用的功能,模塊中提供了一系列的輔助函數,避免重復勞動。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5087

    文章

    19153

    瀏覽量

    306425
  • API
    API
    +關注

    關注

    2

    文章

    1507

    瀏覽量

    62217
  • 程序
    +關注

    關注

    117

    文章

    3793

    瀏覽量

    81220

原文標題:搞嵌入式應用開發,沒有好的應用架構怎么行?高手分享嵌入式程序設計的一些思路

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式開發教程之程序設計開發維護

      干貨來了,本文創客學院嵌入式linux培訓講師和學員分享嵌入式程序設計和系統開發與維護的相關知識點。希望對學習嵌入式開發的學員有所幫助。
    發表于 05-26 14:59

    【轉】嵌入式系統原理及應用教程- -嵌入式程序設計基礎

    嵌入式系統原理及應用教程- -嵌入式程序設計基礎 l
    發表于 12-02 22:20

    主流的嵌入式CPU架構-ARM架構詳解

    簡單聊聊??上篇,介紹到了什么是嵌入式,以及嵌入式與單片機、PC機的區別,簡單聊了聊有關嵌入式軟件學習的一些內容。這
    發表于 12-13 06:05

    嵌入式一些日常小技巧分享

    雜記–算法學習日志+關于實驗室部門架構的思考+嵌入式一些日常小技巧分享算法學習日志因為從初中到現在直是學習嵌入式
    發表于 12-21 08:07

    嵌入式系統的C程序設計

    嵌入式系統的C程序設計
    發表于 04-07 22:42 ?86次下載
    <b class='flag-5'>嵌入式</b>系統的C<b class='flag-5'>程序設計</b>

    嵌入式系統的C程序設計

    嵌入式系統的C程序設計
    發表于 11-10 08:59 ?54次下載

    嵌入式系統的c程序設計

    嵌入式系統的c程序設計
    發表于 02-11 09:21 ?65次下載
    <b class='flag-5'>嵌入式</b>系統的c<b class='flag-5'>程序設計</b>

    嵌入式系統的C程序設計

    嵌入式系統的C程序設計 需要的朋友下來看看
    發表于 12-29 17:56 ?1次下載

    嵌入式系統的C程序設計

    嵌入式系統的C程序設計,感興趣的小伙伴們可以看看。
    發表于 07-26 10:26 ?42次下載

    嵌入式系統與C程序設計

    嵌入式系統與C程序設計
    發表于 10-30 10:20 ?13次下載
    <b class='flag-5'>嵌入式</b>系統與C<b class='flag-5'>程序設計</b>

    嵌入式開發要學什么嵌入式開發一些入門教材推薦

    本文檔的主要內容詳細介紹的是嵌入式開發要學什么嵌入式開發一些入門教材推薦資料免費下載教材包括了:ARM嵌入式項目開發三位
    發表于 01-10 14:46 ?27次下載
    <b class='flag-5'>嵌入式開發</b>要學什么<b class='flag-5'>嵌入式開發</b>的<b class='flag-5'>一些</b>入門教材推薦

    嵌入式系統的一些基礎知識

    本文主要介紹嵌入式系統的一些基礎知識,希望對各位幫助。
    的頭像 發表于 02-18 10:44 ?2463次閱讀

    ARM嵌入式系統BSP的程序設計總結

    ARM嵌入式系統BSP的程序設計總結(嵌入式開發模式稱為)-該文檔為ARM嵌入式系統BSP的程序設計總結文檔,是
    發表于 08-04 10:37 ?4次下載
    ARM<b class='flag-5'>嵌入式</b>系統BSP的<b class='flag-5'>程序設計</b>總結

    嵌入式開發):嵌入式開發新手入門

    本篇文章整理下嵌入式開發一些入門的基礎技能,都是根據以往的工程經驗整理,適用于之前沒做過嵌入式開發的新手。嵌入式開發流程般如下,
    發表于 10-14 10:58 ?79次下載
    <b class='flag-5'>嵌入式開發</b>(<b class='flag-5'>一</b>):<b class='flag-5'>嵌入式開發</b>新手入門

    C語言嵌入式培訓 嵌入式C語言程序設計基礎

      學習嵌入式的基礎語言是C語言,因此先掌握C語言對于后續嵌入式的學習有著非常大的意義。下面講解下嵌入式C語言程序設計基礎,尤其是C語言的一些
    發表于 11-03 21:06 ?32次下載
    C語言<b class='flag-5'>嵌入式</b>培訓  <b class='flag-5'>嵌入式</b>C語言<b class='flag-5'>程序設計</b>基礎
    主站蜘蛛池模板: www.亚洲黄色| 亚洲 欧美 校园| 欧美三级色| 女人张开腿等男人桶免费视频| 天天干干干干| 黄色大毛片| 欧美一级特黄啪啪片免费看| 一级特黄aa大片| 成人最新午夜免费视频| 额去鲁97在线观看视频| 一本到卡二卡三卡福利| 182tv免费视视频线路一二三| 网色| 日日做夜夜做| 天天综合天天色| 操操久久| 天天射天天射天天干| 免费看欧美一级特黄α大片| 小屁孩cao大人免费网站| 天天操天天干天天爽| 美女天天干| 黄色大片在线视频| 久久久xxx| 中文字幕第一| 不卡一区| 色老二精品视频在线观看| 香蕉久久夜色精品国产2020| 中文天堂最新版在线精品| 爱逼色| 日本免费在线一区| 亚洲国产精品第一页| 一区二区免费在线观看| 月夜免费观看高清在线完整| 国产亚洲精品免费| 九月婷婷综合婷婷| 午夜色视频在线观看| 欧美性久久久久| brazzers在线播放| 黄色网大全| 午夜影院免费视频| 手机看片国产免费永久|