打印

GD32F450 IAP 无法跳转到应用程序

[复制链接]
2163|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liboguang|  楼主 | 2024-9-21 17:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IAP程序占用的空间是 0x08000000--0x0801FFFF
APP程序占用的空间是 0x0802 0000 to 0x0807FFFF

#define ApplicationAddress 0x8020000

跳转程序代码如下:
typedef  void (*pFunction)(void);

void reboot_app(void)
{
  pFunction Jump_To_Application;
  u32 JumpAddress;
       

        if(((*(uint32_t*)ApplicationAddress)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
        {
               
                //__set_PRIMASK(1);// 关闭全局中断。注意,在跳转前,必须先关闭全局中断,进入用户程序后,在中断向量表地址设置完成后再开中断。       
                __disable_irq(); //关中断()
                __set_FAULTMASK(1);//关闭所有中断

                JumpAddress =  *(__IO uint32_t*) (ApplicationAddress + 4);
                Jump_To_Application = (pFunction) *(u32*) JumpAddress;

                //initialize user application's stack pointer
                __set_MSP(*(__IO uint32_t *)ApplicationAddress);       

                SCB->VTOR = ApplicationAddress;                                                                //重定向中断向量表

                Jump_To_Application();
        }

}

程序下载完成后,执行到Jump_To_Application就死掉了,进不到应用程序里面,以前用GD32F1x系列都没问题,这个F4xx跳转有什么不同吗?麻烦知道的同仁给指点一下!不胜感激!!

使用特权

评论回复
沙发
szt1993| | 2024-9-24 13:37 | 只看该作者
是不是这个函数就有问题,一般情况下是这样的

使用特权

评论回复
板凳
onlycook| | 2024-9-25 11:10 | 只看该作者
检查系统时钟设置

使用特权

评论回复
地板
sagade| | 2024-9-25 16:52 | 只看该作者
栈顶会不会在TCM,还有中断向量表不是APP里面重定向的吗

使用特权

评论回复
5
cr315| | 2025-1-23 18:49 | 只看该作者
IAP程序和APP程序的空间分配可能存在冲突或不合理。例如,如果IAP程序占用的空间与APP程序重叠,或者APP程序的起始地址设置不正确,都可能导致跳转失败。

使用特权

评论回复
6
elephant00| | 2025-1-23 18:50 | 只看该作者
栈顶地址设置不正确

使用特权

评论回复
7
两只袜子| | 2025-1-23 19:20 | 只看该作者
在IAP程序和APP程序中,如果系统时钟的设置不一致,特别是在跳转到APP程序后,APP程序重新初始化系统时钟时,如果时钟切换不成功或配置错误,可能导致程序跑飞或无法正常运行。

使用特权

评论回复
8
jcky001| | 2025-1-23 20:23 | 只看该作者
中断处理不当,可能导致程序异常。

使用特权

评论回复
9
laocuo1142| | 2025-1-23 21:00 | 只看该作者
IAP程序或APP程序本身可能存在错误或已损坏,导致无法正确执行或跳转。

使用特权

评论回复
10
flycamelaaa| | 2025-1-23 22:00 | 只看该作者
在跳转到APP程序前,使用__disable_irq()函数关闭全局中断。在APP程序的中断向量表地址设置完成后,使用__enable_irq()函数重新开启中断。

使用特权

评论回复
11
powerantone| | 2025-1-23 23:00 | 只看该作者
在跳转到APP程序前,检查栈顶地址是否合法。可以通过读取APP程序的起始地址并检查其是否符合预期的栈顶地址格式来实现。

使用特权

评论回复
12
Amazingxixixi| | 2025-1-24 13:03 | 只看该作者
学习一下,提升技能,新年快乐

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

10

帖子

0

粉丝