Arm rrr0,1;blx r0?你的反汇编显示了什么地址进入二进制执行?为什么二进制执行中会有这么多开销?您是否正在尝试处理任何情况,在此之前是否有代码运行,使系统处于未知状态?您可以在C调用中对_binExec执行or,那么bin exec只不过是blx r
Arm rrr0,1;blx r0?你的反汇编显示了什么地址进入二进制执行?为什么二进制执行中会有这么多开销?您是否正在尝试处理任何情况,在此之前是否有代码运行,使系统处于未知状态?您可以在C调用中对_binExec执行or,那么bin exec只不过是blx r,arm,bootloader,atmel,cortex-m,Arm,Bootloader,Atmel,Cortex M,rrr0,1;blx r0?你的反汇编显示了什么地址进入二进制执行?为什么二进制执行中会有这么多开销?您是否正在尝试处理任何情况,在此之前是否有代码运行,使系统处于未知状态?您可以在C调用中对_binExec执行or,那么bin exec只不过是blx r0。当然,如果代码返回,它将返回到blx之后,这可能不是您想要的。我的新应用程序位于0x420000,但我需要跳转到0x420004,因为重置向量位于此地址。这是在汇编代码中。在那里,我还尝试跳转到0x420005,因为这是解决问题的方法 in
rrr0,1;blx r0?你的反汇编显示了什么地址进入二进制执行?为什么二进制执行中会有这么多开销?您是否正在尝试处理任何情况,在此之前是否有代码运行,使系统处于未知状态?您可以在C调用中对_binExec执行or,那么bin exec只不过是blx r0。当然,如果代码返回,它将返回到blx之后,这可能不是您想要的。我的新应用程序位于0x420000,但我需要跳转到0x420004,因为重置向量位于此地址。这是在汇编代码中。在那里,我还尝试跳转到0x420005,因为这是解决问题的方法
int main(void){
// Init and downloading the .bin to Flash
binary_exc((void*) 0x420000);
}
int binary_exec(void * vStart){
int i;
// -- Check parameters
// Should be at least 32 words aligned
if ((uint32_t)vStart & 0x7F)
return 1;
Disable_global_interrupt();
// Disable IRQs
for (i = 0; i < 8; i ++) NVIC->ICER[i] = 0xFFFFFFFF;
// Clear pending IRQs
for (i = 0; i < 8; i ++) NVIC->ICPR[i] = 0xFFFFFFFF;
// -- Modify vector table location
// Barriars
__DSB();
__ISB();
// Change the vector table
SCB->VTOR = ((uint32_t)vStart & SCB_VTOR_TBLOFF_Msk);
// Barriars
__DSB();
__ISB();
Enable_global_interrupt();
// -- Load Stack & PC
_binExec(vStart);
return 0;
}
void _binExec (void * l_code_addr){
__asm__ ("mov r1, r0 \n"
"ldr r0, [r1, #4] \n" //I also tryed #5 but that doesn't work, too
"ldr sp, [r1] \n"
"blx r0"
);
}