当我们打开嵌入式电路板时会发生什么?

时间:2010-09-18 14:05:39

标签: embedded startup

现在, 经过与dwelch的讨论,经过一番长时间的讨论后,我的疑问已经改变到了确切的地步。

“如果您想知道处理器如何准备好执行第一条指令。它的逻辑设计方式是”逻辑设计如何?你能给我更多的想法吗?有没有文件给我更多细节?所有架构背后的算法都是一样的吗?

5 个答案:

答案 0 :(得分:4)

答案 1 :(得分:2)

  

“如果你想知道处理器如何   准备执行第一个   指令。它的逻辑方式   设计“ - 逻辑是如何设计的?   你能给我更多的想法吗?是   有任何文件给我更多   细节?算法背后的全部   架构是一样的吗?

从概念上讲,程序计数器(PC)可以被认为具有与执行周期相关的增量逻辑。它可以被认为是在每个指令周期结束时执行的以下逻辑。

if (RESET)         //reset pin input is asserted
    PC = 0x0000;   // or any other predetermined value
else
    PC = PC + length(currentInstruction);

为了便于理解,考虑在每个时钟周期执行1条指令的处理器。另外要考虑所有的大小都是相同的(4个字节)。

然后逻辑变得更简单

if (RESET)
    PC = 0x0000;
else
    PC = PC + 4;

现在这个逻辑决定非常简单,可以实现为使用门的数字逻辑电路,它具有输入 - RESET,PC和输出 - PC,并由处理器时钟提供时钟。 只要RESET信号有效,就可能有其他逻辑禁止执行流水线和获取电路。

当RESET被置位时,PC加载了重启地址。

现在,断言和释放RESET信号的责任在于复位电路,复位电路只有在收到POWERGOOD信号和/或CLOCKSTABLE信号后才可以选择这样做。

时钟发生器在时钟信号稳定并可用后输出CLOCKSTABLE。

电压稳定后,POWERGOOD信号由电源电路断言。

所有这些信号可能不会出现或在特定平台中使用。 RESET信号通常在所有处理器上找到。

释放RESET信号后,执行管道启用并执行 执行逻辑从该地址启动FETCH。

关于数字逻辑设计的书籍通常会有这种信息。以及一些示例来说明如何设计ALU。 每个架构背后的PC递增算法将是类似的(在概念上),但必须考虑到处理器设计的特殊性。

如果处理器支持两个不同的重启地址,具体取决于跳线设置,通常可以通过在处理器上连接一个可以将其拉至逻辑1或0的跳线来实现。

现在PC增量逻辑变为,

if (RESET)
    if(RESETADDRESSJUMPER)
         PC = 0x0000;
    else
         PC = 0xfff0;
else
    PC = PC + 4;

类似地,可以定义任何复杂的逻辑来重置处理器体系结构所需的处理器。

答案 2 :(得分:1)

无法判断系统(即CPU)将如何启动,因为它可以是特定于实现的,并且在CPU之间有所不同。但它通常看起来像这样:

系统上电后,CPU使用中断向量表跳转到复位代码。 CPU需要知道中断向量的位置,因此它的位置通常是固定的(尽管有CPU可以更改它)。假设您使用的嵌入式CPU的代码位于内部闪存中,这通常意味着复位向量代码是一个简单的跳转指令,指向实际的启动代码。如果您的应用程序是用汇编语言编写的,那么这可能就是您的应用程序本身就已经完成了。

如果您的应用程序使用更高级别的语言(如c)编写,则必须设置c环境。也就是说,需要设置各种内存段:.bss需要归零,.data需要使用变量数据初始化,甚至可能更多。系统很可能还需要进行一些硬件设置,尤其是时钟。这部分启动通常用汇编语言编写(通常是“crt0.S”,至少部分启动也是在PC上启动c应用程序所必需的)。之后,设置了c环境,主应用程序可以通过调用main函数启动。但是,在独立环境中(嵌入式系统通常是这样,除非您在其上运行嵌入式Linux或类似的东西),托管环境存在一些重要差异。这里最重要的一点是,独立环境不需要具有函数main,也不需要具有通常的原型int main(int argc, char* argv[])。它在系统中的确切外观是特定于实现的,但主程序void main(void)的入口函数很常见。

答案 3 :(得分:0)

这取决于电路板上的CPU - 以及存储器中的内容(ROM或EPROM的一种变体)。

一种情况是处理器在地址0执行代码 - 因此硬件必须确保有一些有效的代码供处理器在该地址执行,例如JMP os_start跳转到开始操作系统真实代码。

另一种情况是处理器将启动视为发生特定中断,并在众所周知的非零地址处查找中断处理程序。同样,硬件必须确保有一些有效的代码供处理器在该地址执行。

在这两种情况下,跳转到的代码通常都是一个启动式加载器 - 一个非常小的程序,可以复制一些关键数据,或者设置一些关键值,然后加载一个更大的程序来完成更多工作。

答案 4 :(得分:0)

一旦复位释放,大多数CPU将从复位向量(0x0,0x100,0x80000000,0xfffff100,0xfffffffc)开始。取决于CPu,但通常首先是启动和运行内存(MMU,SDRAM,ECC和总线控制器)。然后你可以做一些额外的硬件设置,如时钟,电源管理,看门狗或其他什么,但是一旦你点击你的操作系统或主应用程序,大部分都可以完成。现在,您将从运行时设置开始,将程序从Flash复制到RAM。您应该准备好运行您的应用程序。在较小的平台上,您只需要在开始之前复制初始化数据。