正如 Lundin 所提到的,这个问题有许多不同的答案。您拥有从小型电池供电、内存受限的裸机嵌入式设备到运行 Linux 的更复杂的系统。
首先,成为一名灵活的开发人员非常重要。您需要能够尽快适应变化。您可能需要在短短几周内使用一种您以前从未使用过的语言制作一个概念验证原型,或者开始在遗留项目中工作以非常快速地修复错误。
了解软件架构概念、RTOS、事件驱动系统(嵌入式系统本质上是反应式的)和建模(UML)非常重要。也许是测试驱动开发(TDD)。这些与语言无关,将帮助您从头开始开发良好的固件。
关于语言,我认为 C 在小型和大型系统中都有使用,因此必须具备良好的 C 语言背景。在这里,我不是在谈论新手级别的 c 编程。我说的是了解处理器和编译器在幕后做什么。根据你提到的,你可能具备这些技能。这对于小型系统非常有用,因为 RAM 和 ROM 的每个字节都很重要。了解 MISRA-C 规则将帮助您开发更安全的 C 代码。
可能你需要一些脚本编程来执行自动化测试、数据处理、代码生成工具等。我使用 Python 来完成所有这些,还有一些 linux shell 脚本。
能够设计基于 PC 的应用程序对于创建测试夹具以测试生产线中的嵌入式设备很有用,或者可能是因为嵌入式设备只需要 pc 软件即可工作,例如袖珍 USB 示波器。在这种情况下,我使用 Qt,因为它是跨平台的,但如果您只想在 Windows 中工作,则可以将 Visual Studio 与 C# 一起使用。
对于嵌入式系统,最好有扎实的硬件背景。此外,您需要能够使用示波器、逻辑分析仪、信号发生器等。有时您需要使用软件解决硬件问题。:)
以下是我认为非常有用的一小部分书籍:
- C/C++ 中的实用 UML 状态图。
- UML 蒸馏。
- 制作嵌入式系统。
- 计算机作为组件。
- 嵌入式软件入门。
- 更好的嵌入式系统软件。
我希望它有所帮助。
费尔南多