• 締切済み

incompatible pointer type

incompatible pointer type への対応方法を教えてください。 環境はMicrochipのXC16 Compiler V1.24です。 エラーの出る行は putsUART1("UART1 Test"); エラーは main.c:76:9: warning: passing argument 1 of 'putsUART1' from incompatible pointer type c:\program files (x86)\microchip\xc16\v1.24\bin\bin\../..\support\peripheral_24F/uart.h:396:45: note: expected 'unsigned int *' but argument is of type 'char *' となっています。 uart.hを見ると void __attribute__ ((section (".libperi"))) putsUART1(unsigned int *buffer); とあるので、求められているものと違う形のものを渡してしまっていることは分かります。 ところが、具体的にどう変更すればいいのかわかりません。 プログラムをどのように書き直したらエラーを無くすことが出来ますか? よろしくお願いします。

みんなの回答

回答No.2

putsUART1が要求するbufferがどのようなものかがわからないことには、対処方法はわかりません。 検索で出てきたUART用ライブラリの説明では、9bitモードというものがあるために1文字のデータを格納するのにchar1つでは足りないので、unsigned intを使用しているようです。それが原因なのであれば、単に送信したい文字列をバッファとして渡すのではだめな場合があります。 8bitモードの場合に、charの文字列と同等のものがbufferとして使用できるのであれば、キャストするか、もしくは同等以上のサイズのunsigned intのバッファを確保して、データをコピーすればいいでしょう。 8bitモードでも1文字にunsigned intのサイズを使用するのであれば、その方法(例えば先頭8bitを0にするなど)に合わせてバッファを作る必要があります。

giantstar
質問者

お礼

ありがとうございます。 わざわざunsigned intなのはそういう可能性があったんですね。 勉強不足でした。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

putsUART1((unsigned int *)"UART1 Test"); のようにunsigned int *でキャストしてあげればいいようです。 ただ、これはputsUART1()の引数の型が、なぜかunsigned int *のためのようですので、 同様の警告が他にあったからといって安直にキャストで済ましてしまうような癖はつけない方がいいです。

giantstar
質問者

補足

ありがとうございます。 そういう対処療法的な解決策でなく、根本的に解決するにはどう書いたらいいでしょう?

関連するQ&A