工具
处理微控制器涉及使用多种不同的工具,因为我们将处理与您的笔记本电脑不同的架构,并且我们必须在远程设备上运行和调试程序。
我们将使用下面列出的所有工具。任何最新版本在没有指定最低版本的情况下都应该可以工作,但我们列出了我们测试过的版本。
- Rust 1.31、1.31-beta 或更新的工具链 PLUS ARM Cortex-M 编译支持。
cargo-binutils
~0.1.4qemu-system-arm
。测试版本:3.0.0- OpenOCD >=0.8。测试版本:v0.9.0 和 v0.10.0
- 具有 ARM 支持的 GDB。强烈建议使用 7.12 或更高版本。测试版本:7.10、7.11、7.12 和 8.1
cargo-generate
或git
。这些工具是可选的,但将使您更容易遵循本书。
以下文本解释了我们为什么要使用这些工具。安装说明可以在下一页找到。
cargo-generate
或 git
裸机程序是非标准 (no_std
) Rust 程序,需要对链接过程进行一些调整才能使程序的内存布局正确。这需要一些额外的文件(如链接器脚本)和设置(如链接器标志)。我们已经为您打包了这些文件,因此您只需要填写缺少的信息(例如项目名称和目标硬件的特性)。
我们的模板与 cargo-generate
兼容:一个 Cargo 子命令,用于从模板创建新的 Cargo 项目。您也可以使用 git
、curl
、wget
或您的 Web 浏览器下载模板。
cargo-binutils
cargo-binutils
是一个 Cargo 子命令集合,它使您能够轻松使用 Rust 工具链附带的 LLVM 工具。这些工具包括 LLVM 版本的 objdump
、nm
和 size
,用于检查二进制文件。
与 GNU binutils 相比,使用这些工具的优势在于 (a) 安装 LLVM 工具与您的操作系统无关,只需一个命令(rustup component add llvm-tools-preview
),以及 (b) objdump
等工具支持 rustc
支持的所有架构 - 从 ARM 到 x86_64 - 因为它们都共享相同的 LLVM 后端。
qemu-system-arm
QEMU 是一个模拟器。在这种情况下,我们使用可以完全模拟 ARM 系统的变体。我们使用 QEMU 在主机上运行嵌入式程序。感谢这一点,即使您没有硬件,您也可以遵循本书的某些部分!
GDB
调试器是嵌入式开发中非常重要的组成部分,因为您可能并不总是能够将日志信息记录到主机控制台。在某些情况下,您甚至可能没有 LED 在您的硬件上闪烁!
总的来说,LLDB 在调试方面与 GDB 一样好,但我们还没有找到 LLDB 中与 GDB 的 load
命令等效的命令,该命令将程序上传到目标硬件,因此目前我们建议您使用 GDB。
OpenOCD
GDB 无法直接与 STM32F3DISCOVERY 开发板上的 ST-Link 调试硬件通信。它需要一个翻译器,而 Open On-Chip Debugger,OpenOCD,就是那个翻译器。OpenOCD 是一个在您的笔记本电脑/PC 上运行的程序,它在 GDB 的基于 TCP/IP 的远程调试协议和 ST-Link 的基于 USB 的协议之间进行翻译。
OpenOCD 还作为其翻译的一部分执行其他重要工作,用于调试 STM32F3DISCOVERY 开发板上的基于 ARM Cortex-M 的微控制器
- 它知道如何与 ARM CoreSight 调试外设使用的内存映射寄存器进行交互。正是这些 CoreSight 寄存器允许
- 断点/观察点操作
- 读取和写入 CPU 寄存器
- 检测 CPU 何时因调试事件而停止
- 在遇到调试事件后继续 CPU 执行
- 等等。
- 它还知道如何擦除和写入微控制器的 FLASH