嵌入式硬件通信接口:使用RingBuffer处理数据(二)详细设计过程
文章来源:yobo体育全站app下载 发布时间:2023-01-27 05:36
历经上一篇《嵌入式硬件通信接口-用于RingBuffer处置数据(一)》比较简单了解循环系统缓冲区,读书编码后,然后刚开始设计方案自身的循环系统缓冲区程序模块。设计理念这儿设计方案的难点取决于,怎样把触tail这一写出地址,每降低一个数据信息时tail自减,在写出的全过程中,假如用以缓冲区的全部室内空间,那麼head相同tail的情况下,这一状况有可能是空或是剩,务必在编程设计情况下,多特蒙德留意。在具体新项目用以中,仍务必充分考虑的2个难题:读书好几个字节数时,缓冲区内恢复出厂设置总数比客户想报的数量较少,此刻是文章节把恢复出厂设置的都读出,還是必需出错?写出好几个字节数时,缓冲区内能用总数比客户想写的数量较少,此刻是文章节把能用的都写出剩,還是必需出错?由于那样的难题,在学多字节数和写出多字节数这两个控制模块上降低一个自变量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的不正确返回码,目地表述载入的数据信息匮乏,可是也早就把恢复出厂设置的都诵读了!。
本文关键词:嵌入式,硬件,通信,接口,使用,RingBuffer,处理,yobo体育全站app下载
本文来源:yobo体育全站app下载-www.ruilaikesik.cn