小弟刚入手stm32,关于结构体以及指针的理解,恳请大神指教~~~

liuchang910781261 2015-03-30 11:21:22
typedef struct _DEVICE_PROP  
{
void (*Init)(void); //以这个函数指针为例:这个指针包含了
void (*Reset)(void); // (*Init)(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类型的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该如何理解?请大神指教~~~
};
...全文
1060 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijunyu2005 2015-10-21
  • 打赏
  • 举报
回复
/** * Structure for defining a custom memory allocator. */ struct ProtobufCAllocator { /** Function to allocate memory. */ void *(*MEM_Alloc)(void *allocator_data, size_t size); /** Function to free memory. */ void (*MEM_Free)(void *allocator_data, void *pointer); /** Opaque pointer passed to `alloc` and `free` functions. */ void *allocator_data; }; typedef struct ProtobufCAllocator ProtobufCAllocator; /* --- allocator --- */ #define PAGE_SIZE 1024 #define PAGES 1 char Memory[PAGE_SIZE*PAGES] = {0}; uint32_t RemainLen = PAGE_SIZE*PAGES; uint32_t Pos = 0; uint32_t PosOffset = 0; void MEM_Set( char* mem , int len ) { int i; len +=1; for(i=0;i<len;i++) mem[i] = 0; } void* MEM_Alloc( int len ) { char *p; char *mem; mem = Memory; if( len > RemainLen-1 ) { RemainLen = PAGE_SIZE*PAGES; Pos = 0; MEM_Set(mem,len); return mem ; } RemainLen -= len; p = mem+Pos; MEM_Set(mem+Pos,len); Pos += len; return p ; } void MEM_Free(char *data) { ; } void MEM_Release() { ; } /**/ static void * system_alloc(void *allocator_data, size_t size) { return MEM_Alloc(size); } static void system_free(void *allocator_data, void *data) { //free(data); MEM_Free(data); } static ProtobufCAllocator protobuf_c__allocator ; void initialize(void) { protobuf_c__allocator.MEM_Alloc = system_alloc; protobuf_c__allocator.MEM_Free = system_free; protobuf_c__allocator.allocator_data = NULL; } static void * do_alloc(ProtobufCAllocator *allocator, size_t size) { return allocator->MEM_Alloc(allocator->allocator_data, size); } static void do_free(ProtobufCAllocator *allocator, void *data) { if (data != NULL) allocator->MEM_Free(allocator->allocator_data, data); } /*********************************************************************************/ ProtobufCMessage * protobuf_c_message_unpack(const ProtobufCMessageDescriptor *desc, ProtobufCAllocator *allocator, size_t len, const uint8_t *data) { ProtobufCMessage *rv; if (allocator == NULL) allocator = &protobuf_c__allocator; rv = do_alloc(allocator, desc->sizeof_message);//rv = MEM_Alloc(desc->sizeof_message);// if (!rv) return (NULL); --------------------------------------- } 同样的问题,有没有大神帮忙看看 ,这样程序会跑飞!
woshi_ziyu 2015-03-30
  • 打赏
  • 举报
回复
//按小弟理解:这里的DEVICE_PROP是一种数据类型(例如char类型)               //该数据类型包含很多函数指针而已~这样理解正确吗??? -------------------- DEVICE_PROP定义成一个结构体struct
liuchang910781261 2015-03-30
  • 打赏
  • 举报
回复
引用 3 楼 wangfan027 的回复:
引用
0,0x40//那这里的0,0x40该如何理解?请大神指教~~~
对应最后2个成员的值,也就是 void* RxEP_buffer; 置NULL(0), 一般这样置零是为了程序里知道buffer有没有初始化,或者说在这个结构体初始化的过程中暂时无法给出buffer值, 所以先空着 uint8_t MaxPacketSize; 一包最大64字节 看来楼主最近在也在研究USB,
是啊,大神,想学习一下,只是还要学习C语言~~~
dceacho 2015-03-30
  • 打赏
  • 举报
回复
引用
0,0x40//那这里的0,0x40该如何理解?请大神指教~~~
对应最后2个成员的值,也就是 void* RxEP_buffer; 置NULL(0), 一般这样置零是为了程序里知道buffer有没有初始化,或者说在这个结构体初始化的过程中暂时无法给出buffer值, 所以先空着 uint8_t MaxPacketSize; 一包最大64字节 看来楼主最近在也在研究USB,
pathletboy 2015-03-30
  • 打赏
  • 举报
回复
勿在浮沙筑高台,这个是很基本的结构体类型和变量(初始化)申明,把C语言语法至少要通读一遍,在脑海中建立一个索引,这样碰到此类问题,可以有迹可循,更要学会搜索引擎,这个问题可以搜索关键词“结构体初始化”,看完即懂。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