嵌入式系统 - 术语

程序计数器

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

激活上电复位将导致寄存器中的所有值丢失。这意味着复位时 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) 处理。中断需要快速处理。如果您花费太多时间处理中断,那么您可能会错过另一个中断。

小端序与大端序

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

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

另一方面,Little-Endian 机器将数据的最低有效字节存储在最低内存地址中。Little-Endian 机器将 0x12345678 存储为 −

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