请选择 进入手机版 | 继续访问电脑版
查看: 4367|回复: 5

[S32] s32k144的uart bootloader跳转问题

[复制链接]

该用户从未签到

1

主题

2

帖子

0

新手上路

Rank: 1

积分
10
最后登录
2018-11-19
发表于 2018-11-14 09:57:52 | 显示全部楼层 |阅读模式
各位大神,新人最近在用s32k144的评估板调试s32k144的BootLoader,用的是uart,app(起始地址0xB000)的bin文件接收成功之后,不能直接跳转过去(应该是死掉了),而是需要按一下reset,才能跳转到app执行,跳转部分的代码如下:
void jump_to_app(uint32_t image_address) {
    App_t app_jump;
    uint32_t mspval = *(uint32_t *)image_address;

    /*close interrupt */
    INT_SYS_DisableIRQGlobal();
    app_jump = (App_t)(*((volatile uint32_t *)(APP_IMAGE_START + 4))); /* 程序复位中断向量. */

    S32_SCB->VTOR = image_address;

    __asm__ __volatile__("msr msp,%0"::"r"(mspval):"memory");
    __asm__ __volatile__("msr psp,%0"::"r"(mspval):"memory");

    app_jump();

}

BootLoader的flash link文件修改如下:
MEMORY
{
  /* Flash */
  m_interrupts          (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000400
  m_flash_config        (RX)  : ORIGIN = 0x00000400, LENGTH = 0x00000010
  m_text                (RX)  : ORIGIN = 0x00000410, LENGTH = 0x0000ABF0

  /* SRAM_L */
  m_data                (RW)  : ORIGIN = 0x1FFF8000, LENGTH = 0x00008000

  /* SRAM_U */
  m_data_2              (RW)  : ORIGIN = 0x20000000, LENGTH = 0x00007000
}

app的flash link文件修改如下:
MEMORY
{
  /* Flash */
  m_interrupts          (RX)  : ORIGIN = 0x0000B000, LENGTH = 0x00000400
  m_flash_config        (RX)  : ORIGIN = 0x0000B400, LENGTH = 0x00000010
  m_text                (RX)  : ORIGIN = 0x0000B410, LENGTH = 0x00074BF0

  /* SRAM_L */
  m_data                (RW)  : ORIGIN = 0x1FFF8000, LENGTH = 0x00008000

  /* SRAM_U */
  m_data_2              (RW)  : ORIGIN = 0x20000000, LENGTH = 0x00007000
}


求助各位大神,能否指点一二,看看哪里出了问题,感激不尽。
我知道答案 目前已有5人回答
回复

使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-23 09:57
  • 签到天数: 1587 天

    [LV.Master]伴坛终老

    5

    主题

    3046

    帖子

    23

    金牌会员

    Rank: 6Rank: 6

    积分
    8196
    最后登录
    2024-4-16
    发表于 2018-11-14 10:29:33 | 显示全部楼层
    APP_IMAGE_START 定义了么?0xB000

    你单步跟一下就知道了,记得汇编模式下跟。

    评分

    参与人数 1 +1 收起 理由
    NXP管管 + 1

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    2018-11-19
     楼主| 发表于 2018-11-14 12:53:57 | 显示全部楼层
    Splore.Liu 发表于 2018-11-14 10:29
    APP_IMAGE_START 定义了么?0xB000

    你单步跟一下就知道了,记得汇编模式下跟。 ...

    APP_IMAGE_START定义了的
    汇编跟的结果如下
              jump_to_app:
    00000b48:   push    {r7, lr}
    00000b4a:   sub     sp, #16
    00000b4c:   add     r7, sp, #0
    00000b4e:   str     r0, [r7, #4]
    43           uint32_t mspval = *(uint32_t *)image_address;
    00000b50:   ldr     r3, [r7, #4]
    00000b52:   ldr     r3, [r3, #0]
    00000b54:   str     r3, [r7, #12]
    46           INT_SYS_DisableIRQGlobal();
    00000b56:   bl      0x12e4 <INT_SYS_DisableIRQGlobal>
    47           app_jump = (App_t)(*((volatile uint32_t *)(IMAGE_ADDR + 4))); /* 程序复位中断向量. */
    00000b5a:   movw    r3, #45060      ; 0xb004
    00000b5e:   ldr     r3, [r3, #0]
    00000b60:   str     r3, [r7, #8]
    49           S32_SCB->VTOR = image_address;
    00000b62:   mov.w   r2, #3758153728 ; 0xe000e000
    00000b66:   ldr     r3, [r7, #4]
    00000b68:   str.w   r3, [r2, #3336] ; 0xd08
    51           __asm__ __volatile__("msr msp,%0"::"r"(mspval):"memory");
    00000b6c:   ldr     r3, [r7, #12]
    00000b6e:   msr     MSP, r3
    52           __asm__ __volatile__("msr psp,%0"::"r"(mspval):"memory");
    00000b72:   ldr     r3, [r7, #12]
    00000b74:   msr     PSP, r3
    54           app_jump();
    00000b78:   ldr     r3, [r7, #8]
    00000b7a:   blx     r3
    55       }
    执行最后一句就到了:0000b4fc:   b.w     0xb4fc
    同时S32DS提示No source available for "0xb4fc",然后就死掉了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    15
    最后登录
    2021-5-31
    发表于 2021-5-27 11:15:56 | 显示全部楼层
    wg20181108 发表于 2018-11-14 12:53
    APP_IMAGE_START定义了的
    汇编跟的结果如下
              jump_to_app:

    最近在调试S32 UART的bootload,也遇到楼主的问题,请问当初是怎么解决的,谢谢
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    4

    帖子

    0

    注册会员

    Rank: 2

    积分
    66
    最后登录
    2022-1-8
    发表于 2021-9-10 15:47:45 | 显示全部楼层
    王 发表于 2021-5-27 11:15
    最近在调试S32 UART的bootload,也遇到楼主的问题,请问当初是怎么解决的,谢谢 ...

    同问 这是什么原因 如何解决的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    4

    帖子

    0

    注册会员

    Rank: 2

    积分
    66
    最后登录
    2022-1-8
    发表于 2021-9-10 16:30:18 | 显示全部楼层
    wg20181108 发表于 2018-11-14 12:53
    APP_IMAGE_START定义了的
    汇编跟的结果如下
              jump_to_app:

    请问问题解决了吗,我也遇到了这样的问题
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-16 15:57 , Processed in 0.128197 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表