管理员
最后登录1970-1-1
在线时间 小时
注册时间2013-5-3
|
发表于 2015-3-30 12:00:04
|
显示全部楼层
typedef struct _DEVICE_PROP
{
void (*Init)(void);//以这个函数指针为例:这个指针包含了(*Init)(void)这个函数的入口地址
void (*Reset)(void); //是的,这些都是函数指针
void (*Process_Status_IN)(void);
void (*Process_Status_OUT)(void);
RESULT (*Class_Data_Setup)(uint8_t RequestNo);
RESULT (*Class_NoData_Setup)(uint8_t RequestNo);
RESULT (*Class_Get_Interface_Setting)(uint8_t Interface, uint8_t AlternateSetting);
uint8_t* (*GetDeviceDescriptor)(uint16_t Length);
uint8_t* (*GetConfigDescriptor)(uint16_t Length);
uint8_t* (*GetStringDescriptor)(uint16_t Length);
void* RxEP_buffer;
uint8_t MaxPacketSize;
} DEVICE_PROP;//按小弟理解:这里的DEVICE_PROP是一种数据类型(例如char类型),该数据类型包含很多函数指针而已~这样理解正确吗???
这个device_prop是结构体类型,该结构体类型包含了很多指针变量,而这些指针变量恰好是函数指针变量
Device_Property 是用DEVICE_PROP类型定义的结构体变量的实体,
就像 int i 定义语句一样。DEVICE_PROP理解成int(变量类型),Device_Property 理解成 i (变量实体)。
DEVICE_PROP Device_Property =
{//这里DEVICE_PROP类型的Device_Propety,我是把它理解成结构体变量?还是该理解成结构体指针(地址)?
MASS_init,
MASS_Reset,//这里的地址与上面的函数指针一一对应???
是的,一 一对应,实际上这就是对结构体变量Device_Propety的初始化赋值,就跟数组初始化赋值一样,只是它的赋值内容比较特别,是函数指针而已。函数名实际上就是函数指针,在工程里你是可以找到MASS_init,MASS_Reset之类的函数定义的。
MASS_Status_In,
MASS_Status_Out,
MASS_Data_Setup,
MASS_NoData_Setup,
MASS_Get_Interface_Setting,
MASS_GetDeviceDescriptor,
MASS_GetConfigDescriptor,
MASS_GetStringDescriptor,
0, 0x40//那这里的0,0x40该如何理解?请大神指教~~~
0对应void* RxEP_buffer这个指向缓冲区的指针,初始化赋值为0,其实是表示还没有确定,后面用到的时候会给这个结构体成员赋值的。
0x40就是uint8_t MaxPacketSize;的值了。
};
翻翻c语言的书,把结构体章节重新看一遍吧
|
|