2019-08-14 04:22发布
灼灼其华 发表于 2017-8-30 07:42 PUSH {LR}; 将LR保存在堆栈里面LDR R0, =0x1FFFF000 ;R0 = 0x1FFFF000 ...
最多设置5个标签!
PUSH {LR}; 将LR保存在堆栈里面LDR R0, =0x1FFFF000 ;R0 = 0x1FFFF000
LDR SP, [R0, #0] ;SP = *R0
LDR R0, [R0, #4] ;R0 = *(R0 + 4)
BX R0; 跳转到R0所在的地址去执行代码
POP {PC}; 将栈顶的值赋给PC,即上面的PC = LR, 程序将返回
翻译成C语言应该就是
uint32_t *p = (uint32_t *) 0x1FFFF000 ;
void (*func)(void) = ( void (*)(void) ) (*(p + 1));
SP = *p;
func();
return;
先阿里嘎多,嘎嘎。我自己在整理下。第一行就是将0x1FFFF000这个串口bootloader首地址给了R0
大神!
一周热门 更多>