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

请教下,使用 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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版