Передача данных между COM-портами

Автор: Sloth Дата: 11.09.2003 16:05 Доброго времени бодорствования всем!

Вопрос возник следующего содержания.
Понадобилось мне чтобы моя программулина передавала данные между /dev/ttyS0 и /dev/ttyS1.
Если в кратце пояснить зачем это надо, то есть два девайса которые общаются по RS232, так вот мне надо отследить какими командами они обмениваются.
Написал небольшую прогу. В результате, ради проверки соединяю COM1 и COM2 кабелем, запускаю прогу (т.о. организую петлю и программную и аппаратную), другой прогой посылаю в порт сообщение. Так вот, если я посылаю сообщение в /dev/ttyS0, то все идет, как логично было бы предположить, это сообщение бесконечно мотается из /dev/ttyS0 по кабелю в /dev/ttyS1 далее программно в /dev/ttyS0, и опять по кабелю, и т.д.. А вот если я посылаю изначально сообщение в /dev/ttyS1, то после первого шага весь процесс стопориться. Т.е. сообщение на /dev/ttyS0 принимается по (с кабеля) и программно отправляется на /dev/ttyS1 без каких-либо ошибок. Дальше тишина ...
Забыл добавить, что сообщения во втором случае (когда посылаются изначально на /dev/ttyS1 появляются на терминале с которого запущенна приклада Грустный

Немного поковырявшись обнаружил такую ерунду:
(Девайсы пересылаются сообщениями по 5 байт) После приема на /dev/ttyS0 5-го байта дескриптор /dev/ttyS1 обнуляется. Потом, когда он используется для отсылки сообщения, имеет значение 1.
Получается что где-то адресное пространство двух переменных пересекается чтоль?

P.S. Работа с COM-портами ведется через массив. Вот это меня и настораживает Грустный
Re: Передача данных между COM-портами 11.09.2003 16:30Sloth Абсолютно утвердительно что дело в массиве элементов класса RS232Handle:

#define BUFFERSIZE 5

class RS232Handle {
public:
int Descriptor;
unsigned int RecvCount; // Счетчик принятых из COM-порта байтов
char DeviceName[11]; // Длинна имени устройства не превышает 11 символов
RS232Handle();
~RS232Handle();
void Init(const char *Device);
int Read();
void Write(char *WriteBuffer);
int ReadBuffer(char *RecvBuffer);
void Close();
private:
char Buffer[BUFFERSIZE];
int ParityCheck();
void ClearBuffer();
};

RS232Handle RS232Array[2]; // Два хендла COM-портов

поскольку смена этих элементов местами (т.е. когда дескриптор COM2 стоит 0-ым элементом, а COM1 - 1-ым) приводит к абсолютно противоположному результату.
В связи с чем вопрос как ПРАВИЛЬНО сделать массив таковых элементов?
Re: Передача данных между COM-портами 11.09.2003 17:37Sloth Все, разобрался сам! Сглючило меня при работе с Buffer[BUFFERSIZE]. Переполнение строки там было Улыбка
RSS-материал