簡體   English   中英

“ uint8_t”類型的參數與“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM