嵌入式系统 - 术语



程序计数器

程序计数器是一个 16 位或 32 位寄存器,它包含下一个要执行指令的地址。每次取指令时,程序计数器都会自动递增到下一个连续的内存位置。分支、跳转和中断操作会将程序计数器加载到下一个连续位置以外的地址。

激活上电复位将导致寄存器中的所有值丢失。这意味着复位后程序计数器 (PC) 的值为 0,强制 CPU 从 ROM 内存位置 0000 获取第一个操作码。这意味着我们必须将第一个操作码字节放在 ROM 位置 0000,因为那是 CPU 期望找到第一条指令的地方。

复位向量

复位向量的意义在于它指向包含固件第一条指令的内存地址。如果没有复位向量,处理器将不知道从哪里开始执行。复位时,处理器会从预定义的内存位置加载程序计数器 (PC) 与复位向量值。在 CPU08 架构中,此位置位于 $FFFE:$FFFF。

当不需要复位向量时,开发人员通常认为它理所当然,并且不会将其编程到最终镜像中。结果,处理器不会在最终产品上启动。这是调试阶段常犯的一个错误。

堆栈指针

堆栈在 RAM 中实现,并且使用称为 SP(堆栈指针)寄存器的 CPU 寄存器来访问它。SP 寄存器是一个 8 位寄存器,可以寻址范围为 00h 到 FFh 的内存地址。最初,SP 寄存器包含值 07,指向位置 08 作为 8051 使用的第一个堆栈位置。

当 CPU 寄存器的內容存储在堆栈中时,称为 PUSH 操作。当堆栈的內容存储在 CPU 寄存器中时,称为 POP 操作。换句话说,将寄存器压入堆栈以保存它,并从堆栈中弹出它以检索它。

无限循环

无限循环或无休止循环可以识别为计算机程序中的一系列指令,由于以下原因,这些指令会在循环中无休止地执行:

  • 没有终止条件的循环。
  • 终止条件永远无法满足的循环。
  • 终止条件导致循环重新开始的循环。

这种无限循环通常会导致旧的操作系统无响应,因为无限循环会消耗所有可用的处理器时间。等待用户输入的 I/O 操作也称为“无限循环”。计算机“冻结”的一个可能原因是无限循环;其他原因包括**死锁**和**访问冲突**。

与 PC 不同,嵌入式系统永远不会“退出”应用程序。它们通过无限循环空闲,等待以中断或**预定任务**的形式发生的事件。为了节省电力,一些处理器会进入特殊的**睡眠**或**等待模式**,而不是通过无限循环空闲,但它们将在计时器或外部中断后退出此模式。

中断

中断大多是硬件机制,用于指示程序已发生事件。它们可能随时发生,因此与程序流程是异步的。它们需要处理器进行特殊处理,最终由相应的中断服务例程 (ISR) 处理。中断需要快速处理。如果处理中断花费的时间太长,则可能会错过另一个中断。

小端序与大端序

虽然数字始终以相同的方式显示,但它们在内存中的存储方式并不相同。大端序机器将数据的最高有效字节存储在最低内存地址中。大端序机器将 0x12345678 存储为:

ADD+0: 0x12 
ADD+1: 0x34 
ADD+2: 0x56 
ADD+3: 0x78

另一方面,小端序机器将数据的最低有效字节存储在最低内存地址中。小端序机器将 0x12345678 存储为:

ADD+0: 0x78 
ADD+1: 0x56 
ADD+2: 0x34 
ADD+3: 0x12
广告