- 嵌入式系统基础教程
- 嵌入式系统 - 首页
- 嵌入式系统 - 概述
- 嵌入式系统 - 处理器
- 嵌入式系统 - 架构
- 嵌入式系统 - 工具和外设
- 嵌入式系统 - 8051 微控制器
- 嵌入式系统 - I/O 编程
- 嵌入式系统 - 术语
- 嵌入式系统 - 汇编语言
- 嵌入式系统 - 寄存器
- 嵌入式系统 - 寄存器组/堆栈
- 嵌入式系统 - 指令
- 嵌入式系统 -寻址方式
- 嵌入式系统 - 特殊功能寄存器
- 嵌入式系统 - 定时器/计数器
- 嵌入式系统 - 中断
- 嵌入式系统资源
- 嵌入式系统 - 快速指南
- 嵌入式系统 - 有用资源
- 嵌入式系统 - 讨论
嵌入式系统 - 术语
程序计数器
程序计数器是一个 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