方法を聞かないでください-私は少しもしていません。
次のコードは、静的チェックツールの警告を表示せずに、端末と使用しているランタイム分析ツールをクラッシュさせます。Valgrind、cppcheck、およびgdbは、私に少し良いことをしてくれました。g++-壁は私に有用なものを何も与えません。
このコードの目的は、USBシリアル接続を介してaudrinoに文字を書き込むことです。audrinoアドレスが最初の引数として渡されます。unsigned intが渡され、unsignedcharにキャストされます。
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <iostream>
using namespace std;
int main(int argc,char** argv){
struct termios stdio;
int tty_fd;
unsigned char ctrlChar;
unsigned int ctrlInt;
tty_fd=open(argv[1], O_RDWR | O_NONBLOCK);
tcgetattr(tty_fd, &stdio);
cfmakeraw(&stdio);
stdio.c_cc[VMIN] = 1;
stdio.c_cc[VTIME] = 0;
tcsetattr(tty_fd,TCSANOW, &stdio);
tcsetattr(tty_fd,TCSAFLUSH, &stdio);
fcntl(tty_fd, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | O_NONBLOCK);
cfsetospeed(&stdio,B9600); // 9600 baud
cfsetispeed(&stdio,B9600); // 9600 baud
cout << "ready on " << argv[1] << endl;
scanf("%u", ctrlInt);
cout <<"recieved initial read.\n";
while (ctrlInt < 256){
ctrlChar = ((char) ctrlInt);
cout << ctrlInt << ctrlChar << endl;
write(tty_fd,&ctrlChar,1);
cout << "sent to audrino.\n";
scanf("%u", ctrlInt);
}
cout << "done!" << endl;
close(tty_fd);
return 0;
}
さて、これは正気だと思われる機会に、バグレポートを提出します。
システム仕様:「g ++-g-Wallcode.c」でコンパイルされた最新のArchlinux64ビット