[发明专利]一种无中断的串口数据接收方法和装置有效
| 申请号: | 201611218996.9 | 申请日: | 2016-12-26 |
| 公开(公告)号: | CN106776393B | 公开(公告)日: | 2020-01-31 |
| 发明(设计)人: | 刘爱斌 | 申请(专利权)人: | 北京旋极信息技术股份有限公司 |
| 主分类号: | G06F13/16 | 分类号: | G06F13/16 |
| 代理公司: | 11262 北京安信方达知识产权代理有限公司 | 代理人: | 李红爽;栗若木 |
| 地址: | 100094 北京*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 中断 串口 数据 接收 方法 装置 | ||
本发明公开了一种无中断的串口数据接收方法和装置,该方法包括确定与直接存储器存取DMA关联的接收缓冲区中要写入数据的位置Wr与所述接收缓冲区中要读取数据的位置Rd;当判断出Rd与Wr在接收缓冲区中指示的位置不相同时,获取Rd与Wr之间所接收的字节数n;从Rd与Wr之间的n个字节中读出size个字节,其中size是所需要读取的数据字节数。通过本发明实施例方案,能够通过确定接收缓冲区内Wr与Rd来确定该接收缓冲区内是否已经存入数据字节,并根据Wr和Rd的具体指示位置获取存储的数据字节数,从而读取想要读取的数据字节,因此该方案可以不通过中断来接收数据。
技术领域
本发明涉及数据存取技术,尤其涉及一种无中断的串口数据接收方法。
背景技术
对于嵌入式系统而言,串口(USART)是一种常见的接口,驱动层负责将串口所收到的数据写入接收缓冲区,应用层通过轮询的方法从接收缓冲区读取数据。
串口驱动一般有两种实现方法:
一种是串口中断方式,串口每收到一个字节产生一个中断,然后在中断服务程序中将收到的数据存入接收缓冲区。
另一种是DMA(Direct Memory Access直接存储器存取)中断方式,将串口和接收缓冲区与DMA关联,由DMA自动从串口接收数据并存入接收缓冲区,收到指定长度的数据后产生DMA中断,然后在中断服务程序中设置收到数据包标志为真,应用层一旦查询到该标志为真则从接收缓冲区读取数据并将该标志设置为假
在串口中断方式中,若串口速率高则中断过于频繁,而且在串口中断处理过程中若出现更高级的中断则可能导致收到的数据丢失。
DMA中断方式一般适用于定长数据包的接收,若要适用于变长数据包,则所有短的数据包在发送前需通过填充无用数据以扩展到与最长数据包一样的长度,从而确保DMA收到数据包后能产生中断,但这些无用数据降低了传输效率。若在串口传输中偶尔出现错误使DMA少收一个字节将导致DMA中断延迟,通常情况下认为包头从接收缓冲区的第一个位置开始,因此丢失一个字节的数据将导致后续数据包解析错误,串口通信出现异常,难以恢复,除非有串口异常处理。
这两种方式都用到了中断,对于嵌入式系统而言,在不影响系统功能和性能的前提下,应尽可能减少中断的使用。
发明内容
为了解决上述技术问题,本发明提供了一种无中断的串口数据接收方法和装置,能够不通过中断来接收数据。
为了达到本发明目的,本发明提供了一种无中断的串口数据接收方法,该方法包括:
确定与直接存储器存取DMA关联的接收缓冲区中要写入数据的位置Wr与所述接收缓冲区中要读取数据的位置Rd;
当判断出Rd与Wr在接收缓冲区中指示的位置不相同时,获取Rd与Wr之间所接收的字节数n;
从Rd与Wr之间的n个字节中读取出size个字节,其中size是所需要读取数据的字节数。
可选地,该方法还包括:
在确定DMA中预设的Wr与Rd之前,预先设置Wr与Rd的位置指示规则;
在DMA进行数据存取过程中记录Wr与Rd在接收缓冲区中指示的位置。
其中,Wr与Rd的位置指示规则包括:
初始化时,将接收缓冲区中要写入数据的位置Wr与接收缓冲区中要读取数据的位置Rd均指示到接收缓冲区的初始位置S1;
当从接收缓冲区的初始位置S1开始,在接收缓冲区中存入x个字节时,将要读取数据的位置Rd指示到接收缓冲区的初始位置S1,将要写入数据的位置Wr指示到存入x个字节后的下一个字节S2位置处;当在接收缓冲区中读取x个字节后,将要读取数据的位置Rd指示到接收缓冲区的S2位置;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京旋极信息技术股份有限公司,未经北京旋极信息技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201611218996.9/2.html,转载请声明来源钻瓜专利网。
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置





