Моя установка выглядит следующим образом: старая машина с Windows XP, у которой все еще есть реальный последовательный порт, и более новая машина с Windows 7, которая использует адаптер USB-Serial.Я пытаюсь запустить пример librs232 , который выглядит следующим образом:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include "librs232/rs232.h"
unsigned int err(unsigned int e);
unsigned int rs232_simple_test(void);
unsigned int err(unsigned int e)
{
printf("%s (%s)\n", rs232_strerror(e), errno > 0 ? strerror(errno) : "");
return e;
}
unsigned int rs232_simple_test(void)
{
unsigned int try = 0;
unsigned int bytes = 0;
unsigned char data[1];
unsigned int ret = 0;
struct rs232_port_t *p = NULL;
p = rs232_init();
if (p == NULL)
return 1;
#ifdef WIN32
rs232_set_device(p, "COM1");
#else
rs232_set_device(p, "/dev/ttyUSB0");
#endif
ret = rs232_open(p);
if (ret) {
rs232_end(p);
return err(ret);
}
rs232_set_baud(p, RS232_BAUD_9600);
printf("[*] port settings: %s\n", rs232_to_string(p));
rs232_flush(p);
while (try++ < 10) {
printf("%02d. [*] read: ", try);
data[0] = 0x00;
ret = rs232_read_timeout(p, data, 1, &bytes, 1000);
if (ret)
err(ret);
else
printf("0x%02x len: %d\n", data[0], bytes);
data[0] = 0x05;
bytes = 0;
printf("%02d. [*] write: ", try);
ret = rs232_write_timeout(p, data, 1, &bytes, 1000);
if (ret)
err(ret);
else
printf("len: %d\n", bytes);
}
rs232_end(p);
return 0;
}
int main()
{
return rs232_simple_test();
}
Этот код отправляет символ 0x05 на COM1 десять раз подряд.Я запускаю тестовую программу на моей машине с Win7.Однако на компьютере WinXP вывод выглядит так:
0x05
0x05
0x05
0x05
0x05
0x05
0x05
0x05
0x05
0x0500fc
Вы можете видеть, что в последней операции последовательной записи неожиданно оказалось на два байта больше (0x00fc), чем должно быть.Это почему?Откуда эти двое, пожалуйста?Я этого не понимаюКроме того, выходные данные тестовой программы, показанные выше, ясно показывают, что отправляется только 1 байт:
[*] port settings: device: COM1, baud: 9600, data bits: 8, parity: none, stop bits: 1, flow control: off
01. [*] read: timeout error (No such file or directory)
01. [*] write: len: 1
02. [*] read: timeout error (No such file or directory)
02. [*] write: len: 1
03. [*] read: timeout error (No such file or directory)
03. [*] write: len: 1
04. [*] read: timeout error (No such file or directory)
04. [*] write: len: 1
05. [*] read: timeout error (No such file or directory)
05. [*] write: len: 1
06. [*] read: timeout error (No such file or directory)
06. [*] write: len: 1
07. [*] read: timeout error (No such file or directory)
07. [*] write: len: 1
08. [*] read: timeout error (No such file or directory)
08. [*] write: len: 1
09. [*] read: timeout error (No such file or directory)
09. [*] write: len: 1
10. [*] read: timeout error (No such file or directory)
10. [*] write: len: 1
Так почему же на ПК WinXP поступает 3 байта в последней операции записи?
Я проверил, что настройки скорости передачи, битов данных, контроля четности, управления потоком и стоп-битами одинаковы на обеих машинах, и они также соответствуют скорости передачи данных, установленной в приведенном выше коде (9600 бод), поэтому я действительно понятия не имею, что там не так,Кто-нибудь здесь, кто может рассказать больше, пожалуйста?