阅读:1180回复:4
问一个比较弱的问题,请指教
//USB标准请求
code void (*StandardDeviceRequest[])(void) = { get_status, clear_feature, reserved, set_feature, reserved, set_address, get_descriptor, reserved, get_configuration, set_configuration, get_interface, set_interface, reserved, reserved, reserved, reserved }; 其中CODE 这一句是什么意思。或者整个是什么意思 |
|
沙发#
发布于:2003-09-17 21:23
这是一个函数指针数组,(你提供的好像不是原来的函数,你改动过了)就是把一些函数的入口地址放到一个指针数组里,如果要调用某个函数的话直接指定数据的元素即可,如果你想调用get_descriptor,那么可以用(*StandardDeviceRequest[6])();即可执行void get_descriptor(void)函数
这个定义原来的样子是: code void (*StandardDeviceRequest[])(void) = { Chap9_GetStatus, Chap9_ClearFeature, Chap9_StallEP0, Chap9_SetFeature, Chap9_StallEP0, Chap9_SetAddress, Chap9_GetDescriptor, Chap9_StallEP0, Chap9_GetConfiguration, Chap9_SetConfiguration, Chap9_GetInterface, Chap9_SetInterface, Chap9_StallEP0 } 里面的函数的定义在文件chap9.c里面 如果你觉得这样不能理解,可以在使用时改成如下的样子: void DeviceRequest_Handler(void) { unsigned char type = 0, req = 0; type = LSB(SUD[0]) & 0x60;//setup包的第一个字的低8位 req = MSB(SUD[0]) & 0xFF; if ((type == 0x00) && (req <= 0x0D)) switch(req) { case 0x00: Chap9_GetStatus(); break; case 0x01: Chap9_ClearFeature(); break; case 0x03: Chap9_SetFeature(); break; case 0x05: Chap9_SetAddress(); break; case 0x06: Chap9_GetDescriptor(); break; case 0x08: Chap9_GetConfiguration(); break; case 0x09: Chap9_SetConfiguration(); break; case 0x0a: Chap9_GetInterface(); break; case 0x0b: Chap9_SetInterface(); break; default: Chap9_StallEP0(); break; } else Chap9_StallEP0(); } |
|
板凳#
发布于:2003-09-18 07:48
我懂了,多谢大哥了
好人呀 |
|
地板#
发布于:2003-09-18 08:55
DriverObject->MajorFunction[IRP_MJ_CREATE] = win32_Create;
DriverObject->MajorFunction[IRP_MJ_WRITE] = win32_Write; DriverObject->MajorFunction[IRP_MJ_READ] = win32_Read; 在问一下,着几句是什么意思。 WIN32_CREATE 在那里找的到 |
|
地下室#
发布于:2003-09-18 09:22
DriverObject->MajorFunction[IRP_MJ_CREATE] = win32_Create; win32_Create 是你自己定义的分发例程。 |
|
|