2

我正在尝试在 Keil 上为 STM32F4-Discovery编译USB HID 示例代码。这段代码允许我向一个名为“USB HID Demonstrator”的软件发送和接收消息。

但是我的USBD_HID_DataOut功能有问题。该行:

USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE*)pdev, *Buffer, HID_OUT_PACKET);

给我一个错误:

错误 #167:“uint8_t”类型的参数与“uint8_t *”类型的参数不兼容

当我抑制*ofBuffer时,代码编译但似乎不起作用(收到的缓冲区值与预期不匹配,但我可能错了)实际上第二个参数 ofUSB_OTG_ReadPacket必须是指针所以我不'不明白为什么会发生此错误。

Buffer变量定义如下:uint8_t Buffer[6];

那么编译器有问题吗?自从它首次为 Atollic 创建以来,我是否必须处理将此项目代码复制到 Keil 中的特殊问题?

或者只是链接中有错误?

4

2 回答 2

5

通过 没有意义*Buffer,因为这意味着与 相同Buffer[0]。你为什么要写作*Buffer而不是Buffer[0]一开始?Buffer甚至没有声明为指针,那么为什么要取消引用它呢?(你可以,但它看起来不正确。)

如果函数需要一个指针,那么传递Buffer是正确的,因为它的含义与&Buffer[0].

试着澄清你的问题。想传递给函数的是什么?您想将 Buffer 数组中的第一个 uint8_t 元素传递给它吗?在这种情况下,你想传递Buffer[0]or *Buffer(两者的意思相同)或者你想传递一个指向数组的指针?在这种情况下,通过Buffer&Buffer[0](两者都是等价的。)

于 2012-11-19T00:27:56.457 回答
1

如果您查看文件usbd_hid_core.c.bak的同一行,您可以看到作者正确地调用了该函数:

USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE*)pdev, Buffer, HID_OUT_PACKET);

由于它被声明为数组,因此您只需要传递变量名称,原因 Nikos C. 提到。有关将指针传递给函数的更多信息,请参阅此 Daniweb 线程帖子

如果您没有收到预期值,则需要调试该信息的流程。我建议添加Buffer到 Watch 窗口并单步执行您的程序,以查看您的Buffer实际值是什么,以及它是否在某个意外点发生变化。

于 2012-11-19T14:01:43.967 回答