[英]error: argument of type "int" is incompatible with parameter of type "uint8_t *"
[英]argument of type “uint8_t” is incompatible with parameter of type “uint8_t *”
我正在嘗試在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 *”類型的參數不兼容
當我抑制Buffer
的*
時,代碼可以編譯但似乎不起作用(接收到的緩沖區值與預期值不符,但我可能對此有誤),實際上USB_OTG_ReadPacket
的第二個參數必須是指針所以我不明白為什么會發生此錯誤。
Buffer
變量的定義如下: uint8_t Buffer[6];
那么編譯器有問題嗎? 自從最初為Atollic創建項目代碼並將其復制到Keil以來,我是否需要處理特殊問題?
還是鏈接中僅僅是一個錯誤?
傳遞*Buffer
沒有意義,因為這與Buffer[0]
相同。 為什么首先要寫*Buffer
而不是Buffer[0]
? Buffer
甚至都沒有聲明為指針,那么為什么要取消引用它呢? (可以,但是看起來不正確。)
如果函數需要指針,則傳遞Buffer
是正確的,因為它的含義與&Buffer[0]
。
嘗試澄清您的問題。 您要傳遞給函數什么? 您是否要將其傳遞給Buffer數組中的第一個uint8_t元素? 在那種情況下,您想傳遞Buffer[0]
或*Buffer
(兩者含義相同。)還是要傳遞指向數組的指針? 在這種情況下,傳遞Buffer
或&Buffer[0]
(兩者都是等效的。)
如果您在同一行中查看文件usbd_hid_core.c.bak
,您會發現在那里,作者正在正確調用該函數:
USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE*)pdev, Buffer, HID_OUT_PACKET);
由於已將其聲明為數組,因此僅需出於提到Nikos C.的原因傳遞變量名稱即可。 有關傳遞函數指針的更多信息,請參見此Daniweb線程文章 。
如果未收到期望值,則需要調試該信息流。 我建議將Buffer
添加到Watch窗口,並逐步執行程序以查看Buffer
的值實際是什么,以及該值是否在某個意外點發生了變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.