powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / [Linux GCC] Помогите разобраться с Com портом
7 сообщений из 7, страница 1 из 1
[Linux GCC] Помогите разобраться с Com портом
    #37579199
Vint_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, не так давно возникла необходимость пересесть на линукс и написать программку для вывода данных на дисплейчик
GU140x32F-7806A, работающий через COM порт с такими настройками: 38400 N 1
Опыта работы с компортом в линуксе нет, но благо у гугла всегда что то да найдётся.
Через стороннюю программку для работы с ком портом можно без труда выводить данные, но как не пытался вывести через свою, ничего не выходит, молчит как партизан.
Вот пример моей функции, посылающая на /dev/ttyS0 данные
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
int sendTo(char *portName, const unsigned char *message, size_t len) {
	struct termios tio;
	int tty_fd;
	fd_set rdset;

	memset(&tio,0,sizeof(tio));
	tio.c_iflag=0;
	tio.c_oflag=0;
	tio.c_cflag=CS8|CREAD|CLOCAL;           
	tio.c_lflag=0;
	tio.c_cc[VMIN]=1;
	tio.c_cc[VTIME]=5;
	printf("Open %s\n", portName);
	tty_fd=open(portName, O_RDWR | O_NOCTTY | O_NONBLOCK);
	if(tty_fd == -1) {
		perror("Port not open");
		return -1;
	}
	cfsetospeed(&tio,B38400);
	cfsetispeed(&tio,B38400);

	tcsetattr(tty_fd,TCSANOW,&tio);

	int result;
	do {
		result = write(tty_fd, message,len);
		if(result == -1) {
			perror("Error");
			close(tty_fd);
			return -1;
		}		
		message += result;
		len -= result;
	} while(len > 0);

	close(tty_fd);
	return 0;
}



Так же пробовал через готовую либу http://cboard.cprogramming.com/networking-device-communication/119973-rs232-serial-port-library-linux-windows.html] RS232 serial port library for Linux
но тоже результата 0
...
Рейтинг: 0 / 0
[Linux GCC] Помогите разобраться с Com портом
    #37579369
JoFan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint_x,

Код: sql
1.
2.
	message += result;
	len -= result;



шо эта за бред ?

и перепиши свой код с анализом кодов возвратов, тогда и поговорим
...
Рейтинг: 0 / 0
[Linux GCC] Помогите разобраться с Com портом
    #37579425
Vint_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JoFan если не умеете работать с указателями, курите в сторонке.
Вопрос в другом. И "умного" из себя корчить не надо.
Этот "бред" сделан на случай, если не все байты проглотить устройство.
...
Рейтинг: 0 / 0
[Linux GCC] Помогите разобраться с Com портом
    #37579532
JoFan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint_xJoFan если не умеете работать с указателями, курите в сторонке.
Вопрос в другом. И "умного" из себя корчить не надо.
Этот "бред" сделан на случай, если не все байты проглотить устройство.

да, я ненавижу работать с указателями, это для меня как красная тряпка, т.к. это потенциальный источник ошибок
если устройство не проглотило заданное количество байт - я бы лучше вернул ошибку сразу

попробуй так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
termios tty;
tcgetattr(_handle, &tty);
	cfsetospeed(&tty, (speed_t)B38400);
	cfsetispeed(&tty, (speed_t)B38400);
	tty.c_cflag &= ~(CS5 | CS6 | CS7 | CS8);
	tty.c_cflag |= CS8;
	tty.c_cflag &= ~CRTSCTS;
	tty.c_iflag = IGNBRK;
	tty.c_lflag = 0;
	tty.c_oflag = 0;
	tty.c_cflag |= CLOCAL | CREAD;
	tty.c_cc[VMIN] = 1;  //Принимать каждый символ
	tty.c_cc[VTIME] = 0; //Блокироваться при пустом буфере
	tty.c_iflag &= ~(IXON|IXOFF|IXANY);
	tty.c_cflag &= ~(PARENB | PARODD);  //Без контроля
	tty.c_cflag |= CSTOPB; //2 стопа
tcsetattr(_handle, TCSANOW, &tty);
...
Рейтинг: 0 / 0
[Linux GCC] Помогите разобраться с Com портом
    #37579697
Vint_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JoFan, Спасибо.

С дисплеем связаться удалось. Оказываться проблема крылась совсем не в этом.
Почему то после последней команды дисплею (ttyS3) и до закрытия порта надо отправить на порт ttyS1 что нибудь и тогда всё заработает.
Не пойму, как они связанны, если физически подключен только один порт.

Сейчас сделал при помощи обёртки RS232 serial port library for Linux, как отлажу, перепишу полностью сам, что б лучше понимать работу портов в линухе.
...
Рейтинг: 0 / 0
[Linux GCC] Помогите разобраться с Com портом
    #37579777
Vint_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Методом тыка получилось следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
#include <stdlib.h>
#include <stdio.h>

#include <unistd.h>
#include "rs232.h"

void printBytes(const unsigned char *ptStr, size_t len) {
	while(len--)
		printf("%0.2x ", *ptStr++);
	printf("\n");
}

int main(int argc, char *argv[]) {

	int bdrate=38400;
	int serialNum = 3;
	int serialAlt = 1;

	if(argc < 2) return -1;

	char buffer[256];

	//CMD Clear 		0x0f 0x01
	//CMD Set Cursor 	0x0f 0x80

	sprintf(buffer, "\x0f\x01\x0f\x80%s", argv[1]);

	OpenComport(serialNum, bdrate);

	printf("Send: ");
	printBytes(buffer, strlen(buffer));

	SendBuf(serialNum, buffer, strlen(buffer));
	//
	OpenComport(serialAlt, bdrate);
	SendBuf(serialAlt, "\x0", 1);
	CloseComport(serialAlt);
	//
	CloseComport(serialNum);

   printf("END\n");
   return 0;
}

Ну вот понять ни как не могу, почему надо хоть что то отправить на порт 1 (ttyS1), что бы в дисплей пришли команды. В другом случае программка просто подвиснет
...
Рейтинг: 0 / 0
[Linux GCC] Помогите разобраться с Com портом
    #37580181
JoFan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vint_x,

может быть есть какая особенность этого дисплея, что он ждет 0xD и/или 0xA в конце ?

в последний раз я воспользовался библиотекой http://code.google.com/p/qextserialport/
посмотри как там реализуется работа именно в отношении инициализации и работы
для чистого C наверно тоже есть библиотеки, самому писать врятли целесообразно, разве что для изучения или если нельзя стороннее применять
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / [Linux GCC] Помогите разобраться с Com портом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]