首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux插入回车- linefeed而不仅仅是linefeed。

Linux插入回车- linefeed而不仅仅是linefeed。
EN

Stack Overflow用户
提问于 2018-09-12 20:42:19
回答 1查看 154关注 0票数 3

我正在嵌入式linux系统中通过UART接口编写ASCII命令。

首先,我用笔记本电脑测试了代码。嵌入式平台和笔记本电脑共享一个ftdi usb接口。在这两个平台上,代码应该是相同的(我认为)。

我正在创建一个字符串并像这样发送,

代码语言:javascript
复制
char cmd[MAX_STR_LEN];
sprintf(cmd,"r %02x %02x\n",chipAddr,naddr);
ssize_t bytes_tx = write(fd, (char *)cmd, strlen(cmd));
if (bytes_tx < 0){
    ERROR_PRINT("%s\n",strerror(errno));
    return -1;
}

当我在示波器上监视串行设备的输出时,当我从PC上运行代码时,我看到\n被正确地解释为0x0a

当我在嵌入式平台上运行相同的代码片段时,我看到\n被解释为0x0d 0x0a\r\n

如何强制嵌入式平台只发送\n0x0a?嵌入式平台正在运行用buildroot生成的LinuxKernel4.4.x。

在这里放置完整代码:https://pastebin.com/5dWhaaDv

无论是嵌入式目标还是笔记本电脑目标,

代码语言:javascript
复制
Connected to /dev/ttyUSB0
strlen 8 : r 40 00

tx cmd[0] = 72 r
tx cmd[1] = 20  
tx cmd[2] = 34 4
tx cmd[3] = 30 0
tx cmd[4] = 20  
tx cmd[5] = 30 0
tx cmd[6] = 30 0
tx cmd[7] = 0a 

bytes_tx = 8
sizeof(\n) : 4
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-13 00:07:18

问题是没有正确设置termios struct标志: c_oflag

来自termios ( Programming/termios )

代码语言:javascript
复制
 //
 // Output flags - Turn off output processing
 //
 // no CR to NL translation, no NL to CR-NL translation,
 // no NL to CR translation, no column 0 CR suppression,
 // no Ctrl-D suppression, no fill characters, no case mapping,
 // no local output processing
 //
 // config.c_oflag &= ~(OCRNL | ONLCR | ONLRET |
 //                     ONOCR | ONOEOT| OFILL | OLCUC | OPOST);
 config.c_oflag = 0;

它显然是在一个平台上初始化的,而不是在另一个平台上初始化的。感谢“KamilCuk”和“EugeneSh”因为我发现了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52303185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档