Embedded Systems 简明教程

Embedded Systems - Terms

Program Counter

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

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

Reset Vector

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

当复位向量不必要时,开发人员通常会认为理所当然,并且不会对其编程以生成最终映像。结果,处理器不会在最终产品上启动。这是在调试阶段发生的常见错误。

Stack Pointer

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

当CPU寄存器的内容存储在堆栈中时,称为PUSH操作。当堆栈的内容存储在CPU寄存器中时,称为POP操作。换句话说,将寄存器推送到堆栈中以保存它,并将其弹出堆栈以检索它。

Infinite Loop

无限循环或无穷循环可以标识为计算机程序中的一系列指令,由于以下原因,它们在循环中无限地执行−

  1. 没有终止条件的循环。

  2. 带有无法满足的终止条件的循环。

  3. 带有终止条件的循环导致循环重新开始。

此类无限循环通常会导致较旧的操作系统无响应,因为无限循环会消耗所有可用的处理器时间。等待用户输入的I/O操作也称为“无限循环”。计算机“冻结”的一个可能是无限循环;其他原因包括 deadlockaccess violations

与PC不同,嵌入式系统从不“退出”应用程序。它们通过无限循环空闲,等待事件以中断的形式发生,或 pre-scheduled task 。为了节省电能,一些处理器进入特殊的 sleepwait modes ,而不是通过无限循环空闲,但它们将在计时器或外部中断时退出此模式。

Interrupts

中断主要是硬件机制,用于指示程序事件已发生。它们可能随时发生,因此与程序流异步。它们需要处理器进行特殊处理,最终由相应的Interrupt Service Routine(ISR)处理。中断需要迅速处理。如果您花太多时间来处理中断,那么您可能会错过另一个中断。

Little Endian Vs Big Endian

尽管数字总是以相同的方式显示,但它们在存储器中不是以相同的方式存储的。大端序机器将数据最重要的字节存储在最低的存储器地址中。大端序机器将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