首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统通电时如何执行第一条指令

系统通电时如何执行第一条指令
EN

Stack Overflow用户
提问于 2014-07-10 11:18:52
回答 2查看 1.2K关注 0票数 0

我很好奇电路板是如何启动的,在电路板上电时第一条指令是如何执行的,外设是如何预先intialized...thanks的,在嵌入式系统中系统上电时,第一条指令地址是如何加载到PC(程序计数器)中的

EN

回答 2

Stack Overflow用户

发布于 2014-07-10 13:43:24

我的经验是使用AVR,所以您的里程可能会有所不同。

通常,程序计数器从0开始,因此第一条指令位于闪存中的第一个位置。这也是矢量表的位置,也就是处理器硬连接到的地址,当各种类型的中断发生时,它会跳转到这里。

这些地址之间只有几个字节的距离,只留下足够的空间让跳转指令转到闪存中的其他地方。地址0也是复位中断的矢量。也就是说,它是按下reset时处理器跳转到的位置。

重置中断向量将跳转到C运行时,这是添加到C程序开头的一小段代码。在跳到代码的main函数之前,它初始化RAM中的全局变量并设置堆栈指针等。

编译器将向量表、C运行时和您的代码放在一起,定制适合您的代码的表和运行时。例如,如果包含一个中断处理程序,则会在矢量表中该类型中断的位置处插入到该中断处理程序的跳转。

没有像在PC上那样的BIOS。外围设备不会自动初始化。你必须在你自己的代码中为你想要使用的每个外设做这件事。

票数 2
EN

Stack Overflow用户

发布于 2014-07-10 11:59:42

对于这样的东西,你可以认为硬件就像软件,只是并行的。在重置之后(实际上是在重置期间),状态机的起始地址和状态等项被初始化为作者想要的值。然后,它在复位后开始计时,并遍历代码,对于简单的情况,可能是获取零状态的地址,然后当获取结束时,该指令被解码并执行,依此类推。

关于你的问题,关机和正常执行之间的区别是,在开机重置之后,处理器的状态被置于特定的状态,在此之后和一段时间后,处理器的状态必须与执行到该点的代码有关。

外围逻辑以同样的方式工作,但并不(一定)有一个运行代码的处理器,尽管有些外围设备有。然后,当引导代码和/或操作系统最终运行时,引导代码和/或操作系统输出并初始化外围设备。

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

https://stackoverflow.com/questions/24666947

复制
相关文章

相似问题

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