CN112235206A - 一种基于单片机的环形缓冲队列数据接收机制 - Google Patents
一种基于单片机的环形缓冲队列数据接收机制 Download PDFInfo
- Publication number
- CN112235206A CN112235206A CN201911326906.1A CN201911326906A CN112235206A CN 112235206 A CN112235206 A CN 112235206A CN 201911326906 A CN201911326906 A CN 201911326906A CN 112235206 A CN112235206 A CN 112235206A
- Authority
- CN
- China
- Prior art keywords
- data
- queue
- ring buffer
- buffer
- frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9031—Wraparound memory, e.g. overrun or underrun detection
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Systems (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种基于单片机的环形缓冲队列数据接收机制。基于单片机的技术开发中,对任务的内存占用和处理效率比较敏感。环形缓冲区能够实现不增加内存资源、不影响处理效率的情况下支持高速率通信。环形缓冲区就是一个带“头指针”和“尾指针”的数组,头指针指向环形缓冲区中可读的数据,在读取数据后,“头指针”加1,指向下一个待读取数据;尾指针指向环形缓冲区中可写的缓冲空间,当接收到新的数据,则将数据保存到环形缓冲区中,并将“尾指针”加1,指向下一个存储位置。如果“尾指针”超过数组大小,则“尾指针”重新指向数组的首元素,从而形成“环形缓冲区”。当系统处于数据接收状态时,应用程序一直从缓冲区读取数据并解析,直到接收到完整协议帧,见图I。本发明利用环形缓冲队列提高片内资源利用率,解决了高速率通信时丢字节的问题。
Description
技术领域
本发明涉及一种使用环形缓冲队列实现高速通信的方法。
背景技术
串口作为常用的通讯方式,在嵌入式领域有着广泛的应用,通常使用的数据接收方式是,在中断函数里将接收到的数据直接作协议解析,操作简单、易理解。但是该处理方式只适用于低速率通信,在通信速率提高后,如2Mbps,会出现先前接收到的数据未处理完,而串口又接收到新的数据,导致字节丢失的问题。
如果用普通队列作缓存,虽然能起到一定的缓冲作用,但需要开辟足够大的空间,且已处理的数据仍然占用原有数据空间,直到清空后才能开始新一轮的接收,单片机有限的内存资源没有得到有效利用;如果处理完一个数据,就把剩余的数据往前移动一次,又会极大降低单片机处理效率。
发明内容
本发明是一种基于单片机的环形缓冲队列数据接收方案,在不过多占用单片机内存资源的前提下支持高速通信。
环形缓冲区就是一个带“头指针”和“尾指针”的数组。头指针指向环形缓冲区中可读的数据,应用程序依次读出并处理缓冲区的数据,在读取数据后,“头指针”加1,指向下一个待读取数据;尾指针指向环形缓冲区中可写的缓冲空间,由中断函数写入缓冲区数据,当接收到新的数据,则将数据保存到环形缓冲区中,并将“尾指针”加1,指向下一个存储位置。如果“尾指针”超过数组大小,则“尾指针”重新指向数组的首元素,从而形成“环形缓冲区”。整体框图见图1。
实现的原理:初始化的时候,队列头与队列尾都指向地址0,见图2。当有数据存储的时候,数据存储在地址0,而队列尾tail指向地址1,再有数据来的时候,存储数据到地址1,然后队列尾tail指向下一个地址2,即队列尾tail始终指向可以进行写数据的地址。
队列头head就是指向已经存储的数据,并且这个数据是待处理的。当数据要进行处理的时候,先处理地址0空间的数据,也就是队列头head指向的数据,处理完后地址0的存储被释放掉,队列头指向地址1。从而实现整个环形缓冲区的数据读写。如果队列处于满载状态,不再允许写入数据,见图3。
附图说明
图1:环形缓冲队列数据接收框图。
图2:环形缓冲队列空状态。
图3:环形缓冲队列满状态。
具体实施方式
详述具体实施方式如下:
定义一个结构体,包括缓冲区大小、缓冲区头部位置、缓冲区尾部位置、缓冲区数组。
定义一个空队列,头指针head和尾指针tail都是指向数组的元素0。如图2所示,此时是不允许读取数据的。
定义一个满队列,即尾指针tail加1等于头指针head。如图3所示,此时是不允许写入数据的,避免将已有数据覆盖掉。
如果处理的速度赶不上接收的速度,可以适当增大缓冲区的大小,具体增大多少,可由实际测试决定。
Claims (4)
1.一种基于单片机的环形缓冲队列数据接收机制。其特征在于:a、定义通信协议状态机。b、提高片内资源利用率。c、支持高速通信。
2.如权利要求1所述定义通信协议的帧结构:帧头部、帧长度、帧控制域、帧地址域、帧头校验、链路数据域、帧校验、帧尾。
3.如权利要求1所述环形队列在逻辑上将数组的首尾连接,形成一个存放队列的环形空间,并用指针或数组下标来指明数据读、写的位置。在数据写入的时候,另一边可以把数据读出来,而读出后留下的空位,又可以作为存储空间备用。相比普通队列数据接收,环形缓冲队列能够有效提高资源利用率。
4.如权利要求1所述在中断里将收到的数据写入环形缓冲区,显著提高接收数据的速度。接收的同时,应用程序一直从缓冲区中读出数据并作解析,直到接收到符合帧结构的报文,有效的解决了因通信速率过高导致的数据丢包问题。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911326906.1A CN112235206A (zh) | 2019-12-20 | 2019-12-20 | 一种基于单片机的环形缓冲队列数据接收机制 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911326906.1A CN112235206A (zh) | 2019-12-20 | 2019-12-20 | 一种基于单片机的环形缓冲队列数据接收机制 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112235206A true CN112235206A (zh) | 2021-01-15 |
Family
ID=74111679
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911326906.1A Withdrawn CN112235206A (zh) | 2019-12-20 | 2019-12-20 | 一种基于单片机的环形缓冲队列数据接收机制 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112235206A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114416613A (zh) * | 2021-12-29 | 2022-04-29 | 苏州雄立科技有限公司 | 一种dma数据传输系统及方法 |
CN115098733A (zh) * | 2022-06-10 | 2022-09-23 | 深圳市移文科技有限公司 | 一种移动终端数据读取方法、装置及移动终端 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103957089A (zh) * | 2014-04-28 | 2014-07-30 | 上海大学 | 一种高可靠线速数据通信方法 |
US20170308488A1 (en) * | 2016-04-25 | 2017-10-26 | Imagination Technologies Limited | Communication Interface Between Host System and State Machine |
CN107302531A (zh) * | 2017-06-19 | 2017-10-27 | 青岛华潞佳电子科技有限公司 | 一种基于状态机和环形队列的串口命令解析方法 |
CN108768884A (zh) * | 2018-04-27 | 2018-11-06 | 江苏中科芯核电子科技有限公司 | 一种基于环形缓冲区的无线通信数据处理方法 |
-
2019
- 2019-12-20 CN CN201911326906.1A patent/CN112235206A/zh not_active Withdrawn
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103957089A (zh) * | 2014-04-28 | 2014-07-30 | 上海大学 | 一种高可靠线速数据通信方法 |
US20170308488A1 (en) * | 2016-04-25 | 2017-10-26 | Imagination Technologies Limited | Communication Interface Between Host System and State Machine |
CN107302531A (zh) * | 2017-06-19 | 2017-10-27 | 青岛华潞佳电子科技有限公司 | 一种基于状态机和环形队列的串口命令解析方法 |
CN108768884A (zh) * | 2018-04-27 | 2018-11-06 | 江苏中科芯核电子科技有限公司 | 一种基于环形缓冲区的无线通信数据处理方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114416613A (zh) * | 2021-12-29 | 2022-04-29 | 苏州雄立科技有限公司 | 一种dma数据传输系统及方法 |
CN115098733A (zh) * | 2022-06-10 | 2022-09-23 | 深圳市移文科技有限公司 | 一种移动终端数据读取方法、装置及移动终端 |
CN115098733B (zh) * | 2022-06-10 | 2023-04-07 | 深圳市移文科技有限公司 | 一种移动终端数据读取方法、装置及移动终端 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110462599B (zh) | 用于循环缓冲器的自主硬件管理的设备和方法 | |
CN108733344B (zh) | 数据读写方法、装置以及环形队列 | |
US8225026B2 (en) | Data packet access control apparatus and method thereof | |
JP7162102B2 (ja) | メモリアクセス技術およびコンピュータシステム | |
US8230180B2 (en) | Shared memory burst communications | |
CN112084136B (zh) | 队列缓存管理方法、系统、存储介质、计算机设备及应用 | |
US20070274303A1 (en) | Buffer management method based on a bitmap table | |
US20180248813A1 (en) | Queue Flushing Method and Related Device | |
US11425057B2 (en) | Packet processing | |
CN112235206A (zh) | 一种基于单片机的环形缓冲队列数据接收机制 | |
CN102023961A (zh) | 一种基于共享内存的通信方法及装置 | |
EP3206123B1 (en) | Data caching method and device, and storage medium | |
CN111221759B (zh) | 一种基于dma的数据处理系统及方法 | |
CN112559436B (zh) | 一种rdma通信设备的上下文访问方法及系统 | |
CN111181874B (zh) | 一种报文处理方法、装置及存储介质 | |
JPS62261249A (ja) | 回線アダプタ | |
CN110990169B (zh) | 一种利用共享内存进行进程间字节流通信的结构及方法 | |
US11176064B2 (en) | Methods and apparatus for reduced overhead data transfer with a shared ring buffer | |
US11042321B2 (en) | Memory controller | |
CN115002052B (zh) | 一种分层的缓存控制器、控制方法及控制设备 | |
CN115955441A (zh) | 一种基于tsn队列的管理调度方法、装置 | |
CN116204466A (zh) | Dma链表模式下的数据处理方法、装置及系统 | |
CN113992608B (zh) | 一种网络收发包路径优化方法、装置及存储介质 | |
CN117499351A (zh) | 报文转发装置及方法、通信芯片及网络设备 | |
US8645597B2 (en) | Memory block reclaiming judging apparatus and memory block managing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20210115 |
|
WW01 | Invention patent application withdrawn after publication |