查看: 3585|回复: 5

[已解决] M0+ 的mcu程序复位后的引导步骤(已解决)

[复制链接]
  • TA的每日心情
    慵懒
    2018-10-7 11:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    25

    主题

    134

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    390
    最后登录
    2020-9-5
    发表于 2015-8-29 09:54:33 | 显示全部楼层 |阅读模式
    本帖最后由 FAYE-351782 于 2015-9-7 11:17 编辑

    M0+   MCU复位后(如重新上电), PC地址是如何加载到用户程序的。

    我这边程序修改了他的中断向量表的地址
    MEMORY
    {
      m_interrupts        (rx) : ORIGIN = 0x00004000, LENGTH = 0xC0       //修改前ORIGIN = 0x00000000
      m_cfmprotrom         (rx) : ORIGIN = 0x00000400, LENGTH = 0x10
      m_text                 (rx) : ORIGIN = 0x000040C0, LENGTH = 128K - 0x40C0      //ORIGIN = 0x00000800, LENGTH = 128K - 0x0800
      m_data            (rwx) : ORIGIN = 0x1FFFF000, LENGTH = 16K                        /* SRAM */
    }


    之后程序第一次调试烧入可以用,复位后就程序就无法运行了。程序运行到 0xffffffe 就死在哪里了。

    所以想知道MCU 复位的引导步骤。
    谢谢!!
    我知道答案 目前已有5人回答

    评分

    参与人数 1NXP金币 +3 收起 理由
    小七 + 3

    查看全部评分

    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    45

    帖子

    0

    注册会员

    Rank: 2

    积分
    146
    最后登录
    1970-1-1
    发表于 2015-8-30 09:25:34 | 显示全部楼层
    这个改动导致调试可以,自己运行不行。
    ARM上电后从0地址取堆栈指针,4地址取程序入口地址,这个地址现在给你偏移了,到了0x4000,0地址没有东西了,想要正确运行,需要有bootloader在0地址,并执行跳转到0x4000
    m_interrupts        (rx) : ORIGIN = 0x00004000, LENGTH = 0xC0       //修改前ORIGIN = 0x00000000
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-8-31 09:48:35 | 显示全部楼层
    这个需要你bootloader程序去做的,当你bootloader运行之后,比如如果接受上位机超时,就需要自行跳转到应用程序的偏移地址。
    具体你可以查看AN2295的代码:
        SCB_VTOR = RELOCATED_VECTORS;
       
        // Jump to user application
        JumpToUserApplication(*((unsigned long*)RELOCATED_VECTORS), *((unsigned long*)(RELOCATED_VECTORS+4)));  
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-10-7 11:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    25

    主题

    134

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    390
    最后登录
    2020-9-5
     楼主| 发表于 2015-9-5 20:18:19 | 显示全部楼层
    FSL_FAE_YDW 发表于 2015-8-30 09:25
    这个改动导致调试可以,自己运行不行。
    ARM上电后从0地址取堆栈指针,4地址取程序入口地址,这个地址现在给 ...

    ”ARM上电后从0地址取堆栈指针,4地址取程序入口地址“
    那为什么第一次烧进去是可以的??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    45

    帖子

    0

    注册会员

    Rank: 2

    积分
    146
    最后登录
    1970-1-1
    发表于 2015-9-6 09:47:44 | 显示全部楼层
    调试器带着跑,是会直接把第一次运行的指针自己带过去的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-10-7 11:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    25

    主题

    134

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    390
    最后登录
    2020-9-5
     楼主| 发表于 2015-9-6 13:20:24 | 显示全部楼层
    FSL_FAE_YDW 发表于 2015-9-6 09:47
    调试器带着跑,是会直接把第一次运行的指针自己带过去的

    ok   
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-28 12:12 , Processed in 0.101016 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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