ここで、シリアル デバイスから出力を読み取る C コードを少し取得しました。現在、perl を使用してデバイスからデータを読み取っていますが、問題なく動作しますが、同じ仕事をするために C で何かを書きたいと思います。
これは私がこれまでに得たコードです。
#include<stdio.h> /* Standard input/output definitions */
#include<stdlib.h>
#include<string.h> /* String function definitions */
#include<unistd.h> /* UNIX standard function definitions */
#include<fcntl.h> /* File control definitions */
#include<errno.h> /* Error number definitions */
#include<termios.h> /* POSIX terminal control definitions */
#include<string.h>
#include<unistd.h>
char *buf;
int fd; /* File descriptor for the port */
int i,n;
int open_port(void)
{
fd = open("/dev/ttyUSB1", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
perror("cannot open");
}
else
fcntl(fd, F_SETFL, 0);
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B38400);
cfsetospeed(&options, B38400);
options.c_cflag |= (CLOCAL | CREAD);
tcsetattr(fd, TCSANOW, &options);
options.c_cflag &= ~CSIZE;
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
// options.c_cflag |= (IXON | IXOFF | IXANY); // xon & xoff on
return (fd);
}
int main(int argc) {
buf=malloc(4095);
open_port();
free(buf);
while(1){
read(fd,buf,128);
printf("%s\n",buf);
}
close(fd);
}
コンパイルして実行するとデータが出力されますが、表示されるデータはガベージ形式です... 0AEA4E2A のような読み取り可能な 16 進データが必要です...データを読み取り可能な 16 進数に簡単に変換する方法を誰もが知っていますコード?私はしばらくグーグルで調べてきましたが、実際には何もうまくいかないようです。
これは私が perl で行ったことです。
while ($timeout>0) {
my ($count,$saw)=$PortObj->read(1); # will read _up to_ 255 chars
if ($count > 0) {
$chars+=$count;
$buffer.=$saw; my $hex = unpack 'H*', $saw; printf ($hex);