zoukankan      html  css  js  c++  java
  • 单片机模块化程序: 来看看加入环形队列的串口发送数据

     一,为什么要使用环形队列来发送数据?是为了解决什么问题呢!

    这节说了怎么用中断发送数据,但是大家是否想过,这种中断发送有个bug,看一下下面的

    看到了没 本来想让他回复

    qwertyuioaqwertyuioa   而回复的是  qqwertyuioa

    其实bug显而易见,由于发送不再占用主循环,所以下一条指令会立即发送!那么就把第一条冲掉了

    现在的想法是需要有个缓存,我不停的往缓存里面写数据,串口发送中断不停的从缓存里面取出来,然后发出去!

    直接利用环形队列是很好的选择.

    我把发送的数据写入环形队列,然后打开串口发送中断

    串口发送中断里面判断环形队列里面的数据个数是不是大于0,如果是就读出来发出去!

     

    二,定义一些变量

     

    三,然后把数组交给 环形队列变量去管理

    四,串口发送中断里面就是这样

    五,修改一下环形队列的一个函数,填充完数据就打开中断

    六,现在测试

    现在的数据不会出现丢失!

    注意:即使是使用了环形队列也不要在主循环里面

     环形队列缓存也有限! 只要波特率定好了,中断发送每一位数据的时间是一定的,发送数据就一定需要时间!

    现在是直接造成死机,

    其实造成死机的原因是因为环形队列里面使用的printf,

     而printf 并不是中断发送,造成了冲突

    改一下

  • 相关阅读:
    TCP
    关系型数据库基础
    spark教程(16)-Streaming 之 DStream 详解
    spark教程(15)-Streaming
    灰度图Matlab
    mesh函数
    axis函数
    Matlab提供了两种除法运算:左除()和右除(/)
    基和时间平移矩阵
    转载:实现MATLAB2016a和M文件关联
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/11671297.html
Copyright © 2011-2022 走看看