嵌入式系统 - 术语
程序计数器
程序计数器是一个 16 位或 32 位寄存器,其中包含下一条要执行的指令的地址。每次获取指令时,PC 都会自动递增到下一个连续的内存位置。分支、跳转和中断操作将下一个顺序位置以外的地址加载到程序计数器中。
激活上电复位将导致寄存器中的所有值丢失。这意味着 PC(程序计数器)的值在复位时为 0,迫使 CPU 从 ROM 存储位置 0000 获取第一个操作码。这意味着我们必须将上行代码的第一个字节放在 ROM 位置 0000,因为那是CPU期望找到第一条指令
重置向量
复位向量的重要性在于它将处理器指向包含固件第一条指令的内存地址。如果没有复位向量,处理器将不知道从哪里开始执行。复位后,处理器将预定义内存位置的复位向量值加载到程序计数器 (PC)。在 CPU08 架构上,它位于 $FFFE:$FFFF 位置。
当不需要重置向量时,开发人员通常认为这是理所当然的,并且不会将其编程到最终图像中。因此,处理器不会在最终产品上启动。这是调试阶段发生的常见错误。
堆栈指针
堆栈在 RAM 中实现,CPU 寄存器用于访问它,称为 SP(堆栈指针)寄存器。SP 寄存器是一个 8 位寄存器,可寻址范围为 00h 至 FFh 的存储器地址。最初,SP 寄存器包含值 07,指向位置 08,作为 8051 用于堆栈的第一个位置。
当CPU寄存器的内容存储在堆栈中时,称为PUSH操作。当堆栈的内容存储到CPU寄存器中时,称为POP操作。换句话说,寄存器被压入堆栈以保存它,并从堆栈中弹出以检索它。
无限循环
无限循环或无限循环可以被识别为计算机程序中在循环中无限执行的指令序列,原因如下 -
- 没有终止条件的循环。
- 具有永远无法满足的终止条件的循环。
- 具有导致循环重新开始的终止条件的循环。
这种无限循环通常会导致较旧的操作系统变得无响应,因为无限循环会消耗所有可用的处理器时间。等待用户输入的 I/O 操作也称为“无限循环”。计算机“冻结”的一个可能原因是无限循环。其他原因包括死锁和访问冲突。
与 PC 不同,嵌入式系统永远不会“退出”应用程序。它们通过无限循环闲置,等待以中断或预调度任务的形式发生的事件。为了节省电量,某些处理器会进入特殊的睡眠或等待模式,而不是通过无限循环闲置,但它们会根据计时器或外部中断退出此模式。
中断
中断主要是指示程序发生事件的硬件机制。它们可能随时发生,因此与程序流异步。它们需要处理器进行特殊处理,并最终由相应的中断服务例程(ISR)处理。需要快速处理中断。如果您花费太多时间来服务中断,那么您可能会错过另一个中断。
小端与大端
尽管数字总是以相同的方式显示,但它们在内存中的存储方式并不相同。Big-Endian 机器将数据的最高有效字节存储在最低内存地址中。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