基于STM32Fx实现环形缓冲区搭建及运用

基于STM32Fx实现环形缓冲区搭建及运用

1.任务

(1)严格按照教师的流程,先发送 01 02 03 FF,读取,再发送04 05 FF读取。

(2)请认真阅读ringbuffer.c中的每一行代码,添加注释。结合你的Keil Simulator仿真说明你对程序代码的理解,按照教师的图示,绘制ringbuffre中指针的变化图。

(3)说明为什么环形缓冲区比普通的数组型缓冲区更加优秀?

2.完成

2.1完成老师演示流程
2.1.1导入接口函数,并添加必要的头文件
(1)接口函数:ringbuffer.c 、ringbuffer.h。
(2)添加接口函数路径到工程中。
2.1.2定义变量
在这里插入图片描述
图 1 定义变量

在这里插入图片描述
图 2 RingBuffer 数据结构

2.1.3 接口函数头文件
在这里插入图片描述
图 3 ringbuffer.h提供的功能函数

2.1.4 主函数部分
在这里插入图片描述
图 4 主函数中进行读操作

2.1.5 中断函数部分
在这里插入图片描述
图 5 copy数据到环形缓冲区

2.1.6 虚拟串口调试

在这里插入图片描述
图 6 添加变量到watch窗口

在这里插入图片描述
图 7 运行中,无接受到数据状态

在这里插入图片描述
图 8 接受数据(1)
在这里插入图片描述
图 9 接受数据(2)

2.1.7 程序主要流程梳理
首先规划了一个环形缓冲区,可通过RingBuffer类型变量对其进行一系列操作(计算总容量、可读、可写区域大小、写入数据、读出数据等),然后在主函数部分对环形缓冲区进行查询、读取数据(数据的搬运工1),其次在中断函数中将数据写入到环形缓冲区,以供主函数中获取数据。

2.2ringbuffer.c函数分析
2.2.1头文件和宏定义
在这里插入图片描述
图 10 min (a,b)
2.2.2 建立环形缓冲区
在这里插入图片描述
图 11 rb_new
2.2.3 获取环形缓冲区总容量大小
在这里插入图片描述
图 12 rb_capacity

2.2.4 可读可写区域大小计算
在这里插入图片描述
图 13 rb_can_read and rb_can_write

在这里插入图片描述
图 14 可读可写区域可视化

2.2.5 读操作
在这里插入图片描述
图 15 情形 1

在这里插入图片描述
图 16 情形 2

2.2.6 写操作

在这里插入图片描述
图 17 写操作流程图

2.3调试可视化
2.3.1待机状态
在这里插入图片描述
图 18 watch

在这里插入图片描述
图 19 Status 1

2.3.2发送数据
在这里插入图片描述
图 20 Status 2
在这里插入图片描述
图 21 Status 3

2.4环形缓冲区优于普通的数组型缓冲区

在这里插入图片描述
图 22 环形缓冲区

(1)避免了频繁的内存创建取消、分配。
(2)内存利用率提高。用更少的内存块做更多的事。

3.总结

本课时重点学习了环形缓冲区,在学习了UART DMA 数据传输的基础上,我们用环形缓存这样的内存方式来接受外界数据,我对环形缓冲区的理解是,两个人在操场跑道上散步,其中一个人是个超级富豪,一边走一边撒钱,这个人就是“头指针”,而另外一位,就比较累了,一直跟在后面捡钱,一直弯腰,所以跟不上前面人的步伐,而且他也不太想跟上,更不想超过,那样他就没钱可捡了,这个人我们称之为“尾指针”。
思维导图

4.完整工程代码链接

//download.csdn.net/download/pu666/12399701

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值