龙空技术网

【避坑指南】STM8大双串口同时大量数据通讯导致系统卡死

问个芯 178

前言:

现在我们对“单片机 变量 到最大 会不会死机”大体比较关注,小伙伴们都想要学习一些“单片机 变量 到最大 会不会死机”的相关内容。那么小编在网摘上网罗了一些关于“单片机 变量 到最大 会不会死机””的相关文章,希望各位老铁们能喜欢,咱们快快来了解一下吧!

串口标志位被频繁刷新导致程序卡死

产品越复杂,说明功能就越多,单片机需要的外设也会相应的多很多,但是这么复杂的问题就不在这里讨论,我现在要讨论是单片机双串口频繁通讯造成死机的问题。

当时我用到了两个串口,串口1与身份证刷卡模块通讯,当有效刷卡时,身份证刷卡模块会自动异步传输身份证信息到单片机串口1,而串口2是与摄像头模块通讯,拍照后转成16进制自动异步传输到单片机串口2,由于身份证信息和摄像头拍摄图片数据量较大,分别有1K和50K字节,串口通讯速率比较慢,无法快速的接收,这就导致了,单核的单片机进行双串口同时接收数据,那么看下串口我的接收代码。

这是STM8串口中断函数,正常来说当串口接收到起始位信号后,串口缓冲器便会开始接收到一个完整的字节且收到停止位后置为寄存器标志,因为中断都有优先级处理,一般都不会有互相冲突的问题,但是我在这个产品上需要用到两个串口且通讯比较频发,遇到了寄存器标志被冲刷掉的问题,做了大量的测试,最后发现是卡死在while语句这,导致我的代码出现了严重BUG,导致死机,也就是我的代码在等待串口接收标志时候迟迟没有等到,然后一直在串口这个while的位置死等,导致一直无法跳出中断。

后来我在while这里做了计数延时等待处理,就成功的解决了这个问题,定义了一个局部变量在while里面计数,当超过了5毫秒的时间便自动跳出中断函数。

解决方法如下:

给各位小伙伴避坑

标签: #单片机 变量 到最大 会不会死机