串口接收溢出中断不能忽略呀
夜深人静,开始总结。今天白天为了迎合公司的“文化”‘加班编写代码,也调试出了一个不经意的bug,分享出来,望大家避免!
串口接收采用中断按字节处理是非常常规的实现方案。我们也采用这个方案。实现简单,功能简单,相安无事好久。直到今天,硬件团队上报了一个bug,他们的外设有个bug,必须在中断触发后,保证外设ready后才可以退出中断。硬件bug,软件改。于是,串口的bug被打开了。
bug现象
系统宕机,各类操作无法执行。
bug分析
在线调试时,复现bug。串口中断持续进入,占用了系统。再回读状态寄存器,一直触发串口错误中断,其中ROERR标志位置位。但我的程序未做清除处理。
bug解决
添加错误中断处理,并通过组合操作清除ROERR标志位即可。
UNUSED(usart_x->sts);
UNUSED(usart_x->dt);
挺简单的一个bug,查找起来按说也不费事。但思维定式告诉我,之前串口一直工作正常,只是引入了一个另外高优先级中断后才出的bug。精力和注意力都被分散了!
总结就到这里吧!愉快的过我的周末去了!