嵌入式硬件通信接口:使用RingBuffer处理数据(一)
目测该项目确实有些久远了,最后一次commit已是两年前的2016年5月了。先不管,好酒也是有年份的!
下载到本地,打开项目文件夹,查看C文件和H文件。
快速浏览ringbuffer.c文件中对外封装的各个函数,主要有:
循环缓冲区初始化
增加一个数据元素
增加多个数据元素
读取一个元素
读取多个元素
查看某一元素(即不读出,不改变读偏移量)。
从这个项目的“增加一个数据元素”函实现过程,可以看到
buffer->headindex = ((buffer->headindex + 1) & RINGBUFFERMASK);
这条语句执行的结果是每新增一个元素,写的偏移量递增,并且达到RINGBUFFERSIZE时又回到0,同样的在读操作中也是如此,这使得在读写元素的时候,偏移量都在缓冲区的范围内。
事实上这个项目已经把循环缓冲区的基本功能已经设计完全了,基本的使用起来已经OK了。
在这里值得注意的是,源码中的ring_buffer_size_t是uint8_t类型,如果需要操作255个字节以上的内存空间,则需要把ring_buffer_size_t改成uint16_t或者uint32_t类型。
源码的实现逻辑比较简单,完全可以根据网络的参考资料将这套源码吃透,有兴趣的可以拉下来看看,尝试移植到自己工程中使用。
毕竟是别人做的,但是为了符合自己工程中的需求,还是有必要重新设计自己的循环缓冲区功能处理模块。关于如何设计自己的循环缓冲区处理模块,敬请期待下回分解!
本来要讲数据协议的,写着写着又把环形缓冲区写的多了,关于起止式的数据协议,那就敬请期待下下回分解!
参考资料:
《Circular_buffer》@维基百科
《环形缓冲器》@百度百科
《Ring-Buffer》@Github
图片新闻
技术文库
最新活动更多
-
即日-12.26立即报名>>> 【在线会议】村田用于AR/VR设计开发解决方案
-
1月8日火热报名中>> Allegro助力汽车电气化和底盘解决方案优化在线研讨会
-
1月9日立即预约>>> 【直播】ADI电能计量方案:新一代直流表、EV充电器和S级电能表
-
即日-1.14火热报名中>> OFweek2025中国智造CIO在线峰会
-
即日-1.16立即报名>>> 【在线会议】ImSym 开启全流程成像仿真时代
-
即日-1.20限时下载>>> 爱德克(IDEC)设备及工业现场安全解决方案
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论