3682|7

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于串口驱动,串口接收软FIFO的实现问题。 [复制链接]

串口驱动中定义了以下结构,实现串口接收数据的读取。     
    typedef struct __RX_BUFFER_INFO {
        ULONG        Read;                                /* @field Current Read index. */
        ULONG        Write;                                /* @field Current Write index. */
        ULONG        Length;                                /* @field Length of buffer */
        BOOL        DataAvail;                        /* @field BOOL reflecting existence of data. */
        PUCHAR        RxCharBuffer;                /* @field Start of buffer */
        CRITICAL_SECTION        CS;                /* @field Critical section */
     } RX_BUFFER_INFO

   其中Read表示从驱动读取到应用层。Write表示从硬件读取数据到驱动。驱动中有一个软FIFO,长度为LENGTH,指针RxCharBuffer。也就是说从硬件读到的数据存入FIFO;而上层应用数据的时候从FIFO中读出。(以上为个人的理解,不知道正确否?)
RxRead(pSerialHead) =
                (RxRead(pSerialHead)+ Len
RxWrite(pSerialHead) =
                (RxWrite(pSerialHead)+RoomLeft 两句指令应该就是计算读和写的入口的。但是这个入口的这两句问号表达式该怎么理解呢,不知道怎么和FIFO的先进先出关联起来的,看来好长一段时间没能想明白,请高手们指点。
  

最新回复

做个记号!!!FIFO!  详情 回复 发表于 2009-10-21 14:23
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个东西是MDD层吧

MDD和硬件关系不大,所谓的FIFO是硬件实现了。我们初始化串口的时候可以设置的。

你上面的代码还没有涉及这些。楼主是用什么软件看代码,我建议最好用sourceinsight
把串口相关代码,甚至是头文件也拷贝到一起,建立个工程,很快就看明白了。
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
   对的,不是硬件的,硬件FIFO寄存器里面设置一下就好了。
   这段代码是MDD.c COM_READ和SerialEventHandler中的。其实就是一个缓冲区,软FIFO借鉴网上的说法。我想开辟这么一个缓冲区主要是为的把硬件到驱动,驱动到应用层的数据交换工程独立开来,提高效率,而且硬件FIFO字节数太小容易丢包,就弄了这个缓冲区。
   sourceinsight 同道中的,用起来挺爽的。下午上班开始看到现在没明白,就偷懒上来问了!
   MDD的东西,MS都写好了,自己也不会去改,所以以前修改串口驱动的时候也没怎么去关注。现在想彻底弄弄明白。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
帖子开在这里,自己继续研究去。争取在有人回答之前弄懂。哈哈!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

5
 
明白了,Write和Read就是两个指针增量。每读一个字节增加1,到缓冲区的顶部后又重新计数。
关键是Write的时候计算RoomLeft时不能把没读(READ)走的数据覆盖掉。READ的时候不要把
没更新的数据从复读进来。谁再顶下贴,就结贴去了。不然全部给gooogleman了,这老兄可不缺分数!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
顶啊!JF
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
呵呵!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

8
 
做个记号!!!FIFO!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表