串口驱动读取时遇到的有关问题
发布时间:2010-06-14 17:09:20 文章来源:www.iduyao.cn 采编人员:星星草
串口驱动读取时遇到的问题
最近在做串口驱动时,在用read函数读取数据时,从串口收到的数据上层没法收到,但对方却能收到我将数据原样返回了
跟踪运行发现,read操作时,我的start_tx函数被调用了。
继续看,发现应该是serial_core中的uart_flush_chars函数调用的。
但uart_flush_chars是学习驱动时一直被告知用来将数据发送到硬件的,为什么会调用呢
继续深入,找到flush_to_ldisc函数调用的receive_buf函数即n_tty_receive_buf中有这样一段
if (tty->ops->flush_chars)
tty->ops->flush_chars(tty);
于是乎,我彻底疑惑了,接收数据的时候为什么要调用发送的操作呢。
做驱动开发没多久,还有很多需要学习,还希望各位大哥大姐指点迷津,谢谢啦!
------解决方案--------------------
可能是你配置串口的时候没有关闭回显功能
------解决方案--------------------
下面的内容是初始化串口时用到的,没有回显。你可以copy过去
//设置字符大小
//激活本地连接和接收使能
newtio.c_cflag
------解决方案--------------------
= CLOCAL; //
newtio.c_cflag
------解决方案--------------------
= CREAD; //
/*
在用write发送数据时没有键入回车??
信息就将发送不出去的情况,
这主要是因为我们在输出输入时是按照 规范模式接受到回车或者换行才发送,
而很多情况我们是不需要回车和换行的,
这时,应当切换到行方式输入,
设置options.c_lflag &= ~(ICANON
------解决方案--------------------
ECHO
------解决方案--------------------
ECHOE
------解决方案--------------------
ISIG);
不经处理直接发送。
*/
newtio.c_lflag &= ~(ICANON
------解决方案--------------------
ECHO
------解决方案--------------------
ECHOE
------解决方案--------------------
ISIG);
/*
在我们发送字符0x0d的时候,
往往接受端得到的字符是0x0a 这是怎么回事,
原因是在串口设置中c_iflag和c_oflag中存在从NL-CR 和CR-NL的映射,
也就是说,串口可以把回车和换行看成一个字符,所以,
此时我们应该屏蔽掉这些,
用options.c_oflag &=~(INLCR
------解决方案--------------------
IGNCR
------解决方案--------------------
ICRNL
------解决方案--------------------
);
和options.c_oflag &=~(ONLCR
------解决方案--------------------
OCRNL);
进行设置
*/
newtio.c_oflag &= ~(INLCR
------解决方案--------------------
IGNCR
------解决方案--------------------
ICRNL);
newtio.c_oflag &= ~(ONLCR
------解决方案--------------------
OCRNL);
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
在驱动开发中出现 'struct' type redefinition 应该怎么办?? 大神们告诉小弟一下...
下面是我写的代码:
#pragma once
//**********...
-
大神们帮我看一下,我的代码错在什么地方? 加载成功,卸载就蓝屏了....
/*
*******************************************************...
-
sigma8653很罕见的问题
SOS!
sigma8653板子插上卡,上电后可以识别SD卡,然后软重启(reboot)就无法识别了!
奇怪的时,继续软重启一次又可...
-
Cancel自旋锁 起了什么作用?
发现IoCancelIrp 函数中
获取了Cancel自旋锁
设置了Irp->Cancel
调用了OnCancelIo函数
但是进入了On...
-
windows下 pnp设备的即插即用功能是怎么实现的?
看到 windows内核情景分析里说
加载驱动有三种方式 前两种是静态 分别是引导...
-
取消当前 IRP 执行的过程是怎样的?
#pragma code_seg("PAGE")
NTSTATUS MyWdmRead(PDEVICE_OBJECT DeviceObject,PIRP Irp)
{
...
-
vs2008中,link2001错误的问题,代码如下
vs2008中,link2001错误的问题,代码如下
#include <ntddk.h>
VOID OnUnload(IN PDRIVER_OBJ...
-
什么是内核缓冲区,用户缓冲区
比如网卡的内核缓冲区,那这个缓冲区是在pc内存还是在网卡的芯片上呢?
------解决方案---------------...
-
如果在一个函数中有提升IRQL的语句 是不是整个函数都不能放在分页内存中 ?
如果我在一个函数前使用了 #pragma code_seg("PAGE") ...
-
请教Linux下dm9000网卡驱动程序问题
应用程序网络编程是基于socket接口的,好像完全屏蔽了底层,不能像字符设备那样应用程序可以调用...