KE02 bootloader 如何跳转到用户程序?跳转的代码看得(已解决)

2020-02-20 21:04发布

本帖最后由 FSL_TICS_ZP 于 2014-10-8 15:59 编辑

asm(“LDR   r1,[r0]”)
asm(“MOV   r13,r1”)
asm(“ADDS   r0,r0,#0x04”)
asm(“LDR   r0,[r0]”)
asm(“BX  r0”)网上看了下 说是跳转PC指针 比如我KE02 bootloader  跳转向量中断重定位是到0x1000,那是不是跳转的时候PC指针会跳转到0X1000处开始运行程序,主要是我对r0,1这些存储是什么东西不了解!!!
希望有人能够帮助下,非常感谢!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
捷恩斯威科技
1楼-- · 2020-02-20 23:02
本帖最后由 捷恩斯威科技 于 2014-9-25 18:06 编辑

没有源代码,不知道前面还有什么内容,就你贴出来这几句。 首先是初始化 SP(R13),R0指向地址存储值。 再跳转到R0+0x04开始执行。这是因为KE02的首4个字节是栈初始化值。4个字节后才真实的程序执行内容。如果R0是0x1000的话,则0x1000存值的栈初始化值,0x1004才是程序执行。好比没有BOOTLOAD的工程,则0x0000存储的栈初始化值,0x0004才是复位向量。
robin林
2楼-- · 2020-02-21 04:53
捷恩斯威科技 发表于 2014-9-25 18:03
没有源代码,不知道前面还有什么内容,就你贴出来这几句。 首先是初始化 SP(R13),R0指向地址存储值。 再跳 ...

你好

SCB_VTOR=0X1000;
jumpTouser(0x1000)
{
        asm(“LDR   r1,[r0]”)
        asm(“MOV   r13,r1”)
        asm(“ADDS   r0,r0,#0x04”)
        asm(“LDR   r0,[r0]”)
        asm(“BX  r0”)
}
这个是他的跳转到用户程序的代码 ,按你说的是 前面的4个字节 存储的INIT_SP,RESET_BL这两个,然后从便宜0x04地址程序从中断向量开始的吗?
因为我对程序从何处开始执行还不了解,还有 R1 R0 R13是存储着什么?是不是不同单片机是不同的,这个我得去看什么资料呢?
security
3楼-- · 2020-02-21 07:04
R0存储参数0x1000,这些属于AAPCS的范畴,去百度下相应的过程调用约定。然后R13等同于sp,这些去看cortex-m3权威指南,,这里就是跳到用户的中断向量表,设置初始栈,然后跳到用户程序入口点。。中断向量表,这些都可以看权威指南
fengyunyu
4楼-- · 2020-02-21 11:54
jumpTouser,调用这个函数时,传递过来的0x1000存储到r0中。
eleqian
5楼-- · 2020-02-21 17:34
 精彩回答 2  元偷偷看……
FSL_TICS_ZP
6楼-- · 2020-02-21 20:06
相信前面网友的回复可以回答你的问题啊!

一周热门 更多>