moonsuns
驱动牛犊
驱动牛犊
  • 注册日期2003-03-27
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1179回复:4

问一个比较弱的问题,请指教

楼主#
更多 发布于:2003-09-17 17:18
//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 这一句是什么意思。或者整个是什么意思
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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();

}
moonsuns
驱动牛犊
驱动牛犊
  • 注册日期2003-03-27
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-18 07:48
我懂了,多谢大哥了
好人呀
moonsuns
驱动牛犊
驱动牛犊
  • 注册日期2003-03-27
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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 在那里找的到
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝1
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-09-18 09:22
 DriverObject->MajorFunction[IRP_MJ_CREATE] = win32_Create;
    DriverObject->MajorFunction[IRP_MJ_WRITE] = win32_Write;
    DriverObject->MajorFunction[IRP_MJ_READ] = win32_Read;

在问一下,着几句是什么意思。
WIN32_CREATE 在那里找的到


win32_Create 是你自己定义的分发例程。
你的认可是对我最大的鼓励!
游客

返回顶部