Cortex-M3 跳转到指定bin执行

本文介绍了一种在ARM架构下实现裸机程序跳转的方法。通过定义特定的函数设置堆栈指针(SP)和过程调用堆栈指针(MSP),并利用这些设置跳转到指定内存地址处执行代码。此方法适用于启动加载阶段,能够帮助开发者更好地初始化和控制程序运行环境。

 跳转前指定sp和msp:

#if defined(__GNUC__)
__attribute__(( naked )) static void set_sp(unsigned long addr)
{
    __asm volatile (
        "mov    sp, r0    \n"
        "bx        lr        \n"
    );
}

__attribute__(( naked )) static void set_msp(void)
{
    __asm volatile (
        "mrs    r0, control    \n"
        "bic    r0, #2        \n"
        "msr    control, r0    \n"
        "bx        lr            \n"
    );
}
#else
__asm static void set_sp(unsigned long addr)
{
    mov    sp, r0
    bx    lr
}

__asm static void set_msp(void)
{
    mrs    r0, control
    bic    r0, #2
    msr    control, r0
    bx  lr
}
#endif

跳转到指定地址:

 

 1 typedef int (*jump_fun)( void );
 2 
 3 void jump( unsigned int addr )
 4 {
 5     volatile int *ptr = (int *)addr;
 6     jump_fun jump;
 7 
 8     set_msp();
 9     set_sp(ptr[0]);
10     
11     jump = (jump_fun)(ptr[1]);
12 
13     jump();
14 }

 

转载于:https://www.cnblogs.com/utank/p/8151189.html

