嵌入式开发人员,哪些技能很重要

MrG*_*igu 12 embedded embedded-linux

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

通过使用嵌入式Linux内核,我已经非常精通C和ARM汇编程序,我即将深入研究Linux驱动程序.但是我不禁认为我可能会缩小我的技能.我希望将来能继续使用嵌入式系统,但你永远不会知道就业市场(我将把我外包给中国和印度的偏执).

我觉得我目前对C++和Java很弱,我也希望将来学习Android内核.我也不知道任何脚本语言.

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

rub*_*020 33

这是我的清单:

  • 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


Fer*_*ndo 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 Distilled.
  • 制作嵌入式系统.
  • 计算机作为组件.
  • 嵌入式软件入门.
  • 更好的嵌入式系统软件

我希望它有所帮助.

费尔南多