驱动移植时的一段古怪程序,可能和对齐有关,请大侠看看
在调用dfu_get_status中的usb_control_msg函数后,返回的status结构体status->bState不对,应为5,可是返回为117,后在dfu_get_status中添加了两个数组,返回同样的值,第二个数组返回正确,但
如果把第一个数组屏蔽,则第二个数组返回正确不正确。
struct dfu_status {
unsigned char bStatus;
unsigned char bwPollTimeout[3];
unsigned char bState;
unsigned char iString;
} __attribute__((packed));
static
int dfu_get_status(struct dfu_ctx *ctx, struct dfu_status *status)
{
int result;
//unsigned char temp1[6];
u8 temp2[6];
struct usb_device *udev = ctx->udev;
// dbg("dfu_get_status()");
result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
DFU_GETSTATUS,
USB_TYPE_CLASS | USB_DIR_IN | USB_RECIP_INTERFACE,
0, /* Value */
0, /* Index */
status, /* Buffer */
sizeof(struct dfu_status), /* Size */
HZ);
printk("status %dn", status->bStatus);
printk("status %dn", status->bState);
printk("length %dn", sizeof(struct dfu_status));
/////////////////////////////////////////////////////////////////////////////////
/*result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
DFU_GETSTATUS,
USB_TYPE_CLASS | USB_DIR_IN | USB_RECIP_INTERFACE,
0, /
0,
temp1,
sizeof(struct dfu_status),
HZ);
printk("temp1 %dn", temp1[4]);*/
result = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
DFU_GETSTATUS,
USB_TYPE_CLASS | USB_DIR_IN | USB_RECIP_INTERFACE,
0, /* Value */
0, /* Index */
temp2, /* Buffer */
sizeof(struct dfu_status), /* Size */
HZ);
printk("temp2 %dn", temp2[4]);
////////////////////////////////////////////////////////////////////////
return result;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,应该和字节对其没有关系;
第二个数组之前返回正确,之后又不正确了,这说明错误很有可能应该不在这段代码中,有可能是其他代码中的错误引起这里的返回结果不正确吧。)