2 yangtianyu2004 yangtianyu2004 于 2014.07.20 22:15 提问

串口通信,如果read函数返回值是-1,可能是因为?

1、用open函数打开串口时候返回值不是-1.可见正常打开了
2、让ARM(上位)与8051(下位)通信,协议是9600,8N1(经常搞通信的都懂的)
3、51单片机大概每秒就向ARM发送一个byte,8位。
4、结果qtopia的terminal上一直打印“Read Error”
5、关掉terminal,打开qtipia自带的串口助手,竟然也接收不到信号!
6、把8051电源关掉,让通信不可能存在,ARM上READ得到返回值也不是0,依然是-1!

下面添加主函数代码。不久将放程序清单。

int main(void)
{
int fd;
int nread;
char buff[2];
char *dev ="/dev/ttySAC0";
fd = OpenDev(dev);
if (fd>0)
set_speed(fd,9600); //打开后设置波特率9600
else
{
printf("Can't Open Serial Port!\n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== FALSE) //设置8,1,n 注意,这里和上面要和下位机相符才可能通信
{
printf("Set Parity Error\n");
exit(1);
}
fcntl(fd,F_SETFL,FNDELAY);//UNBLOCK
while(1)
{
if(read(fd,buff,1) while((nread = read(fd,buff,1))>0)
{
printf("\nLen %d\n",nread);
buff[nread+1]='\0';
printf(" Ken %s",buff);
tcflush(fd, TCIOFLUSH);//读完再度清洗
}
}

1个回答

codehat
codehat   2014.08.15 19:13

看看/dev/ttySAC0的设备权限?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
浅析read()函数(man 2)返回值
问题:read 函数(man 2)的返回值
应用程序中read()函数返回值一直错误
d = open(“/dev/gpio_key”, O_WRONLY ); 调用read()函数时,返回-1,改为 fd = open(“/dev/gpio_key”, O_RDWR ); 读写成功
iOS 【对iOS中控制器view的理解 以及 view仍在但不显示数据的原因探索】
如果发现:控制器view还在,但是view上面的数据不显示,极大可能是因为管理view的控制器被提前销毁了 1、一个控制器的view是可以随意调整尺寸和位置的 2、一个控制器的view是可以随意添加到其他view中去的 3、如果将一个控制器的view,添加到其他的view中显示,那么要想办法保证其控制器不被销毁 4、原则:只要view在,view所在的控制器必须得在,这样才能保证view内
linux 串口控制read()的说明
在数组c_cc中有两个下标(VTIME和VMIN)对应的元素不是控制符,并且只是在原始的模式下才有效。串口的模式控制是通过options.c_lflag控制的,如:options.c_lflag &=~ICANON设置串口为原始模式。在原始模式下,它们决定了read()函数在什么时候返 回。在标准的模式下,除非设置了非阻塞的模式(O_NONBLICK)选项,否则只有当遇到行结束符或者文件结束
read函数---------详解
read函数从打开的设备或文件中读取数据。 #include ssize_t read(int fd, void *buf, size_t count); 返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0 参数 count 是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。注
JAVA IO中read()方法的返回值
以下是不太严谨的个人理解,有错误欢迎指出,共同进步:read()方法的作用是从输入流读取数据的下一个字节,返回的字节的值是一个0~255之间的整数。到达流的末尾返回-1。刚开始我以为这个返回值表示的是所读取的数据的长度,可是之后在一个示例程序中发现这种说法解释不通。我就好奇研究了一下这个返回值到底表示什么。首先要知道什么是字节(Byte)和比特(bit),它们都是计算机信息量的度量单位。 每一个二
python read( )函数
python read()函数
可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用
背景:使用excel中的宏,提示“可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用” 解决:
超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小
asp.net运行出理这样的错误:超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小原因可能是程序中有很多的连接打开了没有关闭, 尤其是循环打开关闭的的时候,机子可能运行不了,检查是否有打开的连接没有关闭。
读书札记:无法启动 OneNote
---------------------------Microsoft Office OneNote---------------------------无法启动 OneNote。这可能是因为硬盘驱动器空间不足,或者对用户设置文件夹中 OneNote 笔记本缓存文件没有相应的写入权限。请尝试从计算机中删除任何不必要的文件,然后尝试重新启动 OneNote。如果此消息仍然出现,请与系统管理员联系。