【转载】单片机模块化程序6-加入环形队列的串口发送数据

[复制链接]
571|16
手机看帖
扫描二维码
随时随地手机跟帖
HuangHongLun|  楼主 | 2019-10-31 18:58 | 显示全部楼层 |阅读模式
一,为什么要使用环形队列来发送数据?是为了解决什么问题呢!

819239-20191014125257548-1322686599.jpg


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


819239-20191014125627268-2088834616.jpg


看到了没 本来想让他回复
qwertyuioaqwertyuioa   而回复的是  qqwertyuioa

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


现在的想法是需要有个缓存,我不停的往缓存里面写数据,串口发送中断不停的从缓存里面取出来,然后发出去!
直接利用环形队列是很好的选择.
我把发送的数据写入环形队列,然后打开串口发送中断
串口发送中断里面判断环形队列里面的数据个数是不是大于0,如果是就读出来发出去!

使用特权

评论回复
评论
键盘手没手 2019-10-31 19:02 回复TA
哦~讲解的浅显易懂,大致了解了为啥了。 
键盘手没手 2019-10-31 19:01 回复TA
我一看就想继续看。因为我就是用小学时代的串口发送数据 
HuangHongLun|  楼主 | 2019-10-31 18:59 | 显示全部楼层
二,定义一些变量
819239-20191014132208444-1321491230.jpg

819239-20191014132239648-1573351714.jpg


819239-20191014132328991-70578518.jpg


819239-20191014132421441-430779810.jpg

使用特权

评论回复
评论
键盘手没手 2019-10-31 19:03 回复TA
就相当于把数据都推给环形队列了。 
HuangHongLun|  楼主 | 2019-10-31 18:59 | 显示全部楼层
三,然后把数组交给 环形队列变量去管理
819239-20191014132517491-515345963.jpg

使用特权

评论回复
HuangHongLun|  楼主 | 2019-10-31 19:00 | 显示全部楼层
四,串口发送中断里面就是这样
819239-20191014132612358-343020632.jpg

使用特权

评论回复
评论
键盘手没手 2019-10-31 19:04 回复TA
感谢楼主。实时更新啊。哈哈哈。 
HuangHongLun|  楼主 | 2019-10-31 19:01 | 显示全部楼层
五,修改一下环形队列的一个函数,填充完数据就打开中断
819239-20191014132102144-1646203922.jpg

使用特权

评论回复
HuangHongLun|  楼主 | 2019-10-31 19:01 | 显示全部楼层
六,现在测试
819239-20191014132817700-1303769237.jpg


819239-20191014132830896-59582617.jpg



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

注意:即使是使用了环形队列也不要在主循环里面
819239-20191014133346813-906810099.jpg



环形队列缓存也有限! 只要波特率定好了,中断发送每一位数据的时间是一定的,发送数据就一定需要时间!
现在是直接造成死机,
819239-20191014133600152-138026878.jpg


其实造成死机的原因是因为环形队列里面使用的printf,
819239-20191014133641608-192700174.jpg

而printf 并不是中断发送,造成了冲突
819239-20191014133713358-1948562312.jpg


改一下
819239-20191014142358685-1778046684.jpg


819239-20191014142516018-440205772.jpg

使用特权

评论回复
评论
键盘手没手 2019-10-31 19:05 回复TA
啊。“注意:即使是使用了环形队列也不要在主循环里面” 这条很关键啊,我就忽略过。 
zeshoufx| | 2019-10-31 21:26 | 显示全部楼层
谢谢分享,,,,,,,,,,,

使用特权

评论回复
drer| | 2019-11-13 10:33 | 显示全部楼层
非常感谢分享

使用特权

评论回复
gwsan| | 2019-11-13 10:57 | 显示全部楼层
非常不错的资料

使用特权

评论回复
kxsi| | 2019-11-13 11:32 | 显示全部楼层
非常不错的资料

使用特权

评论回复
nawu| | 2019-11-13 11:47 | 显示全部楼层
非常不错的资料

使用特权

评论回复
qcliu| | 2019-11-13 12:01 | 显示全部楼层
非常不错的资料

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

438

帖子

2

粉丝