使用UNIX工具构建可靠的ARM裸机固件

本指南为软件开发者深入嵌入式开发领域提供了清晰的路径。它专注于使用UNIX环境下的开源工具链构建ARM裸机固件,摒弃了Arduino或嵌入式Linux等中间层,直接基于硬件手册和CMSIS接口进行开发,以实现快速启动、资源高效利用和全面的远程调试能力。

如何使用UNIX工具构建可靠的ARM裸机固件

2023年10月10日

对于软件开发人员来说,硬件和固件的世界可能是一次令人兴奋的转变。固件将你的逻辑弹射到物理世界。你不再是处理表单和数据库之间的文本,而是可以驱动电机。你不再是监听API调用,而是可以监听声纳或GPS信号。

这是我刚开始嵌入式开发时希望拥有的指南。它从一开始就培养专业的嵌入式编程习惯。我们将跳过像Arduino这样的初学者生态系统,通过裸机编程来充分利用硬件。

这种底层方法允许你:

  • 根据项目需求从各种芯片中选择。
  • 如果需要,可以使用实时操作系统(RTOS)来代替“超级循环”,以实现更自然的多任务处理。
  • 充分利用硬件资源。没有Arduino,也没有嵌入式Linux。项目几乎可以实现即时启动。
  • 通过使用更小的软件栈来避免中间库中的错误。
  • 能够进行断点和检查变量、寄存器的全远程调试。
  • 在必要时,为安全关键系统实现MISRA合规性。

我们特别针对流行的ARM架构。虽然示例使用的是意法半导体(STMicroelectronics)的硬件,但我们避开了他们的供应商集成开发环境(IDE)和硬件抽象层(HAL)。本指南中的原理适用于任何ARM供应商的芯片。我们将使用Unix环境(如BSD、Linux或macOS)中完全开源的工具,而不是专有的IDE和库。原因如下:

  • 你的项目不会“位腐烂”。一旦构建成功,它将在未来几年内持续构建。
  • 利用成熟的工具集,如POSIX Make、C99、GCC/LLVM和GDB/LLDB。它们要么已经在你的系统上,要么可以通过操作系统包管理器轻松安装。
  • 使用无处不在的CMSIS硬件接口。ARM通过合同约束其硬件供应商为其产品提供CMSIS实现。
  • 让官方手册而非第三方库成为真实性的来源。CMSIS中的寄存器名称与硬件参考手册中的术语相匹配。

使用强大的工具链和库基础,我们将以四种不同的方式构建同一个简单的“闪烁LED”项目。我们将了解CMSIS与标准库crt0系统的启动序列。我们将尝试使用和不使用RTOS来编写程序,并尝试动态与静态内存分配。我们还将看到一个故障处理程序的示例,以及如何进行远程调试。

到本指南结束时,你可以充满信心地开始构建、刷写和调试更复杂的项目。本指南基于产品数据手册和基本原理构建示例,而不是复制现有的演示或代码片段。

下载下面的指南。仅需一个三明治的价格,你就可以快速上手。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计