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"
    );
}