USB SerialPort(デバッグ用)について
#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx int main() { //pc.format(8,Serial::Even,1); pc.baud(19200); while(1) { printf("Test"); wait(1); } }
これでUSBの232cからTestという文字が送信される。
ところで、1箇所不思議な落とし穴があった。 それは
printf("Test\r\n");
このコードだ。
なぜかCRLF(\r\n)を付けないとすぐにPCに送信されないという現象が起きてしまう。 これは意図してこうしているのか、いないのか。。
試しに
printf("Test");
こうすると、64byteくらいまとめて送ってくる。
printf("Test\r");
でも同じ。
どうやら\nを書き込むと送信するらしい。
試しに、次のようなコードを書いてみる。
#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx int main() { int i = 0; //pc.format(8,Serial::Even,1); pc.baud(19200); while(1) { printf("Test"); wait(1); if((i++ % 2) == 1) { printf("\n"); i = 0; } } }
そうすると2秒に1回 TestTestって送られてくる。
この仕様は痛いよなぁ。バイナリ通信とかうまく行かないんじゃないかなぁ。。。
2012/03/06 追記
昨日は忘れていたがSerialには、putcがあった。 これを使ってみた。
#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx const char* msg = "Test" int main() { int i = 0,cidx = 0,clen = 0; //pc.format(8,Serial::Even,1); pc.baud(19200); clen = strlen(msg); while(1) { for(cidx = 0; cidx < clen; cidx++) { pc.putc(msg[cidx]); } wait(1); if((i++ % 2) == 1) { printf("\n"); i = 0; } } }
そうすると、Testとtest\nが分割して1秒ごとに帰ってくる。 まあ、これでいいか。
2 comments on USB SerialPort(デバッグ用)について:
Please log in to post comments.
UNIX由来のシステムではprintfした文字列はバッファされており,'\n'の文字で画面に送られます.
http://www.geocities.co.jp/siliconvalley/6071/technic/49.html