“uint8_t”类型的参数与“uint8_t *”类型的参数不兼容

时间:2012-11-18 23:57:10

标签: c pointers embedded keil

我正在尝试在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创建的?

或链接中只是一个错误?

2 个答案:

答案 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中的值实际是什么以及它是否在某个意外点发生变化。