gpt4 book ai didi

arm - 为什么需要内存别名?

转载 作者:行者123 更新时间:2023-12-03 23:59:24 24 4
gpt4 key购买 nike

我对 ST Microelectronics 的这种架构设计感到困惑。以 STM32F407VG 为例。程序在地址 0x08000000 处加载到闪存中。该地址映射到地址 0x00000000,因为复位后处理器首先查看 0x00000000。为什么不将闪存的首地址设为 0x00000000。内存别名有什么好处?

enter image description here

最佳答案

处理器内核正在查看地址 0x00000000 的堆栈指针,以及 0x00000004 的复位向量(以及通过其他向量)。因此,从核心的角度来看,您希望应用程序能够回答。但是这些产品除了你以后添加的应用程序之外,还包含一个工厂编程的引导加载程序,那么如何用一个地址引导两个程序呢?一种方法是将它们镜像到该地址中。如果您还想添加让处理器从 sram 启动的功能,您也需要将其映射进去。

因此,并非所有芯片都以这种方式通过基于带引脚或非 volatile 寄存器位等的镜像来解决问题。

STM32 部件只会在 0x00000000 处映射一个百分比,因此您真的想为 0x08000000 构建应用程序(或其他地址,例如 0x02000000 的一小部分部件,请阅读文档!)。例如,向量表如下所示:

0x20001000
0x08000031
...

处理器内核读取 0x00000004 得到值 0x08000031,这意味着开始在地址 0x08000030 处为复位处理程序执行指令。从那里程序用完 0x08000000 地址空间而不是 0x00000000。

不是每个人都这样做,但有些人这样做,不仅限于 ST (STM32)。

并非每个人都有在芯片上编程的引导加载程序,其中一些没有理由复用该地址空间并且不会。

关于arm - 为什么需要内存别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63948748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com