一百分求lINUX串口通讯不能发出'\1a'的问题

asphp 2005-05-31 11:27:47
我在做串口通讯时,一般的ASCII都能够发出去,但当我发出一个0x1a的时候,就不知道发出去什么了。是不是对于CTROL-Z有什么特殊的做法,或者在初始化的时候应该做好一个工作?
谢谢各位
...全文
356 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
asphp 2005-08-04
  • 打赏
  • 举报
回复
不好意思,是我处理的问题,硬件只接受\0x1a 我发了两个字符
leemuxiang 2005-06-10
  • 打赏
  • 举报
回复
blueflame(蓝色的火焰)同学回答过这个问题,注意下面的标示

0x11 is part of the XON/XOFF control bytes
VSTOP 0x13 XOFF ^S
VSTART 0x11 XON ^Q

options.c_iflag &= ~IXON;

c_iflag
BRKINT接到BREAK时产生SIGINT
ICRNL将输入的CR转换为NL
IGNBRK忽略BREAK条件
IGNCR忽略CR
IGNPAR忽略奇偶错字符
IMAXBEL在输入队列空时振铃
INLCR将输入的NL转换为CR
INPCK打开输入奇偶校验
ISTRIP剥除输入字符的第8位
IUCLC将输入的大写字符转换成小写字符
IXANY使任一字符都重新起动输出
IXOFF使起动/停止输入控制流起作用
IXON使起动/停止输出控制流起作用
PARMRK标记奇偶错

查一下,哪一个是0x1a。
leemuxiang 2005-06-10
  • 打赏
  • 举报
回复
options.c_iflag &= ~ICRNL;
options.c_iflag &= ~IXON;
options.c_iflag &= ~IXOFF;
asphp 2005-06-03
  • 打赏
  • 举报
回复
各位救我啊
asphp 2005-06-03
  • 打赏
  • 举报
回复
错了,是返回ERROR
asphp 2005-06-03
  • 打赏
  • 举报
回复
我没有调试过,不知道发出了什么东西,因为我是直接操作MODEM,需要0x1a来做为一条信息的结束,我用minicom可以发出这个字符,但用自己写的程序就返回0x1a
ssli 2005-06-02
  • 打赏
  • 举报
回复
换一种显示模式
积木 2005-06-02
  • 打赏
  • 举报
回复
1a 在ascii里面是文件结束的意思,
所以下面就是瞎猜的了
我怀疑你直接使用的是字符方式,而不是二进制的方式,如果使用二进制就会好很多。
nichotilikai 2005-06-02
  • 打赏
  • 举报
回复
Linux里面的串口操作有原始和加工二种方式,用来传送数据时要用原始方式,而且要对一些起控制作用的字节进行屏蔽,设置超时和接收字节数这二个参数来标识是否完成一次传输。
gettext 2005-06-02
  • 打赏
  • 举报
回复
"但当我发出一个0x1a的时候,就不知道发出去什么了。"
发成功了吗?没有成功错误信息是什么?
zygjkl 2005-06-02
  • 打赏
  • 举报
回复
我也有类似的问题: 我用
g_fd = open("/dev/ttyS1", O_RDWR);
if (g_fd < 1) {
printf("open() returned an error (%d). errno = %d\n",
g_fd, errno);
return 0;
}

retlen = write(g_fd, outbuf, len);

outbuf里若包含0x0A,收到方的数据会在0x0A前面插入0x0D;
很奇怪!不知为什么????
六个九十度 2005-05-31
  • 打赏
  • 举报
回复
用什么终端软件?
我只用过minicom
好像还有个kermit,不过我没用过

ascii可发,而0x1a发不了,我想原因可能是你的传输模式是7位数据加1位奇偶校验
实际应设成8位数据,最后加个停止位
blueflame 2005-05-31
  • 打赏
  • 举报
回复
http://cmpp.linuxforum.net/cman-html/man3/tcgetattr.3.html
asphp 2005-05-31
  • 打赏
  • 举报
