当前位置: 代码迷 >> 单片机 >> 自定义scatter文件,程序进来HardFault_Handler
  详细解决方案

自定义scatter文件,程序进来HardFault_Handler

热度:181   发布时间:2016-04-28 14:45:32.0
自定义scatter文件,程序进入HardFault_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,会不会是与这个有关呢?
------解决思路----------------------
main的函数太大了吧  不然后面的sys函数应该链接到803的
------解决思路----------------------
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)
  }
}