最近和朋友聊关于错误追踪的一些问题,有不少人知道使用,但是原理却不是很理解,正好最近没事我打算简单写一下,写的不好或者有错误的地方多多理解啊。
首先是我们以前使用一种简单的错误追踪hardfault
这个原理比较简单,大概说一下,就是在进hardfault的时候首先判断LR寄存器的bit2位,查看当前是使用msp还是psp,然后把使用到的sp数据读到R0里面。
平时LR是保存返回的值,进入中断后就会变化,确定哪个SP后就可以在对应的SP里面取出被压的栈的数据,按照顺序即可
取出来的数据特别是LR在程序里搜索地址大概率可以找到hardfault错误位置。
但是这种方法使用起来还是不顺手很多时候很难定位错误的位置,下面说下cm_backtrace。
在使用rtthread的时候有个组件可以直接加入使用。