最近移植他人的一个lora程序,公司上一任搭档现已搞定的程序,从IAR渠道移植到KEIL中,移植后,竟然呈现了hardfault问题。一直以来,我很少遇到这个问题,遇到了,也算是功德。
然后看看怎么处理的吧。
1、单步履行,发现程序运转到哪的时分呈现了hardfault问题。发现是初始化的时分。应该是结构体指针的初始化问题。
2、其实也从晚上找了一些怎么定位hardfault的问题点的办法。充分使用call stack以及但不调试的东西。
3、问题点一般产生在数据越界,指针未初始化,仓库溢出的这些状况。
method-1 试过它的办法,检查寄存器,使用反汇编,定位出问题点。http://bbs.ednchina.com/BLOG_ARTICLE_3024685.HTM
method-2 也试过这个办法,使用fault reports,以及call stack+local窗口,定位问题点。http://blog.csdn.net/xiahouzuoxin/article/details/10068455
在这里,我引荐method-2。
static void __lora_init(void)
{
lora_port_init(); —-GPIO的初始化
register_rf_func(&ctrlTypefunc); —结构体,成员是指针
····
}
更改为
static void __lora_init(void)
{
register_rf_func(&ctrlTypefunc); —结构体,成员是指针
lora_port_init(); —-GPIO的初始化
····
}
因为结构体在lora_port_init();中使用到结构体ctrlTypefunc,可是未初始化,所以呈现这个问题。