驱动移植时的一段古怪程序,可能和对齐有关,请大侠看看

发布于 2022-07-22 21:56:48 字数 5400 浏览 7 评论 1

在调用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

贵在坚持 2022-07-24 07:06:31

首先,应该和字节对其没有关系;
第二个数组之前返回正确,之后又不正确了,这说明错误很有可能应该不在这段代码中,有可能是其他代码中的错误引起这里的返回结果不正确吧。)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文