嵌入式硬件通信接口:使用RingBuffer处理数据(二)详细设计过程
经过上一篇《嵌入式硬件通信接口-用于RingBuffer处置数据(一)》非常简单理解循环缓冲区,读书代码后,接着开始设计自己的循环缓冲区功能模块。设计思路这里设计的难题在于,如何把触tail这个写出地址,每减少一个数据时tail自减,在写出的过程中,如果用于缓冲区的所有空间,那么head相等tail的时候,这个情况有可能是空或者剩,必须在程序设计时候,多特注意。在实际项目用于中,仍必须考虑到的两个问题:读书多个字节时,缓冲区内格式化数量比用户想读的个数较少,这时候是稿子节把格式化的都读出来,还是必要报错?写出多个字节时,缓冲区内可用数量比用户想写的个数较少,这时候是稿子节把可用的都写出剩,还是必要报错?鉴于这样的问题,在读多字节和写出多字节这两个模块上减少一个变量mode,用作原作模块在读取多字节时遇上长度超出范围,是稿子节之后处置还是必要报错。还有,比起于上一篇文章中参照的源码,这里的设计思路使用的是地址指针的方式,而不是偏移量。
并且为了区别于缓冲区空或者剩,将壮烈牺牲掉一个字节的空间:当缓冲区机的时候head相等tail,当缓冲区剩的时候head在tail邻接的后一个方位。本次的设计,用于head指向缓冲区中可读数据的首地址,用于tail指向缓冲区中可读数据的末地址(同时这也是可用数据的首地址):数据流是5504180207B7这样的一连串16十进制数,接收端再行接到的是0x55,后接到的是0x04,以这样的顺序稿子节通过物理层模块接管。
这也是一个数据包的常规帧结构,也合乎人从左到右的读者顺序。所以在这里以head指向的是数据包的头,tail指向数据包的尾,head到tail之间就是一个可读数据的范围,同时,tail指向的是可用区域的首地址,当有新的数据进去时,新的数据不会被从tail地址之后写出到内存,而后tail在环内递减。告诉了循环缓冲区的这几个属性:缓冲区大小、缓冲区在内存中的地址范围、存取数据时的读取地址。
可根据这些属性,结构一个循环缓冲区的结构体:typedefstruct{uint32_tsize;uint8_t*head;uint8_t*tail;uint8_t*buff;}rb_t;ringbuffer缩写rb,其中size回应用户申请人顺利的或定义的buffer空间大小;head是一个地址指针,指向缓冲区读书的首地址;tail也是个地址指针,指向缓冲区读书的末地址(也就是写出的首地址);buff还是一个指针,仍然指向用户定义或者程序动态申请人的内存buffer首地址。当我们必须用于环形缓冲区前,必须定义数组变量或者申请人内存,作为数据实际存储的地方,同时定义一个rb_t的结构体,用作关联数组变量或者内存空间。功能模块将已完成以下模块:初始化可读书数量可写出数量读书一个字节读书多个字节写出一个字节写出多个字节查阅登录位移的数据查阅登录数据否在缓冲区并取其在内存的地址废黜清空关于命名,不得已做到个解释:dcclib是DigCore_Library的缩写,这是功能模块库层的代码;rb是ringbuffer模块缩写。初始化初始化的目的是把用户定义的即将用于的数组,与结构体变量关联一起,先前的操作者瓦解数组,必要操作者结构体变量,于是以如此,结构体变量的初始化后,将对size、head、tail、buff各个成员赋值。
(图片额.)可读书数量head指向的是可读数据的首地址,该地址内是有数据可以读书的;tail指向的是可读数据的末地址,该地址内没数据可读书,同时tail指向的是一个机的字节,作为写出的首地址。可写出数量这个必须注意的是总有一个字节空间不能写出,因此size大小的空间内,除了可读书,只剩就是一个空字节和可用数量。读书一个字节读书一个字节时,基于指针地址的操作者模式,必须注意的是读书指针自增后多达缓冲区的范围时,将读书指针调头返回缓冲区的接续方位。读书多个字节读书多个字节,必定是基于读书一个字节的基础上构建的。
这里比起于前一篇文章提及的参照项目源码,有所不同的是减少了读模式的自由选择,当要读的数据个数小于可读书数量时,可以利用mode来自由选择否依然稿子节地把不读的都读出来。如果在调用模块时mode划为FORCE的强迫加载,要读的数据个数小于可读书数量时,将以RET_RB_RDWRN的错误回到码,目的解释加载的数据严重不足,但是也早已把格式化的都朗读了!。
本文关键词:kaiyun,嵌入式,硬件,通信,接口,使用,RingBuffer,处理,经
本文来源:kaiyun-www.wozhuisu.com
同类文章排行
- 吴志强:智慧消防换道超车 创造美好生活:kaiyun
- 两大互联网巨头双双被骗电子业小虾米该如何自处?
- b岳阳:消防安全知识进影院 公益短片话平安_kaiyun
- 雷诺改装ZOECab原型车公开测试自动驾驶按需出行服务
- 打脸!近7成球迷认为C罗不配金球 魔笛再胜出?
- 米兰副总赴马德里劝说安帅:贝总今夏会继续投资
- 19岁中国女留学生遭美国女子追尾后 被其枪击身亡(图)
- 【史话】柏林老二的德甲辛酸史
- 安倍狡辩慰安妇问题属"人口走私" 不明确承认日本罪行
- 原创不止阿贾克斯,这支欧联四强球队,或也要被各大豪门挖空
最新资讯文章
- 叕见面了,利物浦!
- 原创挖角拜仁!切尔西引援名单出现意外候选,6000万交易或将完
- 美国新法案将允许政府机构击落私人无人机
- 美参议员马克斯·鲍卡斯将出任下一任美国驻华大使
- 百万年一遇!赛丁泉彗星20日与火星擦肩 北半球难观此奇观
- 津巴布韦将人民币做法定货币 无条件托底或将拖累中国
- 重庆江津向阳小学开展消防疏散演习和宣传[图]
- 上海开展节前消防安全大检查
- 泉州约80个小区引入电动车智能充电设备防范火灾
- 国米下赛季新球衣真实版曝光!比谍照漂亮,白色有领,胸前斜
- 皮尔洛获尴尬大奖心不慌 19天4战仅1胜后 尤文终于盼来C罗
- 国安2021赛季球衣来了!
- 阿比亚蒂宣布今夏将退役 18载传奇红黑生涯谢幕
- 蓝黑札记-戈丁、拉扎罗、森西的故事
- 微软预计XB1X需求高,MR可能会出现在Xbox上
- 俄罗斯伏尔加格勒简介及名称演变、历史沿革
- 巴基斯坦地震遇难人数逾70 未来24小时或有余震
- 彭博社发布2016全球创新指数:中国第21 美国第8
- 一消和二消有何差别?要先考二级才气考一级吗?
- 拉着战友带着“战车” 祝福母亲节