新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > stm32中出現(xiàn)的hard_fault問(wèn)題 如何解決

stm32中出現(xiàn)的hard_fault問(wèn)題 如何解決

作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
最近移植別人的一個(gè)lora程序,公司前任同事已經(jīng)搞定的程序,從IAR平臺(tái)移植到KEIL中,移植后,居然出現(xiàn)了hardfault問(wèn)題。一直以來(lái),我很少遇到這個(gè)問(wèn)題,遇到了,也算是好事。

然后看看如何解決的吧。

本文引用地址:http://butianyuan.cn/article/201611/316535.htm

1、單步執(zhí)行,發(fā)現(xiàn)程序運(yùn)行到哪的時(shí)候出現(xiàn)了hardfault問(wèn)題。發(fā)現(xiàn)是初始化的時(shí)候。應(yīng)該是結(jié)構(gòu)體指針的初始化問(wèn)題。

2、其實(shí)也從晚上找了一些如何定位hardfault的問(wèn)題點(diǎn)的方法。充分利用call stack以及但不調(diào)試的工具。

3、問(wèn)題點(diǎn)通常發(fā)生在數(shù)據(jù)越界,指針未初始化,堆棧溢出的這些情況。

method-1 試過(guò)它的方法,查看寄存器,利用反匯編,定位出問(wèn)題點(diǎn)。http://bbs.ednchina.com/BLOG_ARTICLE_3024685.HTM

method-2 也試過(guò)這個(gè)方法,利用fault reports,以及call stack+local窗口,定位問(wèn)題點(diǎn)。http://blog.csdn.net/xiahouzuoxin/article/details/10068455

在這里,我推薦method-2。

static void __lora_init(void)
{
lora_port_init(); ----GPIO的初始化
register_rf_func(&ctrlTypefunc); ---結(jié)構(gòu)體,成員是指針
····
}
更改為
static void __lora_init(void)
{
register_rf_func(&ctrlTypefunc); ---結(jié)構(gòu)體,成員是指針
lora_port_init(); ----GPIO的初始化
····
}
由于結(jié)構(gòu)體在lora_port_init();中使用到結(jié)構(gòu)體ctrlTypefunc,但是未初始化,所以出現(xiàn)這個(gè)問(wèn)題。


關(guān)鍵詞: stm32中hardfaul

評(píng)論


技術(shù)專區(qū)

關(guān)閉