VVIV Опубликовано 11 сентября, 2007 Жалоба Поделиться Опубликовано 11 сентября, 2007 Подскажите, пожайлуста, как правильно работать с Com портом в Linux? Я так понимаю, что работа с Com портом напоминает работу с файлами. Попробывал сделать так: int com; if ((com=open("/dev/ttyS0",O_RDWR|O_NOCTTY))!=-1) { // com во время выполнения == 11 char s[5]="12345"; int i ; i=write(com,s,5); // i во время выполнения == 5 close(com); } вроде бы всё нормально. На самом деле эти 5 байт не уходят в порт. С чем это может быть связано? (Com порт исправен, проверял). Кроме этого пытался в терминале выполнить команду:# echo test>/dev/ttyS0 также безрезультатно, байты не уходят. У меня установлен Linux RedHard (устанавливал с дистрибутива от июня 2007) может какие-нибудь настройки надо сделать в самой ОС? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Sleeping Daemon Опубликовано 12 сентября, 2007 Жалоба Поделиться Опубликовано 12 сентября, 2007 VIV писал(а) Tue, 11 September 2007 18:20 Подскажите, пожайлуста, как правильно работать с Com портом в Linux? Я так понимаю, что работа с Com портом напоминает работу с файлами. Попробывал сделать так: int com; if ((com=open("/dev/ttyS0",O_RDWR|O_NOCTTY))!=-1) { // com во время выполнения == 11 char s[5]="12345"; int i ; i=write(com,s,5); // i во время выполнения == 5 close(com); } вроде бы всё нормально. На самом деле эти 5 байт не уходят в порт. С чем это может быть связано? (Com порт исправен, проверял). Кроме этого пытался в терминале выполнить команду:# echo test>/dev/ttyS0 также безрезультатно, байты не уходят. У меня установлен Linux RedHard (устанавливал с дистрибутива от июня 2007) может какие-нибудь настройки надо сделать в самой ОС? Надо порт настроить для начала. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
VVIV Опубликовано 12 сентября, 2007 Автор Жалоба Поделиться Опубликовано 12 сентября, 2007 А как? Что я должен для этого сделать? Предположительно: у меня должен существовать файл типа etc/rc.d/rc.serial и в нем строчка setserial /dev/ttyS0 irq5. Но в той сборке Linux я не нашел setserial. Настройка с помощью структуры termios для меня не важна. Так как мне важно, чтобы уходил хоть какой-то сигнал. Предположительно: при загрузке, Linux открывает порт, при завершении, Linux закывает порт. Вывод сделал на основании фиксации сигналов с порта в момент загрузки и завершения работы с Linux. Кроме этого процессе работы ОС Linux, не получается напрямую (через 0x3f8 работать с портом). Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Sleeping Daemon Опубликовано 12 сентября, 2007 Жалоба Поделиться Опубликовано 12 сентября, 2007 VIV писал(а) Wed, 12 September 2007 10:22 А как? Что я должен для этого сделать? Предположительно: у меня должен существовать файл типа etc/rc.d/rc.serial и в нем строчка setserial /dev/ttyS0 irq5. Но в той сборке Linux я не нашел setserial. Настройка с помощью структуры termios для меня не важна. Так как мне важно, чтобы уходил хоть какой-то сигнал. Предположительно: при загрузке, Linux открывает порт, при завершении, Linux закывает порт. Вывод сделал на основании фиксации сигналов с порта в момент загрузки и завершения работы с Linux. Кроме этого процессе работы ОС Linux, не получается напрямую (через 0x3f8 работать с портом). 1. Как Вы определили, что байты в порт не уходят? 2. Как Вы настроили Baud Rate, чётность и проч...? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
VVIV Опубликовано 12 сентября, 2007 Автор Жалоба Поделиться Опубликовано 12 сентября, 2007 У меня к ком. порту подцепленно спец. устройство, которое принимает электрические сигналы ( 2, 5 или 3,5) (поэтому скорость не важна) Если говорить о том как бы я стал устанавливать скорость, то написал (после открытия порта) нечто подобное: int com; struct termios newtermios,oldtermios; .... tcgetattr(com,&oldtermios); newtermios.c_flag=B9600|CS8|CREAD|CLOCAL|CRTSCTS; newtermios.c_iflag=IGNPAR|ICRNL; tcsetattr(com,&newtermios); Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.