[STM32F2] 程序跳转问题

[复制链接]
1720|11
 楼主| ge_yuer 发表于 2016-6-17 14:33 | 显示全部楼层 |阅读模式
我做的程序,0x08000000起始为BOOT区域,0x08008000区域为应用1,0x08020000区域为应用2,BOOT跳转到应用1正常,BOOT跳转到应用2也正常,应用1跳转到应用2不正常。跳转指令一样,麻烦帮忙看下是怎么回事啊?有做过的吗?谢谢了
zchong 发表于 2016-6-17 14:36 | 显示全部楼层
栈设置的对否?
中断有关的东西仔细看看
 楼主| ge_yuer 发表于 2016-6-17 16:54 | 显示全部楼层
zchong 发表于 2016-6-17 14:36
栈设置的对否?
中断有关的东西仔细看看

跳转指令一样,除了需要关中断还需要别的什么操作吗?
link8001 发表于 2016-6-17 17:12 | 显示全部楼层
重映射中断向量表
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); //重新映射中断向量表
deviceplugs 发表于 2016-6-18 09:46 | 显示全部楼层
在你的启动文件里面,你的stack是如何设置的啊
 楼主| ge_yuer 发表于 2016-6-20 10:51 | 显示全部楼层
link8001 发表于 2016-6-17 17:12
重映射中断向量表
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); //重新映射中断向量表 ...

你好,是关闭中断后,需要重映射中断向量表后再做跳转指令吗?
link8001 发表于 2016-6-20 11:11 | 显示全部楼层
应用程序main里
 楼主| ge_yuer 发表于 2016-6-20 11:21 | 显示全部楼层

初始化需要先重映射吗?
xmshao 发表于 2016-6-20 11:32 | 显示全部楼层
注意楼上LINK8001说的 中断矢量表起始地址的定义。
在工程里搜索下 NVIC_SetVectorTable
 楼主| ge_yuer 发表于 2016-6-20 12:40 | 显示全部楼层
xmshao 发表于 2016-6-20 11:32
注意楼上LINK8001说的 中断矢量表起始地址的定义。
在工程里搜索下 NVIC_SetVectorTable ...

如果我在0x08008000区域(应用1)跳转到应用2区域,这个重映射在哪定义呢?其实地址为0x08008000?这个没做过,还不是很理解,麻烦细致一点讲解。
link8001 发表于 2016-6-20 13:25 | 显示全部楼层
应用1 main函数开头加
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); //重新映射中断向量表
跳转到应用2之前加
__set_MSP(*(__IO uint32_t*)0x8020000);
应用2 main函数开头加
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x20000); //重新映射中断向量表
 楼主| ge_yuer 发表于 2016-6-22 09:34 | 显示全部楼层
link8001 发表于 2016-6-20 13:25
应用1 main函数开头加
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); //重新映射中断向量表
跳转到应 ...

你好,按照你的做法应用1能正常工作,应用1也能跳转到应用2,但是应用2不能正常工作。重启指令什么的都无效,麻烦帮我分析下是什么问题。应用2直接在0x08000000位置处时工作正常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

40

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部