我正在尝试在Keil上为STM32F4-Discovery编译USB HID example code。此代码允许我向称为“USB HID Demonstrator”的软件发送和接收消息。
但我在USBD_HID_DataOut
函数中遇到了问题。这一行:
USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE*)pdev, *Buffer, HID_OUT_PACKET);
给我一个错误:
错误#167:类型“uint8_t”的参数与参数不兼容 类型为“uint8_t *”
当我压缩*
的{{1}}时,代码编译但似乎不起作用(收到的缓冲区值与预期不符,但我可能会误认为)
实际上Buffer
的第二个参数必须是一个指针,所以我不明白为什么会出现这个错误。
USB_OTG_ReadPacket
变量定义如下:Buffer
编译器有问题吗?我是否必须处理将此项目代码复制到Keil的特殊问题,因为它最初是为Atollic创建的?
或链接中只是一个错误?
答案 0 :(得分:5)
传递*Buffer
没有意义,因为这意味着与Buffer[0]
相同。为什么你首先要写*Buffer
而不是Buffer[0]
? Buffer
甚至没有被声明为指针,那你为什么要取消引用呢? (你可以,但它看起来不正确。)
如果函数需要指针,则传递Buffer
是正确的,因为它与&Buffer[0]
相同。
尝试澄清您的问题。 你想要传递给函数的是什么?你想将它传递给Buffer数组中的第一个uint8_t元素吗?在这种情况下,你想传递Buffer[0]
或*Buffer
(两者都意味着相同的东西。)或者你想传递指向数组的指针?在这种情况下,传递Buffer
或&Buffer[0]
(两者都是等效的。)
答案 1 :(得分:1)
如果您在同一行查看文件usbd_hid_core.c.bak
,您可以看到作者正在正确调用该函数:
USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE*)pdev, Buffer, HID_OUT_PACKET);
由于它被声明为一个数组,你只需要传递变量名称,原因是Nikos C.提到的。有关将指针传递给函数的更多信息,请参阅this Daniweb thread post。
如果您没有收到预期值,则需要调试该信息的流程。我建议将Buffer
添加到“监视”窗口并逐步执行您的程序,以查看Buffer
中的值实际是什么以及它是否在某个意外点发生变化。