• 締切済み

RS232C通信について

PC-マイコン間の通信において マイコンから信号を受信するために ReadFile関数の第3引数を受信文字バイト数にしたところ, PC側のプログラムでReadFile関数を実行するごとに 受信文字が1バイトずつ右にずれるような受信をし始めました. 1ループ→"abcd" 2ループ→"dabc" 3ループ→"cdab" こちら側の意図としては ReadFile関数を一度実行すると, ReadFile関数の第2引数に上書きされるものだと思っていたのですが, 具体的にはどのように文字が格納されていくのでしょうか? また,あわせてWriteFile関数で文字列をマイコンに送信しているのですが, 上述の文字列と合体した状態で受信してしまいます. 具体的には char c[17]="abcdefghijklmnop"; char p[13]="100100100100"; ハンドルの指定 ループ始め ・・・ ReadFile (hCom, c, strlen(c), &dwRead, NULL); WriteFile (hCom, p, strlen(p), &wbyte, NULL); ・・・ ループ終わり ハンドルクローズ と記述しています. 仮にマイコン側から"abcdefghijklmnop"が送られてきた場合 cには 1ループ→"100100100100abcd" 2ループ→"100100100100pabc" です. どこに課題があるでしょうか よろしくお願いします.

みんなの回答

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

>ReadFile(hCom,c,strlen(c),&dwRead,NULL); strlenはその時点のcの文字列の長さですからね。cの変数の大きさではないですよ。 cの変数の長さを指定したいのならsizeof(c)-1ですね ReadFile(hCom,c,sizeof(c)-1,&dwRead,NULL);