




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、嵌入式項目代碼結(jié)構(gòu)的分層HAL(硬件抽象層)、FML(功能模塊層)、APL(應(yīng)用程序?qū)樱?011-03-07 20:09 by 鵬程, 1075 visits, 網(wǎng)摘, 收藏, 編輯 一、遇到的問題在“Zigbee之旅”系列博文中,每寫一篇筆者都會編寫一個小實驗來展開講解。通過這一段時間的實踐,我積累了一些編碼經(jīng)驗,但也體會到了之前的代碼結(jié)構(gòu)的缺陷:(1)開發(fā)效率低:每次使用片內(nèi)的某一資源(例如定時器等),筆者都要去查詢CC2430中文手冊,比較eggache(2)代碼重復較多:每個實驗源碼中,諸如 xtal_init ,led_init 等初始化函數(shù)每次都要編寫(3)不易修改:代碼中的業(yè)務(wù)邏
2、輯與SFR的操作混在一起,可讀性較差,修改起來也費力正是由于以上問題,筆者決定暫停了該系列博文的續(xù)寫,抽出時間來思考一下解決辦法。二、由網(wǎng)站分層引起的思考筆者在學習嵌入式編程之前,曾有過 ASP.NET 網(wǎng)站開發(fā)經(jīng)驗,對其分層理論也有所實踐,下面簡單提一下:一般的有一定復雜度的網(wǎng)站可分為以下三層:(1)數(shù)據(jù)接入層(DAL):負責與數(shù)據(jù)庫的交互,供業(yè)務(wù)邏輯層調(diào)用(2)業(yè)務(wù)邏輯層(BLL):調(diào)用數(shù)據(jù)接入層以獲取數(shù)據(jù),并為具體的業(yè)務(wù)需求提供支持(3)用戶界面層(UIL):負責呈現(xiàn)最終的用戶界面相信博客園中很大一部分朋友都對此非常熟悉,在此不再贅述??傊謱右院?,大大提高了代碼的復用性與擴展性。那么
3、在嵌入式開發(fā)中,能否也利用分層的思想,來提高開發(fā)效率,增強其可維護性與可擴展性呢?下面,是一些筆者思考后的淺見。三、嵌入式項目也來分個層當然不能照搬ASP.NET 的具體分層思想,具體問題得具體分析嘛首先,嵌入式開發(fā)的核心就是芯片,它提供固定的片內(nèi)資源共開發(fā)者使用。而且它具有一個很重要的特點就是,不隨項目的需求變動而變動。所以應(yīng)將其作為最底層,為上層提供基礎(chǔ)支持。我們將其命名為 硬件抽象層(Hardware Abstract Layer)。芯片有了當然還不夠,通常我們會在片外擴展一些功能模塊來滿足具體的項目需求,例如:傳感器、鍵盤、LCD屏等。這一層的特點是,隨項目的變動而以模塊為單位動態(tài)增減
4、。這一層的運作需要芯片內(nèi)部資源的支持,所以應(yīng)處于硬件抽象層之上,并為上層調(diào)用。我們將其命名為 功能模塊層(Functional Module Layer)。OK,現(xiàn)在原材料都準備齊了:芯片+擴展模塊,接下來就要開始真正的加工了:我們需要靈活調(diào)用之前兩層所提供的接口,實現(xiàn)具體的項目需求。我們將其命名為 應(yīng)用程序?qū)樱ˋpplication Layer)。圖文:(1)硬件抽象層(HAL)實現(xiàn)對片內(nèi)資源 (如定時器、ADC、中斷、I/O等) 的通用配置,隱藏具體的SFR操作細節(jié),為上層提供簡單清晰的調(diào)用接口。(2)功能模塊層(FML)通過調(diào)用 HAL,實現(xiàn)項目中所涉及到的各片外功能模塊,隱藏具體的模塊
5、操作細節(jié),并為上層提供簡單清晰的調(diào)用接口。(3)應(yīng)用程序?qū)樱ˋPL)通過調(diào)用 HAL 與 FML,實現(xiàn)最終的應(yīng)用功能。四、小試牛刀OK,我們舉一個具體的例子,來說明分層思想的運用。在寫作“Zigbee之旅”系列的某一篇博文時,筆者需要完成一個略帶綜合性的小實驗“溫度監(jiān)測系統(tǒng)”,需求分析大概如下: CC2430節(jié)點實現(xiàn)對溫度的定時采集,并可通過LED燈指示其采樣頻率 節(jié)點將數(shù)據(jù)傳送至PC端 節(jié)點可以接收來自PC的控制指令,以調(diào)整采樣速率和電源模式 具備停機自動復位能力 可進入睡眠狀態(tài),并可由按鍵喚醒從上面的需求中我們可以看出,本實驗的核心芯片為CC2430,需要的片外擴展模塊為LED燈與按鍵,預
6、期要達到具體項目需求即以上五點。接下來,我們利用上面提到的分層理論小試牛刀,對“溫度監(jiān)測系統(tǒng)”這一實驗的代碼結(jié)構(gòu)進行規(guī)劃:(1)應(yīng)用程序?qū)樱ˋPL)main.c 引用 hal.h、ioCC2430.h 與 module.h,實現(xiàn)溫度采集、與PC互通信、停機復位等具體的應(yīng)用需求(2)功能模塊層(FML)module.h 定義了一系列片外功能模塊(LED、按鍵),以及一系列的相關(guān)函數(shù)的聲明module.c 引用 hal.h,實現(xiàn)各片外模塊(LED、按鍵)的功能(3)硬件抽象層(HAL)ioCC2430.h(系統(tǒng)自帶):定義了CC2430的所有SFR 、中斷向量hal.
7、h 包括常用類型定義、常用賦值宏、以及CC2430片上資源的配置(I/O、串口通訊、ADC、定時器、電源管理等)(注:由于本實驗所涉及的片外模塊LED與按鍵的使用極其簡單,所以筆者將其合并入了單個源文件。若遇到較復雜的模塊,可以單獨新建 .h 與 .c 文件來實現(xiàn),如LCD.h、LCD.c)經(jīng)此設(shè)計,其優(yōu)點逐漸浮出水面: 高效的開發(fā)速率:編完 HAL 層中的 hal.h 之后,我們就可以很方便地調(diào)用,而不必反復地去查詢SFR的具體設(shè)置細則 快速擴展:若需要加強系統(tǒng)功能,只需在 FML 層添加相應(yīng)功能模塊(即 .c 文件),并在 main.c 中調(diào)用即可 較高的代碼重用性:HAL 層所提供的SFR操作可供通用,而且該層幾乎不用修改就可直接用于新的CC2430項目中 較好的可維護性:項目代碼結(jié)構(gòu)清晰,HAL 與 FML 幾乎不需要修改,只需修改 APL 即可五、結(jié)語可能對于嵌入式編程高手來說,上述理論可能完全算不得什么,甚至還存在著很大的錯誤。不過在一個初學者從入門走向精通的途中,像這種 發(fā)現(xiàn)問題 投入思考 提出方案 的學習模式,我相
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學生在線學習平臺
- 江蘇省安全文明施工措施費
- 項目進度匯報及協(xié)調(diào)通知
- 跨部門協(xié)作會議紀要與行動計劃
- 高效會議管理技巧與實踐指南
- 臺風應(yīng)急預案演練方案
- 項目預算控制表模板(財務(wù)部門)
- 可持續(xù)發(fā)展戰(zhàn)略實踐分享
- 電子交易系統(tǒng)操作指南
- 辦公室職員健康促進措施
- 2024年吉林省高職高專單獨招生考試數(shù)學試卷真題(含答案)
- 油氣勘探行業(yè)技術(shù)趨勢分析
- 技術(shù)研發(fā)主管崗位招聘筆試題及解答(某大型國企)
- 2020-2021年度廣東省職業(yè)院校學生專業(yè)技能大賽(高職組)CAD機械設(shè)計賽項競賽規(guī)程
- 孫子生日宴會爺爺致辭范文
- 【正版授權(quán)】 IEC 60072-3:1994 EN-FR Dimensions and output series for rotating electrical machines - Part 3: Small built-in motors - Flange numbers BF10 to BF50
- 養(yǎng)老院老人走失免責協(xié)議書
- 加固工程施工技術(shù)交底內(nèi)容
- 2024-2034年中國冷凍面團市場競爭策略及行業(yè)投資潛力預測報告
- 《我愛上班》朗誦稿
- AQ-T 1009-2021礦山救護隊標準化考核規(guī)范
評論
0/150
提交評論