你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下,使用 iap 程序跳转 运行失败 ?

[复制链接]
hpdell 提问时间:2017-12-11 12:14 /
你好,我现在貌似可以跳转了,但是跳转 后,用户的 app 程序不能够运行,但是如果使用 jlink 直接下载用户 app 程序到板子里面是可以正常运行的,

iap 程序如下:









#define  USER_FLASH_FIRST_PAGE_ADDRESS   0x08080000

void Jump_To_APP(void)
{
  __set_PRIMASK(1);// 关闭全局中断。注意,在跳转前,必须先关闭全局中断,进入用户程序后,在中断向量表地址设置完成后再开中断。   
    // 通过判断栈顶地址值是否正确来判断是否已经下载用户应用程序。因为用户程序的启动文件开始会初始化栈空间,如果栈顶地址正确,说明用户程序已经下载
//    __ASM("CPSID  I");
   printf("Jump to the new program.\r\n");

    JumpAddress = *(__IO uint32_t*) (USER_FLASH_FIRST_PAGE_ADDRESS + 4);// 前4字节为中断向量表
    Jump_To_Application = (pFunction) JumpAddress;// 指向用户程序复位函数所在的地址

    //设置APP程序堆栈指针
    __set_MSP(*(__IO uint32_t*) USER_FLASH_FIRST_PAGE_ADDRESS);  // 设置用户程序的栈指针,程序貌似在这个地方执行后就没有返回,????
    Jump_To_Application();  // 执行用户程序
}



用户app 设置如下:
用户 app 程序是带 FreeRTOS 的,不过我的 FreeRTOS 系统是在我所以的 外设初始化完成后才启动的










下面这个是 map 文件,程序入口地址貌似也是对的吧 ??
我使用的是 iar






















收藏 评论38 发布时间:2017-12-11 12:14

举报

38个回答
回答时间:2017-12-11 13:51:25
先初始化向量地址,注意一下IAP程序中是否有使用中断。
eagle0754 回答时间:2017-12-11 14:21:18
你IAP占用512KB啊?你用FLASH为1MB的芯片?
你确定你在下载IAP时,没有把APP区也擦了吧?从上面没看出问题。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

yu0405jie 回答时间:2017-12-11 14:24:34
使用 jlink 直接下载用户 app 程序到板子里面是可以正常运行的,断电之后在重新上电也可以正常运行吗?如果是的话就说明你的app程序地址没有设置

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

hpdell 回答时间:2017-12-11 14:27:02
本帖最后由 hpdell 于 2017-12-11 15:04 编辑
eagle0754 发表于 2017-12-11 14:21
你IAP占用512KB啊?你用FLASH为1MB的芯片?
你确定你在下载IAP时,没有把APP区也擦了吧?从上面没看出问题 ...

我的是 2MB的 flash , 现在 iap 大小为300KB 以内的,但是 查看 stm32f777BIT6 的flash 分配,只能是 512KB的空间了,
下载 iap 程序时,app的空间是没有被擦除的,iap的地址范围设置的 0x0800 0000 - 0x0807 ffff

22222222222.png
hpdell 回答时间:2017-12-11 14:31:13
安 发表于 2017-12-11 13:51
先初始化向量地址,注意一下IAP程序中是否有使用中断。

我已经在程序跳转前关闭了所以的中段啊

__set_PRIMASK(1);   关闭所以中断, 不知道这个方法在 iar 编译器里面是否适用啊 ???
回答时间:2017-12-11 14:36:53
我不怎么用IAR,先确定一下所有中断是不是都关闭了。如果单APP没问题,可能是因为一些中断导致的。可以先进行向量的设置。
hpdell 回答时间:2017-12-11 21:41:18
yu0405jie 发表于 2017-12-11 14:24
使用 jlink 直接下载用户 app 程序到板子里面是可以正常运行的,断电之后在重新上电也可以正常运行吗?如果 ...

你好,断电后重新上电,首先会进入到 iap 程序,之后再跳转到 app的,但是跳转 后app 还是不能够运行的
hpdell 回答时间:2017-12-11 21:43:01
安 发表于 2017-12-11 14:36
我不怎么用IAR,先确定一下所有中断是不是都关闭了。如果单APP没问题,可能是因为一些中断导致的。可以先进 ...

我的 app 单独使用 jlink 下载后可以正常运行的,断电后 程序也会进入到 iap 程序段运行,之后再跳转到 app ,但是再跳转到 app 后,app 的程序还是不能够运行,我 的 app 程序使用了 freertos ,跟这个有没有什么关系呀 ?
回答时间:2017-12-12 08:32:36
上电的时候先跑了一段延时,应该先进行向量的配置,再跑延时。
1234下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版