基于环形队列的串口打印阻塞解决方法

队列(fifo)是一种常见的线性存储结构,在嵌入式开发中经常用到,主要的应用场景有:
1. 高级一点的单片机内部串行通信模块,像uart、spi、can等串行通信,内部带有fifo缓存。有fifo的模块可以一次写入或保存多个数据,而没有fifo的模块只可以写入或保存一个数据。
2. 在rtos中,可以通过消息队列实现任务(线程)间的通信
3. 解决cpu与外设由于速度差导致的阻塞
写数据索引write,读数据索引read,数据个数为write-read,普通队列写索引永远不小于读索引。但我们可利用的栈内存是有限的。
一种优化的队列是环形队列,也可以理解为首尾相连的队列。当写索引到达最大分配内存时,跳回到队列的头部继续写入,数据个数为(write+buffer_size-read)%buffer_size。
下面以使用环形队列来解决单片机串口打印阻塞问题为例来说明软件实现。
上面代码已经注释得够详细了,就不再描述了。
在需要打印数据时,直接调用printf函数格式化打印,在主函数大循环中执行debug_print_task就可以了。

智芯传感智能MEMS传感器助力消费电子应用普及
oppor11什么时候上市?oppor11、opppor11 plus转战双摄,拍照功能现大招,配置参数、发布会嘉宾曝光!
探究IntelliJ IDEA 中JAVA代码的任务标记
电流互感器校验方法
2014年德州仪器全国大学教育者年会在上海召开
基于环形队列的串口打印阻塞解决方法
华为云等保解决方案提供一站式信息安全保障体系,为您的企业安全保驾护航
!租售/回收/维修CMD60综合测试仪CMD60 小兵/李S
爱立信与Azercell Telecom合作将在阿塞拜疆部署5G网络服务
医疗器械研发设计医疗设备二次开发克隆仿制
康宁为触控屏笔记本电脑带来Gorilla NBT玻璃
数据科学家必会的六大NLP技术!
英创信息技术WinCE应用程序在英创主板上的可靠启动
网络发生故障不知如何修复怎么办
困扰科学界 30 年的难题,华人科学家黄皓用7年时间破解
东风雪铁龙ADAS高级驾驶辅助系统初体验
开源AI技术平台是核心推动力,谷歌Facebook和百度呈三强局面
未来徐汇人工智能将如何发展?
数据洪流转向边缘 如何发掘边缘数据的价值?
中国集成电路少不了EDA EDA生态系统应运而生