最近在做一个项目,功能都是分开几个人做的,每个人调试自己那部分功能的时候,都用串口打印log信息出来,每个人都调好之后,代码一合并,空间不够了,经过各种删减优化,终于是下进去了。但是这个时候,没有空间可以写log了,出了问题,也不知道是怎么回事,因为这个项目是要大批量一两百个设备运行起来才能看到效果的,我不可能每个设备都连着jlink在线调试啊。关键是空间不足,引脚也没有空出来的。
机缘巧合之下,我在网上找到了一个神器,pylink-square。就是用python来控制jlink。经过我的试验,发现这个包可以在MCU运行期间连上MCU,还不会打断MCU的运行,更厉害的地方是,它还可以把MCU的RAM,FLASH中的内容读出来,实时的哦,读取的操作不会让MCU停下来。有了这个包,虽然我不能打log了,但是我可以把一些关键的变量读出来看,并且因为不会打断MCU的运行,所以我可以拿着个jlink,想看哪个设备就戳上去读变量。
flash中的存的参数还好说,你肯定是知道地址的。但是一些RAM中的变量,要怎么读取呢。这里要分两种情况,如果是静态的变量,或者全局变量,应该是固定地址的,按理说是能够根据地址直接读出来的,如果是栈中的变量,函数中的局部变量,那就无能为力了。另外,虽然我现在还没尝试去读,但是我看到这个pylink的包好像还可以读寄存器的值,也就是R0~R13。那么在死机的时候,是不是能够读取这些寄存器的值,还有RAM中的数据来判断死机是死在哪了呢,这个功能想想还是有可行性的,以后有机会试试。