打印
[STM32F2]

程序跳转问题

[复制链接]
1404|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); //重新映射中断向量表

使用特权

评论回复
5
deviceplugs| | 2016-6-18 09:46 | 只看该作者
在你的启动文件里面,你的stack是如何设置的啊

使用特权

评论回复
6
ge_yuer|  楼主 | 2016-6-20 10:51 | 只看该作者
link8001 发表于 2016-6-17 17:12
重映射中断向量表
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); //重新映射中断向量表 ...

你好,是关闭中断后,需要重映射中断向量表后再做跳转指令吗?

使用特权

评论回复
7
link8001| | 2016-6-20 11:11 | 只看该作者
应用程序main里

使用特权

评论回复
8
ge_yuer|  楼主 | 2016-6-20 11:21 | 只看该作者

初始化需要先重映射吗?

使用特权

评论回复
9
xmshao| | 2016-6-20 11:32 | 只看该作者
注意楼上LINK8001说的 中断矢量表起始地址的定义。
在工程里搜索下 NVIC_SetVectorTable

使用特权

评论回复
10
ge_yuer|  楼主 | 2016-6-20 12:40 | 只看该作者
xmshao 发表于 2016-6-20 11:32
注意楼上LINK8001说的 中断矢量表起始地址的定义。
在工程里搜索下 NVIC_SetVectorTable ...

如果我在0x08008000区域(应用1)跳转到应用2区域,这个重映射在哪定义呢?其实地址为0x08008000?这个没做过,还不是很理解,麻烦细致一点讲解。

使用特权

评论回复
11
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); //重新映射中断向量表

使用特权

评论回复
12
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

粉丝