코드 세그먼트:

코드 세그먼트:

직렬 포트에서 지속적으로 데이터를 읽고 이를 buf 및/또는 파일에 저장하려고 합니다. 또한 데이터는 ASCII가 아닌 16진수 문자 스트림입니다. 저는 데비안을 실행하는 칩을 사용하고 있습니다. 직렬 포트(UART)를 연결했습니다 /dev/ttyS0(데이터를 읽는 위치와 방법). C언어로 작성하려고 합니다.

데이터의 일부를 읽을 수 있지만 텍스트 파일에 쓸 수 없기 때문에 그것이 무엇인지 잘 모르겠습니다. 그리고 콘솔에서 인쇄하려고 하면 데이터가 16진수 제어 및 콘솔 인쇄 문자열. 16진수 문자를 인쇄할 수 있습니까?

그리고 계속해서 포트를 읽으려고 하면 버퍼는 첫 번째 값만 저장하고 모든 읽기에 대해 동일한 값을 표시(인쇄)하는데, 데이터 출력을 퍼티 창에 연결하면 데이터 흐름을 볼 수 있는데, Hexadecimal 장치 모니터링 도구를 사용하여 원시 데이터를 볼 때도 문자를 볼 수 있습니다.

직렬포트로 지속적으로 수신되는 데이터를 어떻게 저장하나요?

#debian version
$ cat /etc/issue
Debian GNU/Linux 8 \n \l

$ cat /etc/debian_version
8.6

코드 세그먼트:

main()
{
char *portname = "/dev/ttyS0" //Serial port connected(UART)
int fd = open (portname, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd < 0)
{
        perror ("error %d opening %s: %s", errno, portname, strerror (errno));
        return;
}
// *these two functions are used to set attributes for serial communication.*
set_interface_attribs (fd, B115200, 0);  // set speed to 115,200 bps, 8n1 (no parity)
set_blocking (fd, 0);                // set no blocking

char buf [100];
printf("Reading data on serial port");
int n;
while(1)
{
    n = read (fd, &buf, sizeof(buf));  // read up to 100 characters if ready to read
    puts(buf);
}
return 0;
}

인터페이스 설정

    tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;     // 8-bit chars
    // disable IGNBRK for mismatched speed tests; otherwise receive break
    // as \000 chars
    tty.c_iflag &= ~IGNBRK;         // disable break processing
    tty.c_lflag = 0;                // no signaling chars, no echo,
                                    // no canonical processing
    tty.c_oflag = 0;                // no remapping, no delays
    tty.c_cc[VMIN]  = 0;            // read doesn't block
    tty.c_cc[VTIME] = 5;            // 0.5 seconds read timeout

    tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl

    tty.c_cflag |= (CLOCAL | CREAD);// ignore modem controls,
                                    // enable reading
    tty.c_cflag &= ~(PARENB | PARODD);      // shut off parity
    tty.c_cflag |= parity;
    tty.c_cflag &= ~CSTOPB;                 //one stop bit
    tty.c_cflag &= ~CRTSCTS;

누구든지 도와줄 수 있나요? ! ! !

미리 감사드립니다...

관련 정보