使用低功耗串口时的一些有趣现象
最近做项目利用串口低功耗串口lpuart1时遇到了一个有趣的现象,在main()函数中执行以图1代码,在串口回调函数中执行图2代码,利用串口调试助手输入01234567890123456789结果如图3所示。探究原因,问题可能在于串口回调函数中的执行过程较为复杂,耗时较多。当低功耗串口1第11次进入串口回调函数,将值保存入数组缓冲区后,test_flag的值也变为11,此时退出回调函数。在while(1)中检测到test_flag已经置为11,单片机利用第12次进入回调和第11次进入回调的时间打印test_flag的值,打印完之后进入第12-15次回调,总共4次回调,退出第15次回调后,打印不完整数组,之后进入16-20次回调,总共5次回调,退出回调函数后,此时数据已经完整存入,所以之后打印出来正常。
如果中断回调中函数简单,快速执行完毕,则可以避免因为此类现象。