【问题标题】:Embedded Developer, what skills are important [closed]嵌入式开发人员,哪些技能很重要[关闭]
【发布时间】:2013-06-17 02:38:23
【问题描述】:

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

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

我觉得我目前C++和Java比较薄弱,以后也想学Android内核。我也不懂任何脚本语言。

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

【问题讨论】:

  • 您的问题过于宽泛,因此将被关闭。无论如何,根据经验,您获得的硬件越接近,您获得的知识就越通用和广泛。如果您了解 Linux 内核或 Android 内核,您仍然在应用程序级别工作,您将成为某些特定应用程序的专家。如果您了解通用的、与硬件相关的 C 编程、任何类型的汇编程序和电子学,那么无论应用程序的性质如何,您都拥有可以使用的核心能力。
  • 抱歉,这个网站是针对有具体答案的技术问题,而不是职业建议或征求开放式列表的问题。
  • 在你直接使用寄存器之前你不会知道嵌入 :)
  • 复习你的 C++ 和 C#。即使在最低级别工作时,也有很多时候您希望创建 PC 工具来帮助处理您的数据。此外,C++ 概念不会在 C 领域伤害您,并且如果您最终外包,您的技能将更加广泛和更具吸引力。 10 年前我站在你的立场上,很高兴我重新学习了 C++ 作为备份......
  • 很抱歉打破了规则,但我在 stackoverflow 上发现了其他几个类似的问题,这些问题非常有建设性地帮助我了解有经验的开发人员的重要内容,但不适用于嵌入式系统。无论如何,我对我得到的答案很满意!

标签: embedded embedded-linux


【解决方案1】:

这是我的清单:

  • 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 和 Android
  • 基本电子学 - 使用示波器、万用表、烙铁读取原理图
  • 嵌入式编程的专门技术,例如开关、电阻梯形开关、旋转编码器等的去抖。
  • 软件工程 - SDLC、CMMI、敏捷方法,例如SCRUM、版本控制(ClearCase、git、svn)、错误跟踪(JIRA?)、静态代码检查、Lint、单元测试、持续集成
  • 构建环境 - makefile、cmake
  • 基础 FPGA/ASIC 设计,基础 DSP

【讨论】:

  • 这正是我想要的!谢谢,看来我还有很多东西要学:)
【解决方案2】:

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

希望对你有帮助。

费尔南多

【讨论】:

  • 感谢您的意见!非常好的建议!
  • 1.了解如何进行代码对齐 - 我在过去 20 年看到的大多数嵌入式开发人员都不知道如何做到这一点。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 2010-11-22
    • 1970-01-01
    • 2010-09-14
    • 2011-01-02
    • 2013-05-28
    • 1970-01-01
    • 2010-12-02
    • 2010-12-04
    相关资源
    最近更新 更多