前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >来看看加入环形队列的串口发送数据

来看看加入环形队列的串口发送数据

作者头像
杨奉武
发布2019-10-15 15:15:09
1.8K0
发布2019-10-15 15:15:09
举报
文章被收录于专栏:知识分享知识分享知识分享

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

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

看到了没 本来想让他回复

qwertyuioaqwertyuioa   而回复的是  qqwertyuioa

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

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

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

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

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

二,定义一些变量

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

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

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

六,现在测试

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

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

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

现在是直接造成死机,

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

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

改一下

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档