模塊化編程的分層設計經驗

操作要點:
1、每一層直接對下一層操作,儘量避免交叉調用或越級調用
2、某些器件會把硬件驅動層合併成一個文件時,則歸於較高的層
3、相同功能的外部函數儘量一致,儘量保證通用性
4、對於初次編程的模塊,要嚴格保證中間各層的正確性

好處:
1、對於後期維護擴展,只需修改應用層和物理層,根據需要擴展功能層
2、一個新項目只需把要用到的文件加入工程,簡單修改調試就出來了
3、隨着模塊的不斷積累,新的項目將越來越容易完成,後期的維護擴展也變得非常簡單了
4、對於C語言編程,只需簡單修改物理層就可完成不同單片機間的移植

呵呵,一些經驗,大家有好的想法可以繼續補充指正

一般分爲以下幾層:
   ---應用層--面向用戶
軟|     ↓
件|---協議層--現成的協議棧、軟件包、標準庫,大多是移植,不自己寫,如FAT、TCPIP、OS、GAME等
相|     ↓
關|     ↓
   ---功能層--實現器件無關性,實現器件的各種功能擴展和器件通用性處理,如LCD的線、圓、矩形等功能,如EEPROM的塊寫,自己的print
硬|     ↓     
件|---器件層--實現硬件無關性,保證IO無關性,只提供器件的基本功能,如字節讀寫、點
驅|     ↓
動 ---物理層--IO相關,直接操作硬件,實現硬件連接的多種方案

對應文件舉例1:
   ---應用層--面向用戶的主程序
軟|     ↓
件|---協議層--如FAT、TCPIP、OS等現成的協議棧、算法、遊戲等
相|     ↓
關|     ↓
   ---功能層--如文件lcd.c;led.c;eeprom.c;time.c;ir.c;keybord.c;harddisk.c;引出LCD的線、圓、矩形、填充等功能
硬|     ↓             ↓
件|---器件層--文件lcd61202.c;lcd1520.c;lcd6963.c;lcd133x.c;lcd44780.c;lcd162x.c;lcd856x.c或者lcd1602.c;lcd12864.c;lcd320240.c等,引出基本的初始化、定位、寫點、寫字節函數
驅|     ↓             ↓
動 ---物理層--文件lcd61202_io.c;lcd61202_bus.c;引出器件的基本讀寫函數

對應文件應用舉例2:
   ---應用層--面向用戶的主程序
軟|     ↓
件|---協議層--如FAT、TCPIP、OS等現成的協議棧、算法、遊戲等
相|     ↓
關|     ↓
   ---功能層--如文件lcd.c;led.c;eeprom.c;time.c;ir.c;keybord.c;harddisk.c;如EEPROM的塊寫統一化
硬|     ↓                         ↓
件|---器件層--文件ee24xx.c;ee93xx.c;ee_sdcard.c;ee29xx.c;ee28f.c;ee39xx.c;等
驅|     ↓             ↓
動 ---物理層--文件bus_i2c.c;bus_spi.c等

 

一個大的單片機程序往往包含很多模塊,我是這樣組織的
1。每一個C源文件都要建立一個與之名字一樣的H文件,裏面僅僅包括該C文件的函數的聲明,其他的什麼也

不會有,比如變量的定義啊等等不應該有。
2。建立一個所有的文件都要共同使用的頭文件,裏面當然就是單片機的管腳使用的定義,還有裏面放那些需

要的KEIL系統的頭文件,比如 #include<reg52.h>,#include<absacc.h>等等,把這個文件命名爲common.h,

或者乾脆就叫main.h
3,每個C源文件應該包含自己的頭文件以及那個共同的使用的頭文件,裏面還放自己本文件內部使用的全局

變量或者以extern定義的全局變量
4。主文件main.c裏面包含所有的頭文件包括那個共同使用的文件,main.c裏面的函數可以再做一個頭文件,

也可以直接放在文件的開頭部分聲明就可以了,裏面一般還有中斷服務程序也放在main.c裏面
5。對於那些貫穿整個工程的變量,可以放在那個共同的使用的頭文件裏面,也可以用extern關鍵字在某
個C源文件裏面定義,哪個文件要使用就重複定義一下
6.建立工程的時候,只要把C源文件加到工程中,把H文件直接放到相應的目錄下面就可以了,不需要加到工程裏面。


文章出處:DIY部落(http://www.diybl.com/course/3_program/c++/cppsl/2008920/144019.html)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章