我正试图理解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:
我看到的是从主闪存启动。
最后,我可以解释为什么选择0x800 0000 .
添加4- 3:19下午10/15/2020
在地址0处的中断向量表的位置/期望类似于实模式下的IA32处理器。
发布于 2020-10-09 08:04:05
没有“魔法副本”。0x00000000被别名为0x08000000。
实际内存位于0x08000000,但也可以访问0x00000000。
如果您查看处理器特定的参考手册,您应该可以在内存映射部分找到这一点。
https://stackoverflow.com/questions/64275252
复制相似问题