首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Cortex-M3向量表放置的问题

关于Cortex-M3向量表放置的问题
EN

Stack Overflow用户
提问于 2020-10-09 06:52:56
回答 1查看 551关注 0票数 0

我正试图理解Cortex-M3处理器向量表的位置。

根据Cortex-M3拱形参考手册,重置行为如下(省略了一些部分):

因此,我们可以看到vectortable来自于VTOR (向量表偏移量寄存器)。

根据Cortex-M3技术参考手册,VTOR被定义为:

所以我们可以看到,它有一个重置值 of 0x0。因此,基于上述两个标准,Cortex-M3处理器在重置后,期望在代码区域的绝对地址0x0处有一个向量表。

但是在我的MDK uVision IDE中,我看到我的应用程序被放置在IROM1区域,它从0x8000000开始,根据Cortex-M3内存映射,它位于0.5G Code内存区域内。

因为它检查了Starup按钮,所以我猜这意味着IROM1区域应该包含向量表(如果我对的看法有误,请纠正我)。

因此,我认为向量表应该位于IROM1区域的开头,即0x8000000。事实确实如此。下面的图片显示,在IROM1的开头,它是向量表的第一个条目,SP值。

更奇怪的是,VTOR寄存器(在0xE000ED08)仍然保存一个0x0值:

那么,如何使用0x0 VTOR重置值找到我的向量表?

出于好奇,我在0x0检查了内存内容,其中包含了与IROM1完全相同的向量表内容。,那么是谁做了这件神奇的复制品??

添加1- 4:39 2020年10月9日下午39

我想在下面的图片中肯定有一些关于startup复选框我不知道的东西。

添加2- 5:09下午10/9/2020

感谢@RealtimeRik和@domen。我下载了STM32F103x8_xB(https://www.st.com/resource/en/datasheet/stm32f103c8.pdf)的数据表。在第4节内存映射中,我看到了下图:

因此,看起来[0x0,0x8000000]范围确实被别名到了其他地方。但我还没找到如何确定它的别名..。

添加3- 5:39 2020年10月9日下午39

现在我找到了!

我下载了STM32Fxxx fef手册 (顺便说一下,它真的很大)。

在3.4Boot配置中,它指定了通过BOOT[1:0]引脚配置的引导模式。

对于不同的引导模式,使用不同的地址混叠:

根据所选的引导模式,可以按以下方式访问主Flash内存、系统内存或SRAM:

  • 从主Flash内存启动:主Flash内存在引导内存空间(0x0000 0000)中别名化,但仍然可以从原始内存空间(0x8000000)访问。换句话说,可以从地址0x0000或0x8000000开始访问Flash内存内容。
  • 从系统内存启动:系统内存在引导内存空间(0x0000 0000)中别名化,但仍然可以从其原始内存空间(连接线设备中的0x1FFF B000、其他设备中的0x1FFF F000 )访问。
  • 从嵌入式SRAM启动:SRAM只能在0x2000 0000地址上访问。

我看到的是从主闪存启动。

最后,我可以解释为什么选择0x800 0000 .

添加4- 3:19下午10/15/2020

在地址0处的中断向量表的位置/期望类似于实模式下的IA32处理器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-09 08:04:05

没有“魔法副本”。0x00000000被别名为0x08000000。

实际内存位于0x08000000,但也可以访问0x00000000。

如果您查看处理器特定的参考手册,您应该可以在内存映射部分找到这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64275252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档