Beagle Boneシリアルポートを使用しています。他のボードから送信されたデータの一部を読み取るためにCプログラムを作成しましたが、理解できないことが発生しました。
プログラムを実行するときに「screen」コマンド(screen /dev/ttyOX)を最初に実行しないと機能しません。何が起こっているのか、なぜ「スクリーン」を最初に実行するのかを専門家に知りたいのです。この問題を解決するのに役立ちますか?
私のコードは次のとおりです
#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <errno.h>
struct termios SerialPortSettings;
static int configureUART_Port(const char* pDevice);
void main()
{
int lSerialPort;
lSerialPort = configureUART_Port("/dev/ttyO4");
char buf[2]="";
int bytesRead = 0;
printf("Attempt to read\r\n");
bytesRead = read(lSerialPort, buf, 2);
printf("BytesRead : %d\r\n",bytesRead);
close(lSerialPort);
}
static int configureUART_Port(const char *pDevice){
static int lSerialPort = 0;
lSerialPort = open(pDevice, O_RDWR | O_NOCTTY);
if(lSerialPort == -1)
printf("\n Error! in Opening ttyO4\n");
else{
printf("Port Successfully oppened\r\n");
tcgetattr(lSerialPort, &SerialPortSettings);
/*Setea La velocidad Tx/Rx*/
cfsetispeed(&SerialPortSettings,B9600);
cfsetospeed(&SerialPortSettings,B9600);
/*Parity Bit 0 HC-05*/
SerialPortSettings.c_cflag &= ~PARENB;
SerialPortSettings.c_cflag &= ~CSTOPB;
/*Configure 8 bits por byte*/
SerialPortSettings.c_cflag &= CS8;
SerialPortSettings.c_cflag &= ~CSIZE; /* Clears the Mask */
SerialPortSettings.c_cflag |= CS8;
SerialPortSettings.c_cflag &= ~CRTSCTS;
SerialPortSettings.c_cflag |= CREAD | CLOCAL;
SerialPortSettings.c_iflag &= ~(IXON | IXOFF | IXANY);
SerialPortSettings.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG);
SerialPortSettings.c_cc[VMIN] = 2;
/*Wait for data*/
SerialPortSettings.c_cc[VTIME] = 0;
/*Update configuration*/
tcsetattr(lSerialPort,TCSANOW,&SerialPortSettings);
}
return lSerialPort;
}
答え1
解決策が見つかりました。実行時にscreen
有効になります。オリジナルモード。有効にするようにプログラムコードを変更しましたが、うまくいきます。
ところで、それはへのシンボリックリンクです。ttyOx
ttySx
ありがとう