佚名通过本文主要向大家介绍了hardfault handler,b hardfault handler,hardfault,stm32 hardfault,hardfault interrupt等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 自定义scatter文件,程序进入HardFault_Handler
描述:
求大神指点一二。
scatter文件如下,芯片是STM32F407ZGT6:
在调试状态中查看函数地址,其中
main就在0x08020000,但是SystemInit在0x08030246,会不会是与这个有关呢?
解决方案1:
描述:
stm32scatterromHardFault_Handler
今天想试验一下自定义scatter文件,把函数放到指定的地方,但是一用自己这个scatter,结果就进入HardFault_Handler。求大神指点一二。
scatter文件如下,芯片是STM32F407ZGT6:
LOAD_ROM_1 0x08000000 0x00100000
{
ER_IRAM1 0x08000000 0x0801FFFF
{
startup_stm32f407xx.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
ER_IRAM2 0x08020000 0x802FFFFF
{
main.o (+RW, +RO)
}
ER_IRAM3 0x08030000
{
SystemInit.o (+RO, +RW)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
}
在调试状态中查看函数地址,其中
main就在0x08020000,但是SystemInit在0x08030246,会不会是与这个有关呢?
解决方案1:
main的函数太大了吧 不然后面的sys函数应该链接到803的
解决方案2: scatter里面的内存空间也要和工程设置的空间一致
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x00038000 0x0002FFFC { ; load region size_region
ER_IROM1 0x00038000 0x0002FFFC { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x10000000 0x00008000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x2007C000 0x00008000 {
.ANY (+RW +ZI)
}
}
LR_IROM2 0x00067FFC 0x04 { ; load region size_region
ER_IROM2 0x00067FFC 0x04 { ; load address = execution address
*.o (firmware_id_section, +First)
}
}