Я испытал странную вещь. Извините за длинный текст …
Я запрограммировал прочти и напиши () функция для моих Uart Pins на Beaglebone Black.
Я заметил следующее поведение:
Когда я запускаю свою функцию read () в терминале через ssh на Beaglebone, он ждет, пока данные не будут получены. Я сделал это с помощью функции серийного тайм-аута. Поэтому, когда я жду, например, 2-3 секунды и отправляю некоторые данные с помощью команды echo в терминале echo «Test» >> / dev / ttyS2 моя функция чтения замечает это и показывает, что эти данные были отправлены.
Но теперь странная вещь:
Когда я делаю то же самое с моей функцией записи, тогда моя функция чтения говорит, что данных нет! Итак, еще раз. Сначала я запускаю функцию чтения, а затем выполняю функцию записи.
Но с другой стороны, когда я запускаю свою функцию записи FIRST, а затем функцию чтения, я могу получать данные. Но когда я перестаю отправлять и начинаю писать снова (функция чтения все еще активна), я не получу никаких данных. Я также не могу больше получать данные с помощью функции эха. Кажется, что функция записи приводит к краху всей UART-шины, когда я перезапускаю ее или когда она была выполнена после того, как функция чтения активна ….
Заранее спасибо.
Привет из Австрии.
Вениамин
Вот мой записывать функция:
#include<iostream>
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<termios.h> // using the termios.h library
#include<string.h>
using namespace std;
int main(){
int connection, flagWrite;
/*Open the UART2 Bus Connection on the BBB (TTYS2)
* Read and Write
* No Controlling Terminal
* More information for Open Time flags can be found here: http://www.gnu.org/software/libc/manual/html_node/Open_002dtime-Flags.html
*/
if ((connection = open("/dev/ttyS2", O_RDWR | O_NOCTTY))<0){
perror("UART: Failed to open the file.\n");
close(connection);
return -1;
}
struct termios options; // Declaration of the termios struct
memset(&options,0,sizeof(options)); //Clear the options structure
tcgetattr(connection, &options); //Sets the option parameters associated with file
// Set up the communications options, more information: http://linux.die.net/man/3/termios
options.c_cflag = B9600 | CS8 | CLOCAL; // Set the Control Mode: 9600 Baud, 8BIT, no modem control lines
options.c_iflag = 0; //Set the Input mode:
options.c_oflag = 0; //Set Output Mode:
options.c_lflag = 0; //Set Local Mode:
tcflush(connection, TCIFLUSH); //discard file information not transmitted
tcsetattr(connection, TCSANOW, &options); //changes occur immmediately
cfsetospeed(&options, B9600);
unsigned char transmit[19] = "Hello Beaglebone!"; //the string to send
transmit[19] = 13;
int i = 0;
while (i >= 0)
{
flagWrite = write(connection, &transmit,19); //send the string
tcdrain(connection);
if (flagWrite < 0){
perror("Failed to write to the output\n");
i = -1;
return -1;
}
i += 1;
usleep(500000);
cout << i << endl;
} // End while
return 1;
} //End main
Задача ещё не решена.