00:00 / 01:24
连播
清屏
智能
倍速
点赞487
00:00 / 03:36
连播
清屏
智能
倍速
点赞148
00:00 / 01:00
连播
清屏
智能
倍速
点赞12
00:00 / 01:17
连播
清屏
智能
倍速
点赞14
1为什么必须用环形缓冲区 1空调冰箱。传感器每秒采集大量数据,中断快速触发发送,主程序要慢慢处理数据、控制压缩机风机。这时候用环形缓冲区存数据,避免丢包。 2洗衣机。按键操作、水位传感器数据通过中断快速传入,主程序要处理电机转动、进水排水。环形缓冲区就像一个临时数据仓库,先存后取,不耽误中断响应,也不卡主程序。 简单说,环形缓冲区就是数据中转站,解决中断传数据快、主程序处理慢的矛盾。 2三步套用模板 1修改初始化参数。打开模板,找到环形缓冲区初始化函数,只需要改三个地方:缓冲区名称,比如temp_buf对应温度缓存;缓冲区大小,新手先填100;数据类型,比如uint16_t对应温度数据。固定API直接复用,别乱动。 2中断添加写入代码。找到温度传感器的中断服务函数,添加一行核心代码:ring_buf_write(temp_buf, temp_data)。参数和第一步定义的缓冲区名称一致,temp_data是采集到的温度数据。记住,中断里只加这行写入代码,不要加复杂操作,保证快进快出。 3主程序添加读取代码。在循环里添加一行核心代码:ring_buf_read(temp_buf, &read_data)。读取后就可以写处理逻辑,比如温度高于26度启动压缩机,低于20度停止压缩机。 读取时要判断缓冲区是否有数据,避免读空;处理逻辑写在主程序里,不要写在中断里,也不要写在缓冲区操作函数里。 第三部分:代码演示 读取温度数据后判断阈值,控制压缩机启停。代码简洁,直接套用,适配大部分温度控制场景。 三步修改完成后烧录测试。连接开发板,打开Keil5,选择对应型号编译,确保无报错。点击烧录下载代码。模拟温度变化,比如用热风枪吹或冰袋降温,观察数据是否正常写入缓冲区,主程序是否正常读取处理。没有丢包不卡顿,就是成功。 4场景适配技巧 空调冰箱场景,缓冲区大小设128,数据类型用uint16_t存温度数据。洗衣机场景,缓冲区大小设64,数据类型用uint8_t存按键水位数据。 5三个避坑点 模板里的固定API不要乱改,改了容易丢包卡死。 缓冲区大小不要设太大或太小,100左右最合适,位与操作比取模快得多,在没有硬件除法器的MCU上,这个差距相当可观。 中断里只写写入数据,主程序里写读取处理,不要搞反,也不要在中断里处理数据。
00:00 / 04:52
连播
清屏
智能
倍速
点赞17
00:00 / 01:52
连播
清屏
智能
倍速
点赞54
00:00 / 00:26
连播
清屏
智能
倍速
点赞242