15

我想列出对我的职业生涯有价值的需要学习的东西。您认为现在和遥远的未来对于嵌入式开发人员来说哪些技能至关重要?

通过使用嵌入式 Linux 内核,我已经非常精通 C 和 ARM 汇编程序,并且我即将深入研究 Linux 驱动程序。但是我不禁想到我可能正在缩小我的技能范围。我想在未来继续使用嵌入式系统,但你永远不知道就业市场(偏执我将被外包到中国和印度)。

感觉自己目前对C++和Java比较薄弱,以后也想学Android内核。我也不知道任何脚本语言。

任何使用过嵌入式系统一段时间的人都可以就他们认为对嵌入式开发人员至关重要的技能/语言提供一些意见吗?我应该继续只磨练我的 C 技能还是应该学习新事物。

4

3 回答 3

35

这是我的清单:

  • C要领
  • OOP/ C++ - 类、封装、多态、重载/覆盖、模板
  • 算法 - 搜索、排序、b 树
  • 设计模式——工厂、观察者、单例等。
  • 实时操作系统——原语(信号量、互斥量)、调度技术、用户/内核空间
  • Linux基础、驱动编写、shell
  • 微处理器基础——中断处理、寄存器、汇编代码等。
  • 微控制器基础 - ADC、DAC、定时器、PWM、DMA、看门狗等。
  • 内存 - NOR、NAND、SRAM、DRAM、磨损均衡
  • 基本协议 - I2C、SPI、UART、LIN
  • 高级协议 - SATA、PCIE、USB、CAN、MOST
  • 并发/并行编程 - SMP 等的 MPI
  • UML——类图、组件图、状态图、序列图
  • 用于脚本的 Perl 或 Python,例如修改简单的文本文件。
  • Java 和安卓
  • 基本电子 - 原理图阅读,使用示波器、万用表、烙铁
  • 嵌入式编程的专业技术,例如开关的去抖动、电阻梯形开关、旋转编码器等。
  • 软件工程 - SDLC、CMMI、敏捷方法,例如 SCRUM、版本控制(ClearCase、git、svn)、错误跟踪(JIRA?)、静态代码检查、Lint、单元测试、持续集成
  • 构建环境 - makefile、cmake
  • 基础FPGA/ASIC设计,基础DSP
于 2013-06-20T20:45:38.803 回答
7

正如 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 蒸馏。
  • 制作嵌入式系统。
  • 计算机作为组件。
  • 嵌入式软件入门。
  • 更好的嵌入式系统软件。

我希望它有所帮助。

费尔南多

于 2013-06-20T20:15:52.857 回答
2

无论您想选择什么领域,您不仅应该了解 C 编程,还应该熟悉硬件。

您正在处理哪个域(linux、vlsi、arm ....)并不重要。但是无论您的代码在硬件上运行的效率如何。

如果你真的想在嵌入式世界工作,你会找到自己的方式。

于 2013-06-20T10:42:45.250 回答