查看: 3324|回复: 2

[求助] RT1064 BOOT引导APP问题

[复制链接]

该用户从未签到

1

主题

3

帖子

0

新手上路

Rank: 1

积分
30
最后登录
2022-4-21
发表于 2022-2-19 18:18:03 | 显示全部楼层 |阅读模式
使用RT1064 自己做了一个BOOT,BOOT预留空间是256K ,BOOT正常开机检测按键,没有键按下就正常引导APP,现在APP 已经去掉了XIP_BOOT_HEADER_ENABLE 宏,链接的ICF文件在例程的MIMXRT1064xxxxx_flexspi_nor.icf上做了修改 主要是改了:
define symbol m_interrupts_start       = 0x70040000;
define symbol m_interrupts_end         = 0x700403FF;

define symbol m_text_start             = 0x70040400;
define symbol m_text_end               = 0x703FFFFF;
目前的问题是 1、APP这样改了之后,工程用IAR仿真无法进入MAIN函数
                    2、把生成的APP BIN文件烧录在0x70040000的位置(对比过了烧录的文件是正确的),但是开机后BOOT中无法引导,函数指针跳转0x70040004之后一直重启。
不知道是哪里的问题,是APP的文件不对还是BOOT引导问题,还有没有IVT头,IAR无法仿真也是个大问题。
void JumptoUserCode()
{
    void (*pFun)(void);
    U32 ApplicationAddress=FlexSPI2_AMBA_BASE+APP_START_ADDR;
    shutdown_cleanup(kShutdownType_Shutdown);
    SCB->VTOR = (uint32_t)ApplicationAddress;
    __set_MSP(*(volatile U32*) ApplicationAddress);
    __set_PSP(*(volatile U32*) ApplicationAddress);
     pFun = (void(*)(void))(ApplicationAddress+4);
     (*pFun)();
}

回复

使用道具 举报

该用户从未签到

1

主题

3

帖子

0

新手上路

Rank: 1

积分
30
最后登录
2022-4-21
 楼主| 发表于 2022-2-21 11:56:46 | 显示全部楼层
pFun = (void(*)(void))(ApplicationAddress+4);  发现是这里有问题,应该是
JmpAddr  = *(INT32U *)(APP_START_ADDR+4);
pFun = (void(*)(void))JmpAddr;
这样就能跳转APP了犯了一个低级错误,不过IAR仿真 APP工程的的问题还没解决
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

3

帖子

0

新手上路

Rank: 1

积分
30
最后登录
2022-4-21
 楼主| 发表于 2022-2-21 12:02:13 | 显示全部楼层
神奇,跳转这个问题改好之后,IAR也能进入MAIN函数了
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-9-10 08:54 , Processed in 0.083415 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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