总有很郁闷的时候,总在不断思考自己的存在意义.闲的时候写点东东,希望能帮助那些 与自己一样彷徨追求的人,虽然自己是菜鸟,真正的专家正在钻研,我不太喜欢用"高手"这个 词. 为了进行U盘的文件操作,对于许多新手来说,使用CH375LIB库是一个捷径,而为了使用 好库,对CH375HF4.H了解有一定的必要,而对于其它头文件只是在这之上作小的改动,库出外 有以下一些地方提出来,当然我的理解不一定完全正确,请大家指教. 首先需要注意的是如何使用CH375HF4.H,所有的初始化要放在#include "CH375HF.H"前,否则就不能完成对库的正确使用,如下: ...... #define MAX_PATH_LEN 0X50 /* 定义命令缓冲区大小 */ #include "CH375HF4.H"
1. #ifndef __CH375HF_H__ #define __CH375HF_H__ #endif 这是为了一个.C文件,如果#include "CH375HF.H"多次,只有一次有效.
2. #ifdef __cplusplus extern "C" { #endif 和最后的 #ifdef __cplusplus } #endif 这是为了在C++编译环境下,库能提供C类型的函数接口,C和C++编译环境下编译生成的函数接口不同.
3. #ifdef __CX51__ #ifndef __C51__ #define __C51__ 1 #endif #endif 这是为了在CX51环境下,定义__C51__,为了完成下面的typedef的相关定义.
4. #define MAKE_FILE_TIME( h, m, s ) ( (h<<11) + (m<<5) + (s>>1) ) ...... 像这样的宏定义有编译器自动计算,不会生成多余的代码.
5. #ifndef MAX_PATH_LEN #define MAX_PATH_LEN 30 #endif 如果用户不在自己的.c文件定义,那么定义为默认的30,
typedef union _CMD_PARAM { ..... } CMD_PARAM; 上面这个联合体很大,所以就省掉了,这是为了使用库函数和进行相关操作定义的联合体,它 的大小在#define MAX_PATH_LEN定义.而所在什么空间由下面的宏定义.
typedef CMD_PARAM idata CMD_PARAM_I; 该定义上面联合体在在IDATA空间生成,但在此还没生成,只是定义.
CMD_PARAM_I mCmdParam; 这个语句就会让编译器在IDATA空间开辟一块连续的空间,进行操作.
6. #ifdef CH375HF_NO_CODE
extern CMD_PARAM_I mCmdParam; //只是申明下面生成的变量和函数 ....... #else //在#else以下生成有效代码
CMD_PARAM_I mCmdParam; ....... #endif 是为了在一个项目里如果有多个*.C文件包含CH375HF4.H定义的,只产生一次有效代码,因为 CH375HF4.H编译会生成代码.如果有一个文件已经包含了CH375HF4.H文件,而在其它文件,只需要如下定义就可: #define CH375HF_NO_CODE 1 #include "CH375HF4.H" 这样就不会产生多于的代码和出错.
还有一些定义及函数没有提出,大家可参考公司的例子程序.库中没有使用的函数,虽然在编 译时会产生警告,但生成*.HEX文件时不会产生其有效代码,这是由编译器及其设置决定的.