2011-12-03 9 views
3

私はRS232経由でiRobot Createに接続されたザイリンクスVirtex-II Pro FPGAボードを持っています。printf生データをプリントするか、文字を送信しないようにプリントする

iRobotは、バイト整数のストリームをコマンドとして受け取ります。

私はprintfが実際にシリアルポートを介して送信することを知りました。(Hypterminalは何でも印刷できます)、printfを使ってデータをiRobotに送ることができます。

問題は、printfがASCII出力のためにデータをフォーマットするように見えますが、実際にはrawデータを送信することが本当に好きです。私はそれが送られた実際の0x80の値になりたい、

printf(%x %x %x, 0x80, 0x88, 0x08); 

しかし、その代わりに16進数は、フォーマットされたばかり:

私のような何かをしたいと思います。

アイデア?

+0

あなたのコンパイラは以下をサポートしていますか? 'printf(0x80,0x88,0x08);'? – Jeff

+0

または 'printf(" "、0x80,0x88,0x08); ' – Jeff

答えて

9

使用fwrite

char buf[] = { 0x80, 0x80, 0x80 }; 

fwrite(buf, 1, sizeof(buf), stdout); 

あなたは任意のファイルハンドルに書き込むことができます。 stdoutは、printfをミラーリングする例です。

Posixシステムでは、プラットフォーム固有のwrite関数を使用して、ファイル記述子に書き込むこともできます。

+0

これは良いことです!しかし、私は私のstdoutのアドレスを知らない、...私は掘り起こすことができると思う。私の考えは、RS232 RX出力のメモリアドレスを使用することです...それは正しいアイデアのように聞こえるのですか? – ZacAttack

+0

なぜ住所が必要ですか?以前は 'printf'を使ってうれしかったです。これは' fprintf(stdout、...) 'と同じです...今何が問題なのですか?あなたは最も確かに任意の乱数に書き込むことはできません。あなたが合法的に何とか得た 'FILE * 'でなければなりません。 –

+0

ええと私は今までprintfを使ってきましたが、stdio.hライブラリを含めることができないようですが、私のコンパイラはそれを気に入らないようです...私は..損失。 stdoutを使用するとエラーが発生し、ライブラリを含めてもエラーが発生します。 – ZacAttack

3

代わりにfwriteを使用します。 Printfは定義上、ASCIIプリンタです。

char buf[] = {0x80, 0x80, 0x80}; 
fwrite(buf, 1, 3, stdout); 

のようです。

9

代わりに"%c%c%c"の形式を使用してください。

関連する問題