Аналог Sleep в Linux
int c=0x55;
while(s!=0xA0)
{
int h=comm_tx(com,&c,1);
int u=comm_rx(com,(void*)&s,1);
//Вот тут бы задержечку
fprintf(stderr,"Answer form port - %d, bytes sent - %d, bytes read - %d\n",s,h,u);
}
Какой хвункцией можно приостановить выполнение программы на 10 милисекунд (чтоб она успела отрисовать свое окно?).
int c=0x55;
while(s!=0xA0)
{
int h=comm_tx(com,&c,1);
int u=comm_rx(com,(void*)&s,1);
//Вот тут бы задержечку
fprintf(stderr,"Answer form port - %d, bytes sent - %d, bytes read - %d\n",s,h,u);
}
man 3 usleep
man 3 usleep
Пасибо!!!
а я sleep смотрел она на секунду минимум может
Пасибо!!!
а я sleep смотрел она на секунду минимум может
маленький секрет. если бы вы набрали
man -k sleep
получили бы список мануаловЮ в которых упоминается слово sleep. в т. ч. и нужный вам мануал. так что учите никсы ;)
маленький секрет. если бы вы набрали
man -k sleep
получили бы список мануаловЮ в которых упоминается слово sleep. в т. ч. и нужный вам мануал. так что учите никсы ;)
Я получил Not Apportiate, но учить буду ;)
Еще вопрос - у меня прога виснет на read, тоесть таймауты и скорость порта устанавливаются, write() работает, а read() виснет.
chmod a+rw /dev/ttyS0 делал не помогает. Там более что другие проги без chmod работают.
Я получил Not Apportiate, но учить буду ;)
Еще вопрос - у меня прога виснет на read, тоесть таймауты и скорость порта устанавливаются, write() работает, а read() виснет.
chmod a+rw /dev/ttyS0 делал не помогает. Там более что другие проги без chmod работают.
chmod не трогайте. для работы с последовательным портом используйте ioctl
пример из жизни - проверяем наличие сигнала Data Terminal Ready (DTR)
#include <fcntl.h>
#include <sys/ioctl.h>
main() {
int fd, serial;
fd = open("/dev/ttyS0", O_RDONLY);
ioctl(fd, TIOCMGET, &serial);
if (serial & TIOCM_DTR)
puts("TIOCM_DTR is not set");
else
puts("TIOCM_DTR is set");
close(fd);
}
кстати, а какая у вас ОС? :) может читать вам надо с /dev/cuaXX?
chmod не трогайте. для работы с последовательным портом используйте ioctl
пример из жизни - проверяем наличие сигнала Data Terminal Ready (DTR)
#include <fcntl.h>
#include <sys/ioctl.h>
main() {
int fd, serial;
fd = open("/dev/ttyS0", O_RDONLY);
ioctl(fd, TIOCMGET, &serial);
if (serial & TIOCM_DTR)
puts("TIOCM_DTR is not set");
else
puts("TIOCM_DTR is set");
close(fd);
}
кстати, а какая у вас ОС? :) может читать вам надо с /dev/cuaXX?
:)
Linux 2.6.9
Я не писал модуль для сом с нуля, а взял из реально работающей программы (siefs). А c помощью ioctl я смогу послать в порт произвольшые данные любого размера, прочитать оттуда тоже любые данные любого размера? TЕсли да, то как?
В man ioctl написано смотреть в sys/ioctl.h , а там нет ничего кроме прототипа ioctl.
PS Раньше ЭТОТ ЖЕ КОД работал а сегодня утром перестал. Шайтан?
:)
Linux 2.6.9
Я не писал модуль для сом с нуля, а взял из реально работающей программы (siefs). А c помощью ioctl я смогу послать в порт произвольшые данные любого размера, прочитать оттуда тоже любые данные любого размера? TЕсли да, то как?
В man ioctl написано смотреть в sys/ioctl.h , а там нет ничего кроме прототипа ioctl.
PS Раньше ЭТОТ ЖЕ КОД работал а сегодня утром перестал. Шайтан?
Кстати в Вашем примере open возвращает -1...
Кстати в Вашем примере open возвращает -1...
И что? В случае неудачи open возвращает 0.
И что? В случае неудачи open возвращает 0.
man 2 open
man 2 open
Вы правы в этом - я чего-то протупил.
Зато в примере возвращается значение !=-1. Это у вас в системе что-то не срослось видимо.
Вы правы в этом - я чего-то протупил.
Зато в примере возвращается значение !=-1. Это у вас в системе что-то не срослось видимо.
под рутом надо программу запускать, или с suid
под рутом надо программу запускать, или с suid
Гм... У меня и не под рутом без suid нормально работает.
Гм... У меня и не под рутом без suid нормально работает.
write() выполняется и возвращает правильно число записанных байтов, а read() виснет.
Я думаю может в сторону select() копнуть? Кстати я так и не нашел как с ioctl() читать\писать порт. Ктонибудь знает?