2

STM32F4-Discovery 用に Keil でUSB HID サンプル コードをコンパイルしようとしています。このコードにより、「USB HID デモンストレーター」と呼ばれるソフトウェアとの間でメッセージを送受信できます。

しかし、USBD_HID_DataOut機能に問題があります。この線:

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

エラーが表示されます:

エラー #167: 型 "uint8_t" の引数は、型 "uint8_t *" のパラメーターと互換性がありません

の を抑制する*Buffer、コードはコンパイルされますが動作しないようです (受信したバッファ値は期待されるものと一致しませんが、おそらくそれについて間違っている可能性があります)。実際には の 2 番目の引数はUSB_OTG_ReadPacketポインタでなければならないので、このエラーが発生する理由がわかりません。

変数は次のBufferように定義されます。uint8_t Buffer[6];

それで、コンパイラに問題がありますか?最初に Atollic 用に作成されたので、このプロジェクト コードを Keil にコピーする特別な問題に対処する必要がありますか?

それとも単純にリンク先が間違っているのでしょうか?

4

2 に答える 2

5

を渡すのは意味がありません。それは。*Bufferと同じ意味だからですBuffer[0]。そもそもなぜ書く*Bufferのではなく書くのですか?ポインタとしても宣言されていないのに、なぜそれを逆参照するのでしょうか。(できますが、正しく見えません。)Buffer[0]Buffer

関数がポインタを期待している場合Buffer、それは。と同じ意味であるため、渡すよりも正しい&Buffer[0]です。

あなたの質問を明確にしてみてください。関数に何を渡したいですかバッファ配列の最初のuint8_t要素を渡しますか?その場合、Buffer[0]または*Buffer(両方とも同じことを意味します)を渡したいですか、それとも配列へのポインターを渡したいですか?その場合は、合格Bufferまたは&Buffer[0](どちらも同等)。

于 2012-11-19T00:27:56.457 に答える
1

ファイルusbd_hid_core.c.bakの同じ行を見ると、作成者が関数を正しく呼び出していることがわかります。

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

配列として宣言されているため、Nikos C. が言及した理由で変数名を渡すだけで済みます。関数へのポインターの受け渡しの詳細については、この Daniweb スレッドの投稿を参照してください。

期待される値を受け取っていない場合は、その情報の流れをデバッグする必要があります。Bufferウォッチ ウィンドウに追加し、プログラムをステップ実行して、Buffer実際の値が何であるか、予期しない時点で変化しているかどうかを確認することをお勧めします。

于 2012-11-19T14:01:43.967 に答える