[开发资料] FLASH中的代码是如何得到运行的呢?比如PC指针是在哪里由谁设置的?

[复制链接]
880|5
 楼主| LOVEEVER 发表于 2024-9-12 12:15 | 显示全部楼层 |阅读模式
以ARM为例:

ARM-cortex-M3/4的单片机(比如STM32 等):该类单片机的代码在nor flash中,cortex内核可以直接运行,不需要将代码加载到ram中运行。

ARM-cortex-A系列的SOC(比如Exynos4412):该类SOC更加复杂,通常有内存管理单元(MMU),代码存储在nand flash中,程序运行时,需要先将代码加载到ram中运行,该类SOC的启动环节包含了加载程序。就像Windows操作系统存储在硬盘中,开机的时候,操作系统的代码会加载到内存条(RAM)中。

PC指针:无论什么单片机或者SOC,都有一个PC寄存器,这个寄存器保存了下一条待取指令的地址。正常情况下自动加“4”,遇到分支跳转的时候,由跳转指令设置值。那么指针是什么?指针是一个变量的地址,在含有操作系统(比如Linux、Windows)即硬件层面含有内存管理单元(MMU)的情况下,指针是虚拟地址,不含操作系统的情况下,是物理地址,虚拟地址和物理地址经过MMU转换。

jf101 发表于 2024-9-17 21:14 | 显示全部楼层
无论什么单片机或者SOC,都有一个PC寄存器,这个寄存器保存了下一条待取指令的地址
中国龙芯CDX 发表于 2024-9-18 13:37 | 显示全部楼层
指针是虚拟地址,不含操作系统的情况下,是物理地址
星辰大海不退缩 发表于 2024-9-20 15:44 | 显示全部楼层
指针是虚拟地址,不含操作系统的情况下,是物理地址,虚拟地址和物理地址经过MMU转换
szt1993 发表于 2024-9-23 16:23 | 显示全部楼层
指针其实就是地址的指向过程
小夏天的大西瓜 发表于 2024-9-26 19:23 | 显示全部楼层
PC指针寄存器保存了下一条待取指令的地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

2689

帖子

7

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