직렬 포트 문제, 화면 조정이 제대로 되지 않으면 데이터를 얻을 수 없습니다

직렬 포트 문제, 화면 조정이 제대로 되지 않으면 데이터를 얻을 수 없습니다

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활성화됩니다.오리지널 모드. 활성화하도록 프로그램 코드를 변경했는데 작동합니다.

그건 그렇고, 그것은 에 대한 심볼릭 링크입니다.ttyOxttySx

감사해요

관련 정보