队列(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就可以了。
-
cpu
+关注
关注
68文章
10824浏览量
211088 -
fifo
+关注
关注
3文章
387浏览量
43533 -
串口
+关注
关注
14文章
1543浏览量
76160
发布评论请先 登录
相关推荐
评论