2012-11-18 392 views
2

我正試圖在Keil上編譯一個針對STM32F4-Discovery的USB HID example code。該代碼允許我發送和接收來自稱爲「USB HID演示器」的軟件的消息。類型「uint8_t」的參數與類型爲「uint8_t *」的參數不兼容

但我在USBD_HID_DataOut函數有問題。行:

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

給我一個錯誤:

error #167: argument of type "uint8_t" is incompatible with parameter of type "uint8_t *"

當我抑制Buffer*,代碼編譯,但似乎並沒有工作(接收到的緩衝值不匹配什麼是預期的,但我也許錯了) 實際上USB_OTG_ReadPacket的第二個參數必須是一個指針,所以我不明白爲什麼會出現這個錯誤。

Buffer變量定義如下:uint8_t Buffer[6];

那麼,有沒有與編譯器有問題?自從首次爲Atollic創建該項目代碼後,是否必須處理將該項目代碼複製到Keil中的特殊問題?

或者鏈接中是否有簡單的錯誤?

回答

5

通過*Buffer沒有意義,因爲這意味着與Buffer[0]相同。爲什麼你會首先編寫*Buffer而不是Buffer[0]Buffer甚至沒有被聲明爲一個指針,所以你爲什麼要解除引用它? (你可以,但它看起來不正確。)

如果函數需要一個指針,比傳遞Buffer是正確的,因爲它意味着與&Buffer[0]相同。

試着澄清你的問題。這是什麼想傳遞給函數?你想把它傳遞給Buffer數組中的第一個uint8_t元素嗎?在這種情況下,你想通過Buffer[0]*Buffer(兩者意味着同樣的事情)。或者你想傳遞一個指向數組的指針嗎?在這種情況下,通過Buffer&Buffer[0](兩者是等同的。)

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添加到Watch窗口並逐步瀏覽您的程序,以查看您的Buffer實際上的價值以及它是否在某個意外的位置發生變化。

相關問題