社区
Linux/Unix社区
帖子详情
AIX环境下串口读取问题
bnxf88
2005-11-03 03:28:14
请教各路高手:
我在AIX环境下对串口进行读写,读取的数据信息中包含字符0,比如读取的数据串为1134002332;
则在AIX环境下接收的数据会变成1134、2332;字符0的信息被丢弃;我看了串口的设置,其eol(换行命令符)=^@;在配置中指向为0;也即系统任务接收的字符00为换行符而丢弃了;同样的程序在SCO 环境下执行则没问题。
想请教各位高手,怎样设置AIX中的串口参数,使得其接收字符串中能包含00字符。
...全文
186
7
打赏
收藏
AIX环境下串口读取问题
请教各路高手: 我在AIX环境下对串口进行读写,读取的数据信息中包含字符0,比如读取的数据串为1134002332; 则在AIX环境下接收的数据会变成1134、2332;字符0的信息被丢弃;我看了串口的设置,其eol(换行命令符)=^@;在配置中指向为0;也即系统任务接收的字符00为换行符而丢弃了;同样的程序在SCO 环境下执行则没问题。 想请教各位高手,怎样设置AIX中的串口参数,使得其接收字符串中能包含00字符。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bnxf88
2005-11-10
打赏
举报
回复
怎再没有高手肯指教了呢,结贴了!
bnxf88
2005-11-07
打赏
举报
回复
谢谢blueflame(蓝色的火焰),我已试过你说的方法,将lflag 置位为~ICANON,
不过结果还是一样,真晕死了!
bnxf88
2005-11-04
打赏
举报
回复
不好意思,上面程序的接收部分是我测试时改的,有点问题,应是:
/*接收命令*/
while( iLen< 140 && i<3 )
{
sleep( 1 );
nread = read( fd, sbuff+iLen, 140-ilen);
iLen+=nread;
i+=1;
}
bnxf88
2005-11-04
打赏
举报
回复
我的程序代吗如下,恳请各位帮忙看看:
奇怪的是,同样的程序在SCO UNIX下运行则没有任何问题
/************************************************************
*函数名称:set_Parity
*函数功能:设置串口数据位,停止位和效验位
*函数参数:fd-打开串口的文件句柄,databits-数据位(=7,8),
* stopbits-停止位(=1,2),parity- 效验类型(=N,E,O, ,S)
*函数返回:0-OK,-1-FAIL
*函数说明:设置串口通信速率
*************************************************************/
int set_Parity( int fd,int databits,int stopbits,int parity )
{
int iRt;
struct termios options;
iRt=tcgetattr( fd,&options);
if( iRt != 0 )
{
return -1;
}
options.c_cflag &= ~CSIZE;
/*设置数据位数*/
switch( databits )
{
case 7:
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag |= CS8;
break;
default:
return -1;
}
switch (parity)
{
case 'n':
case 'N':
options.c_cflag &= ~PARENB; /* Clear parity enable */
options.c_iflag &= ~INPCK; /*Enable parity checking*/
break;
case 'o':
case 'O':
/*设置为奇效验*/
options.c_cflag |= (PARODD | PARENB);
options.c_iflag |= INPCK; /*Disnable parity checking*/
break;
case 'e':
case 'E':
options.c_cflag |= PARENB; /* Enable parity */
options.c_cflag &= ~PARODD; /* 转换为偶效验*/
options.c_iflag |= INPCK; /*Disnable parity checking*/
break;
case 'S':
case 's': /*as no parity*/
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
break;
default:
return -1;
}
/* 设置停止位*/
switch (stopbits)
{
case 1:
options.c_cflag &= ~CSTOPB;
break;
case 2:
options.c_cflag |= CSTOPB;
break;
default:
return -1;
}
/* Set input parity option */
if (parity != 'n')
{
options.c_iflag |= INPCK;
}
tcflush(fd,TCIFLUSH);
options.c_cc[VTIME] = 50; /* 设置超时5 seconds*/
options.c_cc[VMIN] = 0;
/* Update the options and do it NOW */
if( tcsetattr(fd,TCSANOW,&options) != 0)
{
return -1;
}
return 0;
}
/************************************************************
*函数名称:OpenDev
*函数功能:打开串口
*函数参数:Dev-对应串口
*函数返回:0-OK,-1-FAIL
*函数说明:打开串口
*************************************************************/
int OpenDev(char *Dev)
{
int fd;
fd = open( Dev, O_RDWR|O_NOCTTY ); /**| O_NOCTTY | O_NDELAY**/
return fd;
}
/************************************************************
*函数名称:Main
*函数功能:主函数?
*函数参数:argc,agrv[]
*函数返回:0-OK,-1-FAIL
*函数说明:读写串口
*************************************************************/
int main(int argc, char **argv)
{
int rc;
int fd;
int nread,iLen;
int i;
unsigned char sCmd[6];
unsigned char sbuff[256];
char sdev[32];
memset( sdev,0,sizeof( sdev ) );
sprintf( sdev,"%s",argv[1] );
/**打开串口**/
errno=0;
fd = OpenDev( sdev );
if( fd < 0 )
{
return -1;
}
/*设置波特率*/
rc=set_Speed( fd,9600);
if( rc )
{
return -1;
}
/**设置参数**/
rc=set_Parity( fd,8,1,'N');
if( rc )
{
WriteLog("Set Parity Error\n");
return -1;
}
memset( sCmd,0,sizeof( sCmd ) );
sCmd[0]=0x1;
sCmd[1]=0x1;
sCmd[2]=0x2;
sCmd[3]=0xFC;
sCmd[4]=0xFF;
errno=0;
/**发送命令**/
rc=write( fd, sCmd,strlen( sCmd ) );
if( rc>0 )
{
for(i=0;i<5;i++)
{
WriteLog( "sCmd[%ld]=%ld.\n",i,sCmd[i] );
}
}
else
{
return -1;
}
i=0;
nread=0;
iLen=0;
memset( sbuff,0,sizeof( sbuff ) );
/*接收命令*/
while( iLen< 140 && i<3 )
{
sleep( 1 );
nread = read( fd, sbuff+iLen, 1);
iLen+=nread;
i+=1;
}
close( fd );
/**对接收的数据进行处理**/
...
return 0;
}
blueflame
2005-11-04
打赏
举报
回复
呵呵,没什么好奇怪的,AIX是混有4.3BSD“血统”的,这跟SCO不同,不同内核版本在POSIX.1的基础上另外添加了一些特殊输入字符,具体楼主可以参见APUE的终端I/O部分,我记得里面有两个表是关于这些终端标志和特殊字符的。楼主试过之前我说的做法了吗?
blueflame
2005-11-03
打赏
举报
回复
估计跟你串口初始化时的lflag中没有~ICANON有关
hundlom
2005-11-03
打赏
举报
回复
把你读数据的代码贴出来看看
终端仿真程序终端仿真软件
pytty是一款运行于windows
环境
PC的国产终端仿真软件,支持标准telnet协议,ssh协议,R3232
串口
通信, 可以连接到任何telnet服务端,常用于登录远程的UNIX系统,linux系统,
AIX
系统. 对汉字有强大的支持能力。 对各种
串口
外设,并口外设,USB外设,
串口
卡等设备有强大的支持。本软件可安装在各种windows系统。 特性: (1)支持telnet, ssh1,
串口
(com口) 各种通讯方式 (2)仿真支持vt52 vt100 vt220 vt300 ansi等 (3)
串口
通讯支持COM1,COM2,COM3,COM4....COM256 (4)并口支持LPT1,LPT2,LPT3,LPT4......LPT256 (5)
串口
波特率支持110 到115200 (6)支持汉字显示、GB2312,GBK (7)特殊字符集,制表字符 (8)显示无汉字乱码(汉字智能调整) (9)支持各种
串口
、USB口外设连接 (10)支持磁卡机(磁条读写器)、密码键盘,
串口
打印机身份证阅读器、密押器、评价器等设备接入 (11)支持
串口
卡(
串口
扩展卡) (12)命令行支持拷贝粘贴 (13)支持24行、25行显示 (14)支持下划线、倍宽、倍高显示,高亮,保密等字符属性 (15)支持实达、长城、国光等主流厂家的外设控制命令 (16)自定义功能键,F1-F12 可提供服务 (1)二次开发,定制开发 (2)现场联调 (3)设备测试 (4)功能扩展
aix
linux操作系统,
AIX
--操作系统安装(
AIX
6.1)
前一段时间,胡哥我接到老板的任务,要在
AIX
系统上安装zabbix agent呀。可是胡哥只是玩过linux对于
AIX
这种需要硬件支持的才能玩的高端玩意可是从来没接触过呀,虽说linux是类unix,可是与unix系统还是有区别。有啥办法了,老板的命令,只能硬着上(老板可是花钱租来一台IBM的P740“小鸡”)。(
AIX
6.1的系统下载地址:链接:https://pan.baidu.com/s/...
查看linux下
串口
数据库,linux 读
串口
数据库
嵌入式开发基础(2)嵌入式开发基础(2)一、目标板在开发机(运行桌面Linux系统)和目标板(嵌入式开发板)之间:首先通过RS-232
串口
线进行连接,其次通过以太网连接线进行连接。通过RS-232
串口
线进行连接,使用
串口
通信工具,最常用的是Minicom工具,它对于所有的桌面Linux发布包都有效。目标板的...文章jieforest2013-09-29714浏览量嵌入式开发基础(2)版权声明:本...
aix
安装php6,
AIX
--操作系统安装(
AIX
6.1)
前一段时间,胡哥我接到老板的任务,要在
AIX
系统上安装zabbix agent呀。可是胡哥只是玩过linux对于
AIX
这种需要硬件支持的才能玩的高端玩意可是从来没接触过呀,虽说linux是类unix,可是与unix系统还是有区别。有啥办法了,老板的命令,只能硬着上(老板可是花钱租来一台IBM的P740“小鸡”)。(
AIX
6.1的系统下载地址:链接:https://pan.baidu.com/s/...
Linux下
串口
编程
转载自 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的
串口
是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。
串口
通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中
串口
通讯也经常用到通讯方式之一。 Linux对所有设备的访问是通过设备文件来进行的,
串口
也是这样,为了访问
串口
,只需打开其设备文件即可操作
串口
设备
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章