Как читать из последовательного порта Linux .... - PullRequest
0 голосов
/ 02 июля 2010

Я работаю над роботом, который должен управлять с помощью беспроводной последовательной связи. Робот работает на микроконтроллере (путем записи файла .hex). Я хочу управлять им с помощью моего Linux (Ubuntu) ПК. Я новичок в программировании последовательного порта. Я могу отправить данные, но не могу прочитать данные. несколько фрагментов кода, которые выполняются на микроконтроллере:

функция отправки данных

void TxData(unsigned char tx_data)

{   SBUF = tx_data;          //Transmit data that is passed to this function
    while(TI == 0);     //wait while data is being transmitted

}

Я отправляю данные через массив символов data_array [i]

  for (i=4;i<=6;i++)
  {   
     TxData(data_array[i]);
     RI = 0;              //Clear receive interrupt. Must be cleared by the user.
     TI = 0;        //Clear transmit interrupt. Must be cleared by the user.
   }

Теперь фрагмент кода из программы на C, работающей в Linux ...

> while (flag==0)  {
>      int res = read(fd,buf,255);
>      buf[res]=0; /* set end of string, so we can printf */
>      printf(":%s:%d\n", buf, res);
>      if (buf[0]=='\0') flag=1; 
       }

Распечатывает значение res = 0 .

На самом деле я хочу прочитать данные по буквам , чтобы выполнить вычисления и принять дальнейшее решение. Есть ли другой способ сделать это? Пожалуйста, помогите, потому что я не могу приступить к проекту.

Примечание. Если кто-то может предложить хороший учебный материал (код) для программирования последовательных портов в Linux, это поможет мне.

Спасибо ....

Ответы [ 2 ]

3 голосов
/ 02 июля 2010

Это хорошее руководство:

http://www.c -program.com / pdf / serialPort_Programming_c.pdf

Вызов чтения может вернуться без данных, и ошибкаустановить в EAGAIN.Вам нужно проверить возвращаемое значение и повторить цикл, чтобы снова прочитать, если вы ожидаете поступления данных.

0 голосов
/ 02 июля 2010

Сначала посмотрите на / proc / tty / driver / serial и убедитесь, что все настроено правильно (т.е. вы видите сигналы, которые должны видеть).Затем взгляните на страницу руководства для termios (3), возможно, вас заинтересует объяснение VMIN и VTIME.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...