在线时间3 小时
UID3093780
注册时间2015-1-20
NXP金币0
该用户从未签到
新手上路

- 积分
- 30
- 最后登录
- 2016-4-29
|
按照我的理解,单片机一上电,跑的是flash room 0x0地址的内容,
那么在flash的0x0地址处应该放的是Reset_Hanlder对应的指令吧?
链接脚本指明了ENTRY是Reset_Handler:
/* Entry Point */
ENTRY(Reset_Handler)
所以我做了如下验证:
读flash 0x0地址的前4个字节,得到的值为:
1a30 2000
从被运行的elf中找对应的值,位于文件的0x8000处:
0008000 1a30 2000
查看Reset_Handler对应的机器码:
00000000 <Reset_Handler>:
0: b672 cpsid i
2: 4809 ldr r0, [pc, #36] ; (28 <Reset_Handler+0x28>)
4: 4909 ldr r1, [pc, #36] ; (2c <Reset_Handler+0x2c>)
不是1a30啊,说明flash在0x0处放的不是Reset_Handler指令啊!
查看0x8000对应的section:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .interrupts PROGBITS 00000000 008000 0000c0 00 A 0 0 4
是.intterupts这个section:
/* The startup code goes first into internal flash */
.interrupts :
{
__VECTOR_TABLE = .;
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} > m_interrupts
对应的isr_vector符号的内容是:
__isr_vector:
.long __StackTop /* Top of Stack */
.long Reset_Handler /* Reset Handler */
.long NMI_Handler /* NMI Handler*/
.long HardFault_Handler /* Hard Fault Handler*/
那么,我有疑问了:
1. 系统一上电怎么跑进Reset_Handler了?
2. 1a30这个值为什么我在对应的startup_MKE06Z4.o中找不到呢?
|
|