如何在C程序中通过串口终端读取二进制数据?我通过串口与嵌入式设备通信。默认情况下,嵌入式Linux使用此端口作为终端。但我想通过端口传输二进制数据(服务数据包)。我的/ etc / inittab文件有一个“getty”调用: console :: respawn:/ sbin / getty 115200 ttyS0我还有/ etc / passwd文件,其中“admin”用户在登录后启动我的“cli”应用程序: admin:8Mt / Jtxcyg8AY:1000:0:admin:/ tmp:/ tmp / cli运行程序之前我的默认ttyS0设置是:~ # stty -aspeed 115200 baud;stty: standard input
line = 0;intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ^J;eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff-iuclc -ixany -imaxbel -iutf8opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt-echoctl echoke~ #所以,在我的cli程序中,我执行以下操作:main (){
...
system("stty erase ^H);
system("stty -F /dev/ttyS0 -icrnl -ixon -ixoff -opost -isig -icanon -echo"); // enter in non-canonical (raw) mode
// What function do I need to use here to retrieve binary data (also symbols that > 0x7F) from /dev/ttyS0?
system("stty -F /dev/ttyS0 icrnl ixon ixoff opost isig icanon echo"); // go back to canonical mode
...
exit(0);}我尝试使用read()函数(使用unsigned char缓冲区)来获取二进制数据,但无法接收正确的数据。我还初步打开/ dev / ttyS0来获取file_descriptor并使用read()func。我的程序发送3个字节:0xAA,0x02,0xFE。但在syslog中,我总是看到设备收到错误的符号:0x98,0xE6,0x18。有什么事?如何获得正确的二进制数据?
2 回答
慕容708150
TA贡献1831条经验 获得超4个赞
我想我没有完全准备tty配置。以前我写了RS232toETH程序,并使用了所有这些工具,他们工作。但在那种情况下,我评论了在linux启动时启动控制台。只有我的应用程序使用/ dev / ttyS0。非常感谢锯末!:)你给了我一个主意。我想我会尝试解决方法(uuencode和uudecode / escape chars)。感谢您的时间。
添加回答
举报
0/150
提交
取消