LINUX.ORG.RU

Про удержание клавиши 2. Траблы :(


0

0

Добрый день. Опробывал сегодня этот код на железке. 
(сцылка на трэд: http://www.linux.org.ru/jump-message.jsp?msgid=1300647) Не работает :( Видимо в порт постоянно отсылается 0.
Почему, хрен его знает. То, что находится после:
      
 while (EOF == (c = fgetc(stdin))) {
                 outb(0x0000, 0x378); }

вроде как вообще не выполняется :(

Из-за чего может быть?


#include <stdio.h>
#include <error.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>
#include <termios.h>
#include <fcntl.h>


#ifdef __sparc__
#  error "This program can't compile or run on the Sparc platform"
#endif

#ifdef __alpha__
#include <sys/io.h> /* ioperm */
#endif

int main(int argc, char **argv) 
{
   int c;
   struct termios tio;
   tcflag_t old_lf;
   long old_fl;

   setuid(0);
   old_fl = (long) fcntl(0, F_GETFL);
   fcntl(0, F_SETFL, O_NONBLOCK);
   tcgetattr(0, &tio);
   old_lf = tio.c_lflag;
   tio.c_lflag &= ~(ICANON | ECHO);
   tcsetattr(0, TCSANOW, &tio);

   if (ioperm(0x378,1,1)) {printf("ioperm(): %s\n",strerror(errno)); exit(1);}

   do {   
       while (EOF == (c = fgetc(stdin))) {
                 outb(0x0000, 0x378); 
		
         }
      if (c==56) outb(0x0001, 0x378);
      if (c==50) outb(0x0002, 0x378);
      if (c==52) outb(0x0008, 0x378);
      if (c==54) outb(0x0004, 0x378);
      if (c==55) outb(0x0009, 0x378);
      if (c==57) outb(0x0005, 0x378);
      if (c==49) outb(0x0010, 0x378);
      if (c==51) outb(0x0006, 0x378);
       
  } while (c!=48);


   tcgetattr(0, &tio);
   tio.c_lflag = old_lf;
   tcsetattr(0, TCSANOW, &tio);
   fcntl(0, F_SETFL, old_fl);
   return 0;
}

outb на быстром компе не каждым осциллографом увидишь.
я ж вам вчера говорил - добавляйте usleep() и если даже
что-то проверите и заработает, то дальше лучше будет
юзать parport_pc+ppdev.

sts
()
Ответ на: комментарий от pisun

Обманул. Помогает если в usleep() передать >=10000.
Машина двигается как надо, но заметными рывками...

pisun
() автор топика
Ответ на: комментарий от pisun

А линукс и не обещает реалтайм из приложения ;)))
Критичные по времени вопросы надо разруливать в ядре
или своим драйвером или стандартными, которые я уже
назвал.

sts
()
Ответ на: комментарий от sts

vsem spasibo za bespokoistvo, postoraus' sam razrulit' ostatki.

pisun
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.