硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1904|回复: 2
收起左侧

[MDK] app跳回到iap的0x08000000时出错了。。。

[复制链接]

335

主题

2040

回帖

3050

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3050
发表于 2020-1-10 19:14:26 | 显示全部楼层 |阅读模式
参考论坛的资料,从iap跳转到app区(0x08010 0000)是正常的。
我在app里面也设定了一个按键触发跳转函数,跳转到0x0800 0000,确是什么反应也没有了? 跳转以后没法在mdk中debug观察了。。。
完全一样的跳转代码,就是那个跳转的基地址变更了一下子。

可能出问题在哪里呢?
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 2020-1-10 20:19:50 | 显示全部楼层
本帖最后由 zbianbiaos 于 2020-1-11 09:31 编辑

复制代码
void DFU_EnterCode(void)
{
  #define FLASH_APP_ADDR    (0x08000000)

  /* 禁用所有中断 */
  __disable_irq(); __disable_fiq();

  /* 清除所有中断请求 */
  for(uint8_t n = 0; n < 8; n++) { NVIC->ICPR[n] = 0xFFFFFFFF; }

  /* 获取用户APP第一行代码PC值并定义该APP入口方法 */
  uint32_t JumpAddress = *(volatile uint32_t*)(FLASH_APP_ADDR + 4);
  typedef int (*pUserApp)(void);
  pUserApp UserApp = (pUserApp)JumpAddress;

  /* 重新设置堆栈地址 */
  __set_MSP(*(volatile uint32_t*) FLASH_APP_ADDR);

  /* 启动APP */
  UserApp();

  #undef FLASH_APP_ADDR
}
Snipaste_2020-01-10_20-14-02.jpg
回复

使用道具 举报

4

主题

26

回帖

38

积分

新手上路

积分
38
发表于 2020-1-10 20:26:57 | 显示全部楼层
程序是从Reset_Handler开始执行,随便编译一个程序打开工程生成的.map文件找到Reset_Hander
地址在0x08000281,类型是Thumb Code

用Segger JFlash打开工程的Hex文件,0x08000004地址处的值保存的才是第一条指令所在的地址

刚好是0x08000281
Thumb Code 地址会在正常地址值上+1

好像有点啰嗦了哈哈哈哈
JFlash.jpg
map文件.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-21 06:31 , Processed in 0.154117 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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