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