回复
我查了,设置是正确的,我是自己写的代码初始化的时候是这样的

void SetDataBit (MOBILECOMM* pMobile,INT32 databit)
{
pMobile->termios_new.c_cflag &= ~CSIZE;
switch (databit) {
case 8:
pMobile->termios_new.c_cflag |= CS8;
break;
case 7:
pMobile->termios_new.c_cflag |= CS7;
break;
case 6:
pMobile->termios_new.c_cflag |= CS6;
break;
case 5:
pMobile->termios_new.c_cflag |= CS5;
break;
default:
pMobile->termios_new.c_cflag |= CS8;
break;
}
}

void SetStopBit (MOBILECOMM* pMobile,const char *stopbit)
{
if (0 == strcmp (stopbit, "1")) {
pMobile->termios_new.c_cflag &= ~CSTOPB; /* 1 stop bit */
}
else if (0 == strcmp (stopbit, "1.5")) {
pMobile->termios_new.c_cflag &= ~CSTOPB; /* 1.5 stop bits */
}
else if (0 == strcmp (stopbit, "2")) {
pMobile->termios_new.c_cflag |= CSTOPB; /* 2 stop bits */
}
else {
pMobile->termios_new.c_cflag &= ~CSTOPB; /* 1 stop bit */
}
}


void SetParityCheck (MOBILECOMM* pMobile,char parity)
{
switch (parity) {
case 'N': /* no parity check */
pMobile->termios_new.c_cflag &= ~PARENB;
break;
case 'E': /* even */
pMobile->termios_new.c_cflag |= PARENB;
pMobile->termios_new.c_cflag &= ~PARODD;
break;
case 'O': /* odd */
pMobile->termios_new.c_cflag |= PARENB;
pMobile->termios_new.c_cflag |= ~PARODD;
break;
default: /* no parity check */
pMobile->termios_new.c_cflag &= ~PARENB;
break;
}
}

INT32 SetPortAttr (MOBILECOMM *pMobile)
{

INT32 baudrate;
INT32 databit;
char *stopbit;
char parity;

baudrate=pMobile->baudrate;
databit=pMobile->databit;
stopbit=pMobile->stopbit;
parity=pMobile->parity;

bzero (&pMobile->termios_new, sizeof (pMobile->termios_new));
cfmakeraw (&pMobile->termios_new);
SetBaudrate (pMobile,baudrate);
pMobile->termios_new.c_cflag |= CLOCAL | CREAD; /* | CRTSCTS */
SetDataBit (pMobile,databit);
SetParityCheck (pMobile,parity);
SetStopBit (pMobile,stopbit);
pMobile->termios_new.c_iflag &= ~(XON);
pMobile->termios_new.c_lflag &=~(ICANON|ECHO|ECHOE|ISIG);
pMobile->termios_new.c_oflag &=~OPOST;
pMobile->termios_new.c_cc[VTIME] = 10; /* unit: 1/10 second. */
pMobile->termios_new.c_cc[VSUSP] = 0; /* Ctrl-z */
pMobile->termios_new.c_cc[VMIN] = 0; /* minimal characters for reading */
tcflush (pMobile->fd, TCIFLUSH);
return (tcsetattr (pMobile->fd, TCSANOW, &pMobile->termios_new));
}

Web应用模式在开发Web应用中,有两种应用模式:前后端不分离在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。 前后端分离在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。在前后端分离的应用模式中 ,前端与后端的耦合度相对较低。在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。作为一名全栈项目的开发者, 开发标准的 REST 接口,需要用到 Django Rest framework。Django REST framework是构建WebAPI的强大而灵活的工具包。对于开发者来说这个WebAPI来说极具可用性。认证策略(Authentication)包括包OAuth1a和OAuth2。串行化(Serialization)同时支持ORM和non-ORM数据。可定制化的基于函数的常规视图,不需要更多的其他的功能。众多的文件以及社区大力支持,被国际认可的公司所使用和信任,包括Mozilla, Red Hat, Heroku, and和Eventbrite. 

23,115

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