Windows で COM ポートから行ごとにデータを読み込もうとしています。PuTTY では、COM 接続は問題ないように見えます。私のシリアル デバイス (MSP430 Launchpad) は、文字列 "Data" を 1 秒に 1 回出力します。ただし、単純な C プログラムを使用して COM ポートを読み取り、読み取ったバイト数を出力すると、データ自体が完全に壊れてしまいます。
0
6 Data
2 Data
4 ta
6 Data
3 Data
3 a
a
6 Data
6 Data
2 Data
と言っている行6 Data
は正しいですが (4 文字の場合は\r\n
)、完全なメッセージが含まれていない行はどうなるのでしょうか? documentationによると、ReadFile
デフォルトでは行全体を読み取る必要があります。これは間違っていますか? 自分でバッファリングして改行文字を待つ必要がありますか?
コードを実行するたびに、これらすべてのエラーが発生するわけではないことに注意してください。私はいくつかの実行を行い、さまざまなエラーをまとめました。私が使用しているコードは次のとおりです。
#include <windows.h>
#include <stdio.h>
static DCB settings;
static HANDLE serial;
static char line[200];
static unsigned long read;
static unsigned int lineLength = sizeof(line) / sizeof(char);
int main(void) {
int i = 10;
serial = CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE,
0, NULL,
OPEN_EXISTING,
0, NULL);
GetCommState(serial, &settings);
settings.BaudRate = CBR_9600;
settings.ByteSize = 8;
settings.Parity = NOPARITY;
settings.StopBits = ONESTOPBIT;
SetCommState(serial, &settings);
while(i) {
ReadFile(serial, &line, lineLength, &read, 0);
printf("%lu %s\n", read, line);
i--;
}
scanf("%c", &read);
return 0;
}
Visual Studio Express 2012 を使用して Windows 7 64 ビットでコンパイルされました。