查看: 5836|回复: 13

[已解决] MK22FX512 的boot升级问题

[复制链接]

该用户从未签到

16

主题

62

帖子

0

注册会员

Rank: 2

积分
159
最后登录
2021-8-31
发表于 2017-6-8 14:05:26 | 显示全部楼层 |阅读模式
我的boot程序做好了,也把APP程序写入到了flash中了(原程序的汇编语句和boot写入flash的语句对比过,是一样的),但是程序跳转的时候程序又跳回到了boot程序的__init_hardware();�啘䥫럒뫕⹣摼Ṓ殬刹쵭揺淿̴h现在怀疑是APP程序没有设置中断向量表SCB_VTOR,知道具体该怎么设置,求大神指教,不胜感激

跳转程序

跳转程序

最佳答案

anshuping1121 发表于 2017-6-8 17:49 不对啊,程序还是跳到BOOT程序里了,跳转完之后的地址是BOOT程序main函数的地址 ... 关键是你有没有把APP_VECTOR_TABLE 定义到你的地址? 比如0X4000? 查看下你的定义。 你可 ...
回复

使用道具 举报

该用户从未签到

16

主题

62

帖子

0

注册会员

Rank: 2

积分
159
最后登录
2021-8-31
 楼主| 发表于 2017-6-8 14:07:51 | 显示全部楼层
新人用论坛,描述里的乱码可以略过,不好意思
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-6-8 15:55:45 | 显示全部楼层
楼主你好!
建议你去看看我们的KBOOT2.0。
http://www.nxp.com/products/refe ... ab=Design_Tools_Tab
安装后,里面有很多文档以及bootloader的代码,APP的代码。
APP你需要偏移到你bootloader指定的重定向地址,然后再跳转。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-6-8 16:02:07 | 显示全部楼层
static void jump_to_application(uint32_t applicationAddress, uint32_t stackPointer)
{
#if BL_FEATURE_OTFAD_MODULE
    quadspi_cache_clear();
    oftfad_resume_as_needed();
#endif

    shutdown_cleanup(kShutdownType_Shutdown);

    // Create the function call to the user application.
    // Static variables are needed since changed the stack pointer out from under the compiler
    // we need to ensure the values we are using are not stored on the previous stack
    static uint32_t s_stackPointer = 0;
    s_stackPointer = stackPointer;
    static void (*farewellBootloader)(void) = 0;
    farewellBootloader = (void (*)(void))applicationAddress;

    // Set the VTOR to the application vector table address.
    SCB->VTOR = (uint32_t)APP_VECTOR_TABLE;

    // Set stack pointers to the application stack pointer.
    __set_MSP(s_stackPointer);
    __set_PSP(s_stackPointer);

    // Jump to the application.
    farewellBootloader();
    // Dummy fcuntion call, should never go to this fcuntion call
    shutdown_cleanup(kShutdownType_Shutdown);
}
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

62

帖子

0

注册会员

Rank: 2

积分
159
最后登录
2021-8-31
 楼主| 发表于 2017-6-8 16:44:29 | 显示全部楼层
小恩GG 发表于 2017-6-8 16:02
static void jump_to_application(uint32_t applicationAddress, uint32_t stackPointer)
{
#if BL_FEATURE ...

你这是在boot程序里设置向量表?
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-6-8 17:24:08 | 显示全部楼层
anshuping1121 发表于 2017-6-8 16:44
你这是在boot程序里设置向量表?

向量表起始地址就是代码的起始地址。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

62

帖子

0

注册会员

Rank: 2

积分
159
最后登录
2021-8-31
 楼主| 发表于 2017-6-8 17:49:47 | 显示全部楼层
小恩GG 发表于 2017-6-8 17:24
向量表起始地址就是代码的起始地址。

不对啊,程序还是跳到BOOT程序里了,跳转完之后的地址是BOOT程序main函数的地址
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

62

帖子

0

注册会员

Rank: 2

积分
159
最后登录
2021-8-31
 楼主| 发表于 2017-6-8 17:51:43 | 显示全部楼层
小恩GG 发表于 2017-6-8 17:24
向量表起始地址就是代码的起始地址。

跳转完之后是boot程序里的main函数运行之前的地址
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-6-9 10:41:07 | 显示全部楼层
anshuping1121 发表于 2017-6-8 17:49
不对啊,程序还是跳到BOOT程序里了,跳转完之后的地址是BOOT程序main函数的地址 ...

关键是你有没有把APP_VECTOR_TABLE 定义到你的地址?
比如0X4000?
查看下你的定义。
你可以参考下官方的KBOOT2.0代码,IAR工程的。
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9269
    最后登录
    2022-5-12
    发表于 2017-6-9 10:49:44 | 显示全部楼层
    mark 下,感觉这块好难理解
    好好
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 15:54 , Processed in 0.113174 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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