2010年3月19日 星期五

Source Tree設計原則 與 程式風格典範

由嵌入式系統特性
1.可移植性
2.硬體相關
3.非硬體相關
4.產品相關
5.非產品相關
----------------------
(可以容易在其他的專案中重複使用;假如下個產品的硬體平台不變,只有應用程式改變,則系統與Driver的程式目錄就可以直接拿來用.再假如下個產品的硬體被換掉,但系與應用程式只需小幅調整,則只需把驅動程式的目錄替換掉即可.)



基本上一個目錄可以對應到系統架構圖裡的一個方塊
  • Driver    -- 驅動 
    • boot-loader --boot-loader程式目錄
      • Hardware--各個裝置的驅動程式
      • include    --驅動程式的header file
      • API   --將所有驅動程式包裝成API
      • boot --boot程式
      • LCD -- LCD程式目錄
      • SDRAM -- SDRAM的驅動程式
      • ........
  • System--   系統
    • include --系統程式的header file
    • API --將所有系統程式包裝成API
    • Common--系統程式中通用的功能
    • Glib --圖形函式庫
    • AP -- 應用程式
      • include --應用程式的header file
      • source
        • Common
        • AP1
        • AP2
        • ...
        • Resource --統一管理應用程式中的圖形'字串等資源檔
    • Sub-system :各個子系統
      • GUI --圖形使用者介面子系統
      • TCPIP --TCPIP stack
      • Filesystem --檔案系統
    • RTOS--嵌入式作業系統的目錄
      • include
      • API
      • Task
      • Memory
      • Sync
      • IPC
      • ....
  • Third_Party_Library--由協力廠商或網路取得的函式庫
    • Hand/Writeing ---手寫函式庫
    • font --字型
    • 聲音壓縮函式庫
  • Include ---專案的header file ,syst_config(系統組態) ...
  • Builer--所有用以製作系統執行檔的檔案,如makefile 及link script
  • Simulator --模擬器目錄
    • build ---模擬器的builer,可以產生模模器執行檔
    • simulated hardware ---在PC上模擬硬體設備
      • LCD
      • KeyBoard
      • .....
  • Tools -- 開發過程所需要的工具
    • Cross compiler --CPU廠商建議的編輯器
    • Offline tools---開發過程中會用到的工具
  • Document--和專案有關的文件
    • Project Management  ---和專案管理有關的文件圖表
    • Design spec-----所有設計文件
    • Hardware     ----硬體相關的文件,如線路圖'晶片的datasheet
    • ohters          -----其它的技術文件或sample code
---------------------------------------------------
程式風格典範(Progrmming Style Covention)

   所謂程式風格,不僅是命名規則而已,其中還規範了程式碼中至少應該具有哪些資訊,以及程式寫作的注意事項

  1. .變數名稱: 
  2.        讓一個變數名稱除了代表一個變數本身之外,更重要的是讓檢閱程式的人能夠對該變數的意義一目了然.) 例如在宣告 全域變數(gobal variable)和 區域變數 (local variable)的重要性不同,所以就會規定兩者的變數的命名方法應該有所區別.
  3. .該程式檔的用途描述 
  4. 撰寫者與日期
  5. 修改履歷
  6. 用殊殊顯眼的符號區分程式區段
  7. 每一個function必須詳述用途'各個參數的意義'傳回值的意義
  8. 每一個全域變收必須詳述用途
  9. 定義資結構時必須詳述每一個欄偣的意義
  10. 盡可能寫註解
  11. 程式中的縮排必須整齊'最好用tab鍵,或直接規定縮排要空幾格出來
  12. 如果某一個迴圈(for and while loop)或條件判別(if)內容太長,則在結尾大括號後加上註解
  13. 不要吝嗇空白行
  14. 一個程式的行數不應該太長( <1000,2000)
//OS模組中的Message_queue 功能
//
/***********************
程式名稱 : message_queue
目錄        : library/os
專案名稱 :test 123
創建者     ;S123
程式用途描述 :
    implement message quenue by circular quenue mechainion,.
..............

版權宣告:
Copyring (C) KME S/W Co.,Ltd.
ALLRight Reserved

修改及維護資訊:
2001/1/1 :created by steven
2003/2/3 : Add new api --empyQueue() by steven
................
**********************************/

/********************************
INCLUDE FILE
********************************/
#inlcude
#include
........................

/**************************
CONSTANT Defintion
**************************/
//常數名稱的所有字母大寫,只會在此一.c中用到的常數不定定義在.h中
//常數的詳細用途
#define OS_MSG_MAX 20
...............

/**************************
Global variable definetion
**************************/
//全域變數第一個字母為大寫
//全域變數的詳細用途
struct messageQueue *System = NULL;

/************************
資料結構與資料型別定義
************************/
//一般的資料結構會定義在.h檔案中,除了其資料結構只會在此.c中使用
//資料結構的詳細用途....
struct messageQueue
 {
  //
 };

/*****************************
Iterneal function  Declaration
*****************************/
//宣告只有這個程式內部會用的function (static function不會宣告在.h)
//static function的詳細用途'參數'傳回值的解譯
//...............
static void os_msg_internal_function();

/*********************************
Funtion :os_msgq_initmessageQueue
函數用途描述: .............
參數描述:.......
傳回值    :描述..............
特殊演算法:....
注意事項 :...................
*******************************/
short os_msgq_initMessageQueue(struct .............)
   {
    //區域變數定義,及其用途
    //區域變數的第一個字母為小寫,為了區分全域變數
     int i_abc;
      {
         ....................
       }
    }
              
---------------------------------------
Header File
  • 所有程檔案的規定
  • 避免重複include造成的重複定義,基本上header file的開頭和結尾應該加上
      #ifndef  XX_OS_H
      #define XX_OS_H
     //header file 的實除內容
     #endif
  • 常數和巨集(MACRO)定義必須清楚描述
  • 定義資料結構(struct,union,enum)和資料型態(typedef)時須詳細其意義
  • 不要在其.h檔中定義變數

沒有留言:

張貼留言