系统启动时如何执行第一条指令

时间:2014-07-10 03:18:52

标签: embedded ram boot bios rom

我非常好奇董事会的启动方式, 如何在电路板上电时如何执行第一条指令外设的初始化...提前感谢 当系统在嵌入式系统中上电时,如何将ROM的第一个指令地址加载到PC(程序计数器)

2 个答案:

答案 0 :(得分:2)

我的经验是AVR,因此您的里程可能会有所不同。

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

这些地址只相隔几个字节,只留下足够的空间用于跳转指令到闪存中的其他地方。地址0也是复位中断的向量。也就是说,它是处理器在按下重置时跳转到的位置。

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

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

PC上没有BIOS。外围设备不会自动初始化。您必须在自己的代码中为要使用的每个外围设备执行此操作。

答案 1 :(得分:1)

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

关于你的问题,断电和正常执行之间的区别在于,在上电复位后,处理器的状态被置于特定状态,之后处理器的状态需要做一段时间使用已执行到该点的代码。

外围逻辑以相同的方式工作,但不一定(必然)有一个运行代码的处理器,尽管有些外设可以。然后,最终运行时的启动代码和/或操作系统会熄灭并初始化外围设备。