cybinlyc 发表于 2015-12-5 11:18
有关mpu的设置函数如下,
void board_mpu_init( void )
{
/* - Region 0: 0x00000000 - 0x0007FFFF ...
刚试验过,同样的工程添加了board_mpu_init之后,在target-read/write menory areas 中选中offram,运行还是会出现同样的hardfault,如果不选择offram,程序就能正常运行。也就是说只要使能外部SDRAM,程序就不能正常运行;如果不使能,程序正常运行。
添加board_mpu_init的方法,修改startup.s
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT board_mpu_init
IMPORT __low_level_init
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =board_mpu_init
BLX R0
LDR R0, =__low_level_init
BLX R0
LDR R0, =__main
BX R0
ENDP
产生hardfault时的堆栈和PC
在调用函数返回之前,堆栈0xA0007788,PC 是0x00017dc
在执行到调用函数返回时,程序行的 “}”位置,堆栈0xA000790,而PC 变成了0x0000000,下一步就产生了hardfault,实在是搞不懂了为什么了。