0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

汽车玩家 来源:单片机软件工程师 作者:单片机软件工程师 2020-01-22 09:47 次阅读

队列(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
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206537
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43069
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74508
收藏 人收藏

    评论

    相关推荐

    基于STM32的串口环形队列IAP调试

    基于STM32的串口环形队列IAP调试心得
    的头像 发表于 09-18 15:33 847次阅读
    基于STM32的<b class='flag-5'>串口</b><b class='flag-5'>环形</b><b class='flag-5'>队列</b>IAP调试

    请问串口接受用环形队列,发送也能用吗?

    串口接受用环形队列,发送也可以用?发送用普通的中断也可以
    发表于 05-07 07:56

    环形队列串口数据接收中的使用

    前言  书接上回,前文主要介绍了环形队列的实现原理以及C语言实现及测试过程,本文将回归到嵌入式平台的应用中,话不多说,淦,上干货!实验目的HAL库下串口的配置及使用环形
    发表于 12-06 06:27

    如何使用队列实现STM32串口环形缓冲?

    串口环形缓冲的好处是什么?如何使用队列实现STM32串口环形缓冲?
    发表于 12-07 07:13

    基于stm32串口环形缓冲队列处理机制是什么

    基于stm32串口环形缓冲队列处理机制是什么
    发表于 12-08 07:06

    实现队列环形缓冲的方法

    串口队列环形缓冲区队列串口环形缓冲的好处代码实现队列
    发表于 02-21 07:11

    环形队列的相关资料分享

    前言  当代码,不再是简单的完成需求,对代码进行堆砌,而是开始思考如何写出优美代码的时候,我们的代码水平必然会不断提升,今天,咱们来学习环形队列结构。环形队列的基本概念  相信对数据结
    发表于 02-23 06:10

    聊一聊串口环形队列常用的几种方法

    ,必须通过标志位判断上一个包数据是否发送完成,在把新的数据覆盖到串口的缓冲区。DMA方式优点: 不占用系统资源,减少CPU对中断的响应。如何不建立数据包的队列,还是会出现,需要等待阻塞的问题。
    发表于 07-21 15:17

    cubeMX+STM32+Freertos 读队列阻塞

    队列阻塞本例内容是创建一个队列,由多个任务往队列中写数据,以及从队列中把数据读出。这个队列
    发表于 12-09 15:21 10次下载
    cubeMX+STM32+Freertos 读<b class='flag-5'>队列</b>时<b class='flag-5'>阻塞</b>

    FreeRTOS+STM32F103串口通信错误解决方法

    在调试FreeRTOS系统时,在串口中断中用队列存储数据,然后再定时器中断中用队列接收数据,并通过串口打印出来。在调试代码中编译器报错。在网
    发表于 12-24 18:45 10次下载
    FreeRTOS+STM32F103<b class='flag-5'>串口</b>通信错误<b class='flag-5'>解决方法</b>

    STM32串口环形缓冲--使用队列实现(开放源码)

    串口队列环形缓冲区队列串口环形缓冲的好处代码实现队列
    发表于 12-24 19:04 24次下载
    STM32<b class='flag-5'>串口</b><b class='flag-5'>环形</b>缓冲--使用<b class='flag-5'>队列</b>实现(开放源码)

    基于STM32的串口环形队列IAP调试心得

    使用环形队列,简单点说就是个环形数组,一边接收上位机数据,一边往flash里面写。
    发表于 02-08 15:22 5次下载
    基于STM32的<b class='flag-5'>串口</b><b class='flag-5'>环形</b><b class='flag-5'>队列</b>IAP调试心得

    STM32进阶之串口环形缓冲区实现

    码代码的应该学数据结构都学过队列环形队列队列的一种特殊形式,应用挺广泛的。因为有太多文章关于这方面的内容,理论知识可以看别人的,下面写得挺好的:STM32进阶之
    发表于 12-06 10:00 2344次阅读

    嵌入式环形队列和消息队列的实现

    嵌入式环形队列和消息队列是实现数据缓存和通信的常见数据结构,广泛应用于嵌入式系统中的通信协议和领域。
    的头像 发表于 04-14 11:52 1052次阅读

    以太网阻塞的常见原因与解决方法

    以太网阻塞的常见原因与解决方法 以太网阻塞是指在以太网中数据流量增加超过网络设备处理能力的情况下,导致网络性能下降、延迟增加、丢包率上升等问题。下面将详细讨论以太网阻塞的常见原因及
    的头像 发表于 12-27 13:58 508次阅读