我在使用IAR配合JLINK的SWD接口调试瑞萨的RZ-T1双核芯片(cotex-r52+cortex-m3内核)遇到了报错,程序跑飞 iar的DEBUGlog窗口一直滚筒下发这些信息: Mon Aug 04, 2025 15:24:40: IAR Embedded Workbench 9.60.3 (D:\iar\ewarm-9.60.3\arm\bin\armPROC.dll) Mon Aug 04, 2025 15:24:40: Loaded macro file: D:\iar\ewarm-9.60.3\arm/config/debugger/Renesas/RZT1_Trace.dmac Mon Aug 04, 2025 15:24:40: PC-locked license - IAR Embedded Workbench for ARM Mon Aug 04, 2025 15:24:40: J-Link library version: 81202 Mon Aug 04, 2025 15:24:40: JLINK command: ProjectFile = E:\CV\RZT1\an-r01an3691xx0130-rzt1-tcpip\workspace\iccarm\Cortex-M3\Device\Renesas\RIN_Engine\Source\Project\uNet3_bsd\settings\main_iRAM.jlink, return = 0 Mon Aug 04, 2025 15:24:40: Device "R7S910017_M3" selected. Mon Aug 04, 2025 15:24:40: DLL version: V8.12b, compiled Jan 15 2025 12:15:23 Mon Aug 04, 2025 15:24:40: Firmware: J-Link Pro V4 V12 PLUS Jan compiled 4 2025 18:48:20 Mon Aug 04, 2025 15:24:40: Serial number: 601022355 Mon Aug 04, 2025 15:24:40: Selecting SWD as current target interface. Mon Aug 04, 2025 15:24:40: JTAG speed is initially set to: 1000 kHz Mon Aug 04, 2025 15:24:40: ConfigTargetSettings() start Mon Aug 04, 2025 15:24:40: ConfigTargetSettings() end - Took 11us Mon Aug 04, 2025 15:24:40: Found SW-DP with ID 0x3BA02477 Mon Aug 04, 2025 15:24:40: DPIDR: 0x3BA02477 Mon Aug 04, 2025 15:24:40: CoreSight SoC-400 or earlier Mon Aug 04, 2025 15:24:40: Scanning AP map to find all available APs Mon Aug 04, 2025 15:24:40: AP[4]: Stopped AP scan as end of AP map has been reached Mon Aug 04, 2025 15:24:40: AP[0]: AHB-AP (IDR: 0x44770001, ADDR: 0x00000000) Mon Aug 04, 2025 15:24:40: AP[1]: APB-AP (IDR: 0x24770002, ADDR: 0x01000000) Mon Aug 04, 2025 15:24:40: AP[2]: JTAG-AP (IDR: 0x14760010, ADDR: 0x02000000) Mon Aug 04, 2025 15:24:40: AP[3]: JTAG-AP (IDR: 0x23000000, ADDR: 0x03000000) Mon Aug 04, 2025 15:24:40: Iterating through AP map to find AHB-AP to use Mon Aug 04, 2025 15:24:40: AP[0]: Skipped. No ROM table (AHB-AP ROM base: 0xFFFFFFFF) Mon Aug 04, 2025 15:24:40: AP[1]: Skipped. Not an AHB-AP Mon Aug 04, 2025 15:24:40: AP[2]: Skipped. Not an AHB-AP Mon Aug 04, 2025 15:24:40: AP[3]: Skipped. Not an AHB-AP Mon Aug 04, 2025 15:24:40: Attach to CPU failed. Executing connect under reset. Mon Aug 04, 2025 15:24:40: DPIDR: 0x3BA02477 Mon Aug 04, 2025 15:24:40: CoreSight SoC-400 or earlier Mon Aug 04, 2025 15:24:40: Scanning AP map to find all available APs Mon Aug 04, 2025 15:24:40: AP[0]: Stopped AP scan as end of AP map seems to be reached Mon Aug 04, 2025 15:24:40: Iterating through AP map to find AHB-AP to use Mon Aug 04, 2025 15:24:40: Could not find core in Coresight setup Mon Aug 04, 2025 15:24:40: ConfigTargetSettings() start Mon Aug 04, 2025 15:24:40: ConfigTargetSettings() end - Took 29us Mon Aug 04, 2025 15:24:40: Found SW-DP with ID 0x3BA02477 Mon Aug 04, 2025 15:24:40: DPIDR: 0x3BA02477 Mon Aug 04, 2025 15:24:40: CoreSight SoC-400 or earlier Mon Aug 04, 2025 15:24:40: Scanning AP map to find all available APs Mon Aug 04, 2025 15:24:40: AP[4]: Stopped AP scan as end of AP map has been reached Mon Aug 04, 2025 15:24:40: AP[0]: AHB-AP (IDR: 0x44770001, ADDR: 0x00000000) Mon Aug 04, 2025 15:24:40: AP[1]: APB-AP (IDR: 0x24770002, ADDR: 0x01000000) Mon Aug 04, 2025 15:24:40: AP[2]: JTAG-AP (IDR: 0x14760010, ADDR: 0x02000000) Mon Aug 04, 2025 15:24:40: AP[3]: JTAG-AP (IDR: 0x23000000, ADDR: 0x03000000) Mon Aug 04, 2025 15:24:40: Iterating through AP map to find AHB-AP to use Mon Aug 04, 2025 15:24:40: AP[0]: Skipped. No ROM table (AHB-AP ROM base: 0xFFFFFFFF) Mon Aug 04, 2025 15:24:40: AP[1]: Skipped. Not an AHB-AP Mon Aug 04, 2025 15:24:40: AP[2]: Skipped. Not an AHB-AP Mon Aug 04, 2025 15:24:40: AP[3]: Skipped. Not an AHB-AP Mon Aug 04, 2025 15:24:40: Attach to CPU failed. Executing connect under reset. Mon Aug 04, 2025 15:24:40: DPIDR: 0x3BA02477 Mon Aug 04, 2025 15:24:40: CoreSight SoC-400 or earlier Mon Aug 04, 2025 15:24:40: Scanning AP map to find all available APs Mon Aug 04, 2025 15:24:40: AP[0]: Stopped AP scan as end of AP map seems to be reached Mon Aug 04, 2025 15:24:40: Iterating through AP map to find AHB-AP to use Mon Aug 04, 2025 15:24:40: Could not find core in Coresight setup Mon Aug 04, 2025 15:24:40: ConfigTargetSettings() start Mon Aug 04, 2025 15:24:40: ConfigTargetSettings() end - Took 7us Mon Aug 04, 2025 15:24:40: Found SW-DP with ID 0x3BA02477 Mon Aug 04, 2025 15:24:40: DPIDR: 0x3BA02477
最新发布
08-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值