这两个结构体的意思?
下面两个结构体是在Harmony V1.0中的 USB HOST中看到的,第一个结构体是函数指针列表,但这些函数指针并没有对应的同名函数。第二个结构是似乎是将第一个结构体中的函数指针对应到实际的函数。是不是这样呢? 标准的C能这样用还是Microchip编译器环境中的一种特殊用法?第一个结构体:
typedef struct _SYS_FS_MEDIA
{
/* If the media object is in use or is it free */
bool inUse;
/* Media driver index. The index is used to open the media driver */
SYS_MODULE_INDEXindex;
/* List of functions for the media driver */
const SYS_FS_MEDIA_FUNCTIONS * mediaDriverFunctions;
/* State of the media (Registered,opened, attached, analyzed) */
SYS_FS_MEDIA_STATE mediaState;
/* Media driver object. This object is used to run the media task routine */
SYS_MODULE_OBJ mediaDriverObject;
/* Handle received after the media driver is opened */
DRV_HANDLEmediaDriverClientHandle;
/* Type of the media */
SYS_FS_MEDIA_TYPE mediaType;
/* Handle received when trying to read or write a sector from the media */
SYS_FS_MEDIA_BUFFER_HANDLEmediaBufferHandle;
/* Status of media -- attached or detached */
SYS_FS_MEDIA_STATUS mediaStatus;
/* Number of partitions available in the media */
uint8_t numberOfPartitions;
/* Number identifying the media. This is a alphabet name for each media. It
starts with a, b etc. */
uint8_t mediaId;
/* This is a count for media. For every new media (any type) registered, this
counter is assigned a new value */
uint8_t mediaCounter;
/* Number of volumes that can be assigned in the present media. This reflects
the number of partitions available on the media */
uint8_t volumeCounter;
}
SYS_FS_MEDIA;
第二个结构体:
SYS_FS_MEDIA_FUNCTIONS scsiUSBMediaFunctions =
{
.mediaStatusGet = USB_HOST_SCSI_MediaStatusGet,
.sectorRead = USB_HOST_SCSI_SectorRead,
.sectorWrite = USB_HOST_SCSI_SectorWrite,
.bufferStatusGet = USB_HOST_SCSI_BufferStatusGet,
.open = USB_HOST_SCSI_Open,
.close = USB_HOST_SCSI_Close,
.tasks = USB_HOST_SCSI_Task_FS,
}; 第一个是结构体定义;
第二个是结构体变量,同时在定义此变量的时候将内部成员初始化。 初始化使用的C99标准。 techbaby 发表于 2014-9-17 10:49
第一个是结构体定义;
第二个是结构体变量,同时在定义此变量的时候将内部成员初始化。 初始化使用的C99标 ...
有这样一个定义:volatile SYS_FS_MEDIA *media;
那么下面这条语句调用的函数其实是 USB_HOST_SCSI_BUFFER_HANDLE USB_HOST_SCSI_SectorWrite (参数)这个函数?
因为在源文件中有 USB_HOST_SCSI_BUFFER_HANDLE USB_HOST_SCSI_SectorWrite (参数)函数的定义,并没有定义sectorWrite()函数。
media->mediaDriverFunctions->sectorWrite(media->mediaDriverClientHandle, sector, dataBuffer, noSectors); techbaby 发表于 2014-9-17 10:49
第一个是结构体定义;
第二个是结构体变量,同时在定义此变量的时候将内部成员初始化。 初始化使用的C99标 ...
能详细说说第二个结构体变量吗,最好贴些资料上来,搜不到详细资料 YZY0707 发表于 2014-9-17 13:37
有这样一个定义:volatile SYS_FS_MEDIA *media;
那么下面这条语句调用的函数其实是 USB_HOST_SCSI_BUF ...
对的。
说白了,就是函数指针。函数指针被赋值后,执行此指针就是执行此指针指向的函数。 majialou 发表于 2014-9-17 13:58
能详细说说第二个结构体变量吗,最好贴些资料上来,搜不到详细资料
知道怎么用的就行了。
再说,你应该找LZ要详细定义啊。我可没有啊! majialou 发表于 2014-9-17 13:58
能详细说说第二个结构体变量吗,最好贴些资料上来,搜不到详细资料
我是在Microchip 的Harmony 库中看到的,库中有很多这种用法。第二个结构体定义的时初始化比较好理解,就是第一个结构体中的指针链接到第二中的指针理解起来有点变扭。查看程序上下文,应该就是这种链接关系。 techbaby 发表于 2014-9-17 14:10
对的。
说白了,就是函数指针。函数指针被赋值后,执行此指针就是执行此指针指向的函数。 ...
谢谢!看来对C语言还是知之甚少啊。 YZY0707 发表于 2014-9-17 16:27
谢谢!看来对C语言还是知之甚少啊。
在论坛或者 baidu 搜索下
高质量C++/C编程指南 (林锐 版本)
花点时间,认真研读下,相信对C,会有一个清晰的认知。 security 发表于 2014-9-17 17:25
在论坛或者 baidu 搜索下
高质量C++/C编程指南 (林锐 版本)
花点时间,认真研读下,相信对C,会有一个清 ...
嗯嗯, 好书要多看啊,挤出时间来看。 第一个是结构体原型,第二个是结构体定义和初始化。风格同linux风格。
页:
[1]