在第十四届蓝桥杯嵌入式比赛中,有关于输入捕获的内容。bug的发生是以前从来没出过问题的串口捕获代码突然数据出现问题,调试中发现每次捕获的值存在较大错误。本以为是捕获代码的问题,结果到最后也没找到问题。所幸其他功能得以实现,仍然是省一,还有国赛的资格。
然后最近开始备考国赛,顺便找找这个bug。
经过各种排查,最后确认bug出在sprintf这个打印函数,确实令人惊奇。sprintf打印会影响到输入捕获,且其他功能一切正常。
然后对sprintf涉及到的参数进行排查,最后将其用于储存的字符串temp原本的空间20扩大到25后,神奇的是问题解决了,bug的最终原因出在sprintf字符串的溢出了。但实际上本身为了节省空间,字符串的大小空间是完全一样的。结果最后出现了bug。
事实证明设立字符数组尽量留些余量,不要完全就多个‘/0’位,最好再加几个,不然就会出现这种事后看来也觉得离谱的bug,既不报错,也不影响显示,反而影响了输入捕获。