由嵌入式系統特性
1.可移植性
2.硬體相關
3.非硬體相關
4.產品相關
5.非產品相關
----------------------
(可以容易在其他的專案中重複使用;假如下個產品的硬體平台不變,只有應用程式改變,則系統與Driver的程式目錄就可以直接拿來用.再假如下個產品的硬體被換掉,但系與應用程式只需小幅調整,則只需把驅動程式的目錄替換掉即可.)
基本上一個目錄可以對應到系統架構圖裡的一個方塊
程式風格典範(Progrmming Style Covention)
所謂程式風格,不僅是命名規則而已,其中還規範了程式碼中至少應該具有哪些資訊,以及程式寫作的注意事項
//
/***********************
程式名稱 : 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
#define XX_OS_H
//header file 的實除內容
#endif
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)
所謂程式風格,不僅是命名規則而已,其中還規範了程式碼中至少應該具有哪些資訊,以及程式寫作的注意事項
- .變數名稱: 讓一個變數名稱除了代表一個變數本身之外,更重要的是讓檢閱程式的人能夠對該變數的意義一目了然.) 例如在宣告 全域變數(gobal variable)和 區域變數 (local variable)的重要性不同,所以就會規定兩者的變數的命名方法應該有所區別.
- .該程式檔的用途描述
- 撰寫者與日期
- 修改履歷
- 用殊殊顯眼的符號區分程式區段
- 每一個function必須詳述用途'各個參數的意義'傳回值的意義
- 每一個全域變收必須詳述用途
- 定義資結構時必須詳述每一個欄偣的意義
- 盡可能寫註解
- 程式中的縮排必須整齊'最好用tab鍵,或直接規定縮排要空幾格出來
- 如果某一個迴圈(for and while loop)或條件判別(if)內容太長,則在結尾大括號後加上註解
- 不要吝嗇空白行
- 一個程式的行數不應該太長( <1000,2000)
//
/***********************
程式名稱 : 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的開頭和結尾應該加上
#define XX_OS_H
//header file 的實除內容
#endif
- 常數和巨集(MACRO)定義必須清楚描述
- 定義資料結構(struct,union,enum)和資料型態(typedef)時須詳細其意義
- 不要在其.h檔中定義變數
沒有留言:
張貼留言