返回信息流每个CPU在上电启动的时候,所去执行的第一条指令的地址是固定的吗?
如果这个地址是固定的,那是不是说,一个板子的bootloader存放的起始位置必须是该地址?而这个地址必须留给某非易失性存储器比如flash?
如果这个地址不固定,那是由什么控制的呢?
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #5841同步于 2009/9/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
CPU启动时执行第一条指令的地址是怎么定的??
s122008
2009/9/17镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这个是cpu硬件控制的,大多是可以配置的,比如dm6446这个cpu就可以配置成为从内部
rom或者是外部的nor启动,其实具体的地址的值也就是个约定而已,肯定是那个启动设
备的首地址就可以了。是不是全部都约定俗成设为0,这个还不太清楚
另外,地址空间在做cpu的时候早就订好了,根本不用你操心
【 在 s122008 (NCE) 的大作中提到: 】
: 每个CPU在上电启动的时候,所去执行的第一条指令的地址是固定的吗?
: 如果这个地址是固定的,那是不是说,一个板子的bootloader存放的起始位置必须是该地址?而这个地址必须留给某非易失性存储器比如flash?
: 如果这个地址不固定,那是由什么控制的呢?
: ...................
哦,谢谢指点啊
【 在 ArmStrong 的大作中提到: 】
: 这个是cpu硬件控制的,大多是可以配置的,比如dm6446这个cpu就可以配置成为从内部
: rom或者是外部的nor启动,其实具体的地址的值也就是个约定而已,肯定是那个启动设
: 备的首地址就可以了。是不是全部都约定俗成设为0,这个还不太清楚
: ...................
【 在 ArmStrong 的大作中提到: 】
: 这个是cpu硬件控制的,大多是可以配置的,比如dm6446这个cpu就可以配置成为从内部
: rom或者是外部的nor启动,其实具体的地址的值也就是个约定而已,肯定是那个启动设
: 备的首地址就可以了。是不是全部都约定俗成设为0,这个还不太清楚
: ...................
补充一点,有的时候地址划分是可变的
比如我们实验室用的那个板子,CPU片选管脚不足,需要CPLD配合输出片选给众多外部设备,这时候就可以通过改变CPLD程序调整地址划分
昂,扩展存储?你们要用多少存储啊,咋片选还不足呢
【 在 hobby (hobby) 的大作中提到: 】
: 补充一点,有的时候地址划分是可变的
: 比如我们实验室用的那个板子,CPU片选管脚不足,需要CPLD配合输出片选给众多外部设备,这时候就可以通过改变CPLD程序调整地址划分
启动后运行的第一句代码就是bootloader啊,你说的是kernel或者是app吧
【 在 falcom (缘随风起) 的大作中提到: 】
: 固定的,初始化最基本的东西后,最后一条是个跳转指令,跳到bootloader的program处
【 在 s122008 的大作中提到: 】
: 每个CPU在上电启动的时候,所去执行的第一条指令的地址是固定的吗?
: 如果这个地址是固定的,那是不是说,一个板子的bootloader存放的起始位置必须是该地址?而这个地址必须留给某非易失性存储器比如flash?
: 如果这个地址不固定,那是由什么控制的呢?
这个问题取决于何种类型的CPU
1、启动方式
有些CPU有多种启动方式,不同启动方式的启动设备是不一样的
典型的有片内ROM启动,片外flash启动(又分为并口/SPI等不同的接口形式),片外EEPROM启动甚至是RAM启动
如AT91RM9200就有片内ROM启动和片外并口flash启动
TI F2812就有并口flash启动和IIC EEPROM启动
TI C6416只有RAM启动,需要主控CPU将程序下载到RAM中,再触发复位
TI C6488启动方式更是多达五六种 每种都有不同的适用场合 可见多么强大
PPC440启动方式更是多达8种
那么这么多种复杂的启动方式是如何选择的呢
通常都是通过硬件管脚控制的 可以设置跳线选择不同的启动方式
CPU上电时会对这些管脚进行采样 选择相应的启动方式
但是大部分CPU通常都只有一种启动方式 即从并口flash启动
2、启动地址
选择了某种启动方式后,启动地址通常都是固定的
ARM系统无论从何种设备启动都是从0地址开始运行的
PowerPC通常是0x100或者0xFFF00100,如Freescale MPC82xx系列
为什么有两种呢?默认是从0xFFF00100启动,但是里面有程序后,可配置为从0x100启动
也有从0xFFFFFFFC启动的,如E500及IBM的PPC405GP和440,只有4个字节,通常这里是一个跳转指令
MIPS也有从0x1fc0 0000启动的
至于DSP,那就更复杂了
总体来说,嵌入式CPU为了使用特定场合的应用 启动设备繁多
但是ARM的启动方式和启动地址是最简单的了
DSP最复杂 PowerPC有单一的也有多种启动方式的