我很好奇电路板是如何启动的,在电路板上电时第一条指令是如何执行的,外设是如何预先intialized...thanks的,在嵌入式系统中系统上电时,第一条指令地址是如何加载到PC(程序计数器)中的
发布于 2014-07-10 13:43:24
我的经验是使用AVR,所以您的里程可能会有所不同。
通常,程序计数器从0开始,因此第一条指令位于闪存中的第一个位置。这也是矢量表的位置,也就是处理器硬连接到的地址,当各种类型的中断发生时,它会跳转到这里。
这些地址之间只有几个字节的距离,只留下足够的空间让跳转指令转到闪存中的其他地方。地址0也是复位中断的矢量。也就是说,它是按下reset时处理器跳转到的位置。
重置中断向量将跳转到C运行时,这是添加到C程序开头的一小段代码。在跳到代码的main函数之前,它初始化RAM中的全局变量并设置堆栈指针等。
编译器将向量表、C运行时和您的代码放在一起,定制适合您的代码的表和运行时。例如,如果包含一个中断处理程序,则会在矢量表中该类型中断的位置处插入到该中断处理程序的跳转。
没有像在PC上那样的BIOS。外围设备不会自动初始化。你必须在你自己的代码中为你想要使用的每个外设做这件事。
发布于 2014-07-10 11:59:42
对于这样的东西,你可以认为硬件就像软件,只是并行的。在重置之后(实际上是在重置期间),状态机的起始地址和状态等项被初始化为作者想要的值。然后,它在复位后开始计时,并遍历代码,对于简单的情况,可能是获取零状态的地址,然后当获取结束时,该指令被解码并执行,依此类推。
关于你的问题,关机和正常执行之间的区别是,在开机重置之后,处理器的状态被置于特定的状态,在此之后和一段时间后,处理器的状态必须与执行到该点的代码有关。
外围逻辑以同样的方式工作,但并不(一定)有一个运行代码的处理器,尽管有些外围设备有。然后,当引导代码和/或操作系统最终运行时,引导代码和/或操作系统输出并初始化外围设备。
https://stackoverflow.com/questions/24666947
复制相似问题