在线时间0 小时
UID2045338
注册时间2017-11-8
NXP金币0
该用户从未签到
新手上路

- 积分
- 5
- 最后登录
- 2017-11-8
|
1、官方给的以太网加载程序,是 IAR 开发环境下的,已在我的 MK64FX512 板子上跑通;
2、但是公司规定必须在 Keil MDK development,在移植过程中碰到一个问题:
我想把 Fapp_params.c 放到 ROM 地址 0x7f000 处,我在 scatter file 中增加
ER_m_fnet_app FappParams_start FappParams_size{
fapp_params.o (+RO)
}
编译后的 map file 显示
Execution Region ER_m_fnet_app (Base: 0x0007f000, Size: 0x00000244, Max: 0x00000fff, ABSOLUTE)
Base Addr Size Type Attr Idx E Section Name Object
0x0007f000 0x0000008c Code RO 6026 i.fapp_params_from_flash fapp_params.o
0x0007f08c 0x000000dc Code RO 6027 i.fapp_params_to_flash fapp_params.o
0x0007f168 0x000000dc Data RO 6029 .fapp_params fapp_params.o
看着好像是对的,但是
当我用 J-Link 进行在线仿真的时候,程序直接进入 hardfault
下面是我的 Scatter File
;#if (defined(__ram_vector_table__))
#define __ram_vector_table_size__ 0x00000400
;#else
;#define __ram_vector_table_size__ 0x00000000
;#endif
#define m_interrupts_start 0x00000000
#define m_interrupts_size 0x00000400
#define m_flash_config_start 0x00000400
#define m_flash_config_size 0x00000010
#define m_text_start 0x00000410
#define m_text_size 0x0007EBF0
#define m_interrupts_ram_start 0x1FFF0000
#define m_interrupts_ram_size __ram_vector_table_size__
#define m_data_start (m_interrupts_ram_start + m_interrupts_ram_size)
#define m_data_size (0x00010000 - m_interrupts_ram_size)
#define m_data_2_start 0x20000000
#define m_data_2_size 0x00020000
/* FNET application parameters (optional).*/
#define FappParams_start (0x0007FFFF + 1 - (4*0x400))
#define FappParams_end 0x0007FFFF
#define FappParams_size 0xFFF
/* Sizes */
#if (defined(__stack_size__))
#define Stack_Size __stack_size__
#else
#define Stack_Size 0x01000
#endif
#if (defined(__heap_size__))
#define Heap_Size __heap_size__
#else
#define Heap_Size 0x0400
#endif
LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_start { ; load region size_region
VECTOR_ROM m_interrupts_start m_interrupts_size { ; load address = execution address
* (RESET,+FIRST)
}
ER_m_flash_config m_flash_config_start FIXED m_flash_config_size { ; load address = execution address
* (FlashConfig)
}
ER_m_text m_text_start m_text_size { ; load address = execution address
* (InRoot$$Sections)
.ANY (+RO)
}
ER_m_fnet_app FappParams_start FappParams_size{
fapp_params.o (+RO)
}
;#if (defined(__ram_vector_table__))
VECTOR_RAM m_interrupts_ram_start EMPTY m_interrupts_ram_size {
}
;#else
;VECTOR_RAM m_interrupts_start EMPTY 0 {
;}
;#endif
RW_m_data m_data_start m_data_size { ; RW data
.ANY (+RW +ZI)
}
RW_m_data_2 m_data_2_start m_data_2_size-Stack_Size-Heap_Size { ; RW data
.ANY (+RW +ZI)
}
ARM_LIB_HEAP ((ImageLimit(RW_m_data_2) == m_data_2_start) ? m_data_2_start : +0) EMPTY Heap_Size { ; Heap region growing up
}
ARM_LIB_STACK m_data_2_start+m_data_2_size EMPTY -Stack_Size { ; Stack region growing down
}
}
在线求助
最佳答案
我建议你可以将特定的函数或者变量放到Flash指定地点后,再试一下
|
|