为什么reset在cortex m3中赋值为start + 1
Why the reset is assigned value of start + 1 in cortex m3
我正在学习cortex m3的汇编语言,我不明白为什么reset是start + 1,应该是start 只知道什么时候reset应该从start开始执行,有什么特殊原因吗sp 被分配 0x200.
.thumb
.syntax unified
sp: .word 0x200
reset: .word start + 2
start:
mov r0, #5
mov r1, #4
add r2, r0, r1
stop: b stop
这是一个以不止一种方式编写的错误。 arm 文档清楚地指出向量是设置了 lsbit 的地址,因此可以考虑加一但与一进行或运算更安全。
您阅读的 cortex-m3 if/when 是基于 armv7-m 的,并且在 armv7-m 文档中,您在进行任何类型的编程之前也应该拥有:
On powerup or reset, the processor uses the entry at offset 0 as the initial value for SP_main, ... All other entries must have bit[0] set to 1
On exception entry, if bit[0] of the associated vector table entry is set to 0, execution of the first instruction causes an INVSTATE UsageFault
(是的,这意味着所有异常向量不只是重置)
让语言为您服务,您就不必在这些位上进行破解,工具会为您完成:
.thumb
.syntax unified
sp: .word 0x200
reset: .word start
.thumb_func
start:
mov r0, #5
mov r1, #4
add r2, r0, r1
stop: b stop
一旦链接(table 无法填写,直到链接并且链接器知道标签是一个函数所以生成正确的值)。
Disassembly of section .text:
00000000 <sp>:
0: 00000200 andeq r0, r0, r0, lsl #4
00000004 <reset>:
4: 00000009 andeq r0, r0, r9
00000008 <start>:
8: f04f 0005 mov.w r0, #5
c: f04f 0104 mov.w r1, #4
10: eb00 0201 add.w r2, r0, r1
00000014 <stop>:
14: e7fe b.n 14 <stop>
你可以看到向量 table 是正确的并且会起作用,重置向量指向重置处理程序开始:ORRed with 1 (0x00000008|1 = 0x00000009)
我正在学习cortex m3的汇编语言,我不明白为什么reset是start + 1,应该是start 只知道什么时候reset应该从start开始执行,有什么特殊原因吗sp 被分配 0x200.
.thumb
.syntax unified
sp: .word 0x200
reset: .word start + 2
start:
mov r0, #5
mov r1, #4
add r2, r0, r1
stop: b stop
这是一个以不止一种方式编写的错误。 arm 文档清楚地指出向量是设置了 lsbit 的地址,因此可以考虑加一但与一进行或运算更安全。
您阅读的 cortex-m3 if/when 是基于 armv7-m 的,并且在 armv7-m 文档中,您在进行任何类型的编程之前也应该拥有:
On powerup or reset, the processor uses the entry at offset 0 as the initial value for SP_main, ... All other entries must have bit[0] set to 1
On exception entry, if bit[0] of the associated vector table entry is set to 0, execution of the first instruction causes an INVSTATE UsageFault
(是的,这意味着所有异常向量不只是重置)
让语言为您服务,您就不必在这些位上进行破解,工具会为您完成:
.thumb
.syntax unified
sp: .word 0x200
reset: .word start
.thumb_func
start:
mov r0, #5
mov r1, #4
add r2, r0, r1
stop: b stop
一旦链接(table 无法填写,直到链接并且链接器知道标签是一个函数所以生成正确的值)。
Disassembly of section .text:
00000000 <sp>:
0: 00000200 andeq r0, r0, r0, lsl #4
00000004 <reset>:
4: 00000009 andeq r0, r0, r9
00000008 <start>:
8: f04f 0005 mov.w r0, #5
c: f04f 0104 mov.w r1, #4
10: eb00 0201 add.w r2, r0, r1
00000014 <stop>:
14: e7fe b.n 14 <stop>
你可以看到向量 table 是正确的并且会起作用,重置向量指向重置处理程序开始:ORRed with 1 (0x00000008|1 = 0x00000009)