コードセグメント:

コードセグメント:

シリアルポートから継続的にデータを読み込み、それをbufおよび/またはファイルに保存しようとしています。また、データはASCIIではなく16進文字ストリームです。私はDebianを実行するチップを使用しています。シリアルポート(UART)を接続しました/dev/ttyS0(データを読み取る場所と方法)。 C言語で作成しようとしています。

データの一部を読み取ることができますが、テキストファイルに書き込むことができないので、それが何であるかわかりません。そして、コンソールから印刷しようとすると、データは16進制御とコンソール印刷文字列です。 16進文字を印刷できますか?

そして、引き続きポートを読み取ろうとすると、バッファは最初の値だけを保存し、すべての読み取りに対して同じ値を表示(印刷)します。生データを見ても文字を見ることができます。

シリアルポートで継続的に受信されるデータをどのように保存しますか?

#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;

誰でも助けることができますか? ! ! !

事前にありがとう...

ベストアンサー1

おすすめ記事