如何成为嵌入式软件开发人员?

电器工程 嵌入式
2022-01-23 03:21:27

我想为那些想成为优秀的嵌入式软件开发人员或想在这方面改进的人提供一些提示。

我需要了解硬件、软件方面的哪些知识?

哪些书最值得推荐?博客?

最后,我怎么能从一个新手爱好者变成一个优秀的专业人士?

4个回答

到目前为止,所有答案都很好,但我会投入两分钱。

这里重复一些技巧和一些额外的技巧:

  • 学习 C:仍然是可移植的硬件的基本语言(在某种程度上)。不要只是学习它,而是要成为它所有特性的专家,比如 volatile 以及为什么它对于编写设备驱动程序很重要。
  • 从像 Arduino 这样的优秀开发套件开始,但如前所述,一旦您对它有良好的感觉,就可以学习其他架构。幸运的是,有一些与其他处理器构建的 Arduino 兼容板,这样您就可以在不同的 uC 上重写相同的设计,而不会弄乱您的整个设计,同时获得新的感觉。
  • 在学习阶段,请随意重新发明设备驱动程序或其他代码片段。不要只是将其他人的驱动程序代码放在那里。学习时重新发明轮子是有价值的。
  • 挑战自己,在速度和内存使用方面更有效地重写代码。
  • 熟悉不同风格的嵌入式系统软件架构。从基本的中断驱动/后台循环处理开始,然后向上移动到后台调度程序,然后是实时操作系统。
  • 获得良好的源代码控制!我自己更喜欢Mercurial
  • 甚至注册一些免费的源代码管理托管网站,例如Sourceforge.netBitbucket.org来托管您的项目,即使您是唯一一个在做项目的人。他们会备份您的代码,因此您不必担心偶尔的硬盘崩溃会破坏一切!使用分布式 VCS 会派上用场,因为您可以签入对硬盘驱动器的更改,然后在准备好后上传到主机站点。
  • 为您正在处理的任何芯片学习您的工具!了解编译器如何创建程序集至关重要。您需要了解代码的效率,因为您可能需要在汇编中重写。知道如何使用链接器文件和解释内存映射输出也是必不可少的!你怎么知道你刚刚写的那个例程是不是占用太多 ROM/Flash 的罪魁祸首!
  • 学习新技术并在您的设计中进行试验!
  • 调试时什么都不做。验证它!
  • 学习如何进行防御性编程以捕获错误并验证假设(例如使用断言)
  • 在您的代码中构建调试信息,例如输出内存消耗或使用计时器分析代码或使用 uC 上的备用引脚来切换和测量 O-scope 上的中断延迟。

这里有一些书:

以下是一些网站:

  • 嵌入式大师
  • Ganssle 集团Jack Ganssle 有一些精彩的历史故事要讲。阅读文章。不过,他对某些事情有点说教。
  • Embedded.com来自 Ganssle、Barr 和其他行业专家的最新技术和技巧的好信息。
  • 记住,“没有灵丹妙药”,不要陷入相信只有一种工具、方法、语言或系统可以解决所有问题的陷阱
  • 成为 C 专家
    • 学会在没有 malloc() 和 POSIX 的情况下过日子
  • 不要拘泥于一种架构,很容易成为 PIC 或 AVR 或 ARM 的粉丝
  • 构建东西,调试它,让它工作。熟能生巧
  • 学习至少一种源代码控制系统(SVN/git/etc)并使用它
  • 随时准备测试您的假设。错误通常存在于您假设的工作中
  • 不要过于依赖调试器,它们在每个系统上都是不同的,并且具有不同的可靠性
  • 节俭地思考。解决问题时,考虑代码占用、RAM 占用和硬件成本

对于书籍,我建议挖掘历史。今天的大多数嵌入式软件技术都来自过去的前沿技术。

像任何事情一样,每天练习。

其他答案很好,但业余爱好者和专业人士之间最大的区别应该是对质量的心态。所以让你的项目一路走下去,当你完成一个项目的 80% 时不要停下来。一路走来,证明它正在工作,并正确记录它。

确保您的代码可读且可维护。

不要忘记也有一些乐趣:)

除了显而易见的,比如学习 C 并从一些开发板开始,您还需要学习阅读微控制器数据表
制造商向微控制器添加越来越多的功能,因此变得越来越复杂。数据表不仅提供了电气特性(这对电子工程师来说比软件开发人员更感兴趣),还提供了寄存器、内存映射等的详细描述。
第一次阅读数据表时可能看起来令人生畏,但无法理解它们在调试阶段可能会导致更严重的头痛。