はじめに、シリアルでログインしておかないとttyAMA0が叩けない。。。
VNC上のターミナルから以下のコマンドを叩いて、そのときのラズパイのシリアルポートのデータをモニタリングした。
echo "test" > /dev/ttyAMA0
出てきたデータは16進数で次の通り
7465 7374 0D0A
test[CR](\r)[LF](\n)
で、最初僕が勘違いして、UNIX系はCRが改行コードかと思い(TeraTermの改行コード設定がCRだったから)、CR受信までバッフアリング、CR受信でmbedのUSBシリアルへ出力とやっていた。
ところがそうすると2回echoを実行したときに、
test
[改行]
test
と表示される。
CRまでバッフアリング、送出とやった後に、LFを受信するため、バッファの先頭が[LF]になってしまう。その後またtest[CR]まで受信するため、次に表示するときは
[LF]test[CR]となってしまうので、上記のように間に改行が入ることになる。
ただ、不思議なのがTeraTermの改行コードの設定だ。
[CR]でも[LF]でも正常に表示するが、受信しているデータは[CR][LF]だ。
ならTeraTermも[CR][LF]にすべき、と思うのが自然だが・・・
test
[改行]
test
[改行]
無駄に改行が入ってる。。。
改行コードを[LF]に設定すると
test
test
意図した通りの表示。
んじゃ[CR]に設定すると?
test
test
なんでやねん('A`)
[CR]のあとに[LF]あるから、[CR][LF]と同じような表示になると思ったのだが・・・。
うーん。。。
とりあえず[LF]なら正解ってことかなあ。
0 件のコメント :
コメントを投稿