總有很郁悶的時(shí)候,總在不斷思考自己的存在意義.閑的時(shí)候?qū)扅c(diǎn)東東,希望能幫助那些 與自己一樣彷徨追求的人,雖然自己是菜鳥,真正的專家正在鉆研,我不太喜歡用"高手"這個(gè) 詞. 為了進(jìn)行U盤的文件操作,對(duì)于許多新手來說,使用CH375LIB庫是一個(gè)捷徑,而為了使用 好庫,對(duì)CH375HF4.H了解有一定的必要,而對(duì)于其它頭文件只是在這之上作小的改動(dòng),庫出外 有以下一些地方提出來,當(dāng)然我的理解不一定完全正確,請(qǐng)大家指教. 首先需要注意的是如何使用CH375HF4.H,所有的初始化要放在#include "CH375HF.H"前,否則就不能完成對(duì)庫的正確使用,如下: ...... #define MAX_PATH_LEN 0X50 /* 定義命令緩沖區(qū)大小 */ #include "CH375HF4.H"
1. #ifndef __CH375HF_H__ #define __CH375HF_H__ #endif 這是為了一個(gè).C文件,如果#include "CH375HF.H"多次,只有一次有效.
2. #ifdef __cplusplus extern "C" { #endif 和最后的 #ifdef __cplusplus } #endif 這是為了在C++編譯環(huán)境下,庫能提供C類型的函數(shù)接口,C和C++編譯環(huán)境下編譯生成的函數(shù)接口不同.
3. #ifdef __CX51__ #ifndef __C51__ #define __C51__ 1 #endif #endif 這是為了在CX51環(huán)境下,定義__C51__,為了完成下面的typedef的相關(guān)定義.
4. #define MAKE_FILE_TIME( h, m, s ) ( (h<<11) + (m<<5) + (s>>1) ) ...... 像這樣的宏定義有編譯器自動(dòng)計(jì)算,不會(huì)生成多余的代碼.
5. #ifndef MAX_PATH_LEN #define MAX_PATH_LEN 30 #endif 如果用戶不在自己的.c文件定義,那么定義為默認(rèn)的30,
typedef union _CMD_PARAM { ..... } CMD_PARAM; 上面這個(gè)聯(lián)合體很大,所以就省掉了,這是為了使用庫函數(shù)和進(jìn)行相關(guān)操作定義的聯(lián)合體,它 的大小在#define MAX_PATH_LEN定義.而所在什么空間由下面的宏定義.
typedef CMD_PARAM idata CMD_PARAM_I; 該定義上面聯(lián)合體在在IDATA空間生成,但在此還沒生成,只是定義.
CMD_PARAM_I mCmdParam; 這個(gè)語句就會(huì)讓編譯器在IDATA空間開辟一塊連續(xù)的空間,進(jìn)行操作.
6. #ifdef CH375HF_NO_CODE
extern CMD_PARAM_I mCmdParam; //只是申明下面生成的變量和函數(shù) ....... #else //在#else以下生成有效代碼
CMD_PARAM_I mCmdParam; ....... #endif 是為了在一個(gè)項(xiàng)目里如果有多個(gè)*.C文件包含CH375HF4.H定義的,只產(chǎn)生一次有效代碼,因?yàn)? CH375HF4.H編譯會(huì)生成代碼.如果有一個(gè)文件已經(jīng)包含了CH375HF4.H文件,而在其它文件,只需要如下定義就可: #define CH375HF_NO_CODE 1 #include "CH375HF4.H" 這樣就不會(huì)產(chǎn)生多于的代碼和出錯(cuò).
還有一些定義及函數(shù)沒有提出,大家可參考公司的例子程序.庫中沒有使用的函數(shù),雖然在編 譯時(shí)會(huì)產(chǎn)生警告,但生成*.HEX文件時(shí)不會(huì)產(chǎn)生其有效代碼,這是由編譯器及其設(shè)置決定的.