Embedded 固件工程师可以从软件工程师那里学到什么?

Embedded 固件工程师可以从软件工程师那里学到什么?,embedded,firmware,Embedded,Firmware,从我对固件工程工具、实践等历史的了解来看,它一直落后于软件工程领域几年。例如,据我所知,在固件世界中,对于C++是否真正地为我们的应用程序使用,还有一些C++编译器明显缺少(Microchip??!),仍然存在相当多的争论。我认为这在很大程度上是由于固件和软件之间需求的差异。再次,从历史来看,经过适当审查的工具和技术进入固件世界似乎只是时间问题 现代软件工程师经常使用哪些方法、工具、最佳实践等,固件工程师也可以利用这些方法、工具、最佳实践来改进他们的工艺 具体来说,我是沿着以下方向思考的(但不要

从我对固件工程工具、实践等历史的了解来看,它一直落后于软件工程领域几年。例如,据我所知,在固件世界中,对于C++是否真正地为我们的应用程序使用,还有一些C++编译器明显缺少(Microchip??!),仍然存在相当多的争论。我认为这在很大程度上是由于固件和软件之间需求的差异。再次,从历史来看,经过适当审查的工具和技术进入固件世界似乎只是时间问题

现代软件工程师经常使用哪些方法、工具、最佳实践等,固件工程师也可以利用这些方法、工具、最佳实践来改进他们的工艺

具体来说,我是沿着以下方向思考的(但不要让它们限制你):

  • 提高代码清洁度/可维护性
  • 减少缺陷引入并改进检测
  • 改进文件
  • 需求管理
  • 提高可重用性
我还希望看到嵌入式商店回答或评论这些回答,以提供有关理论可行性或更好的个人体验的反馈

更新
我特别感兴趣的是在弯道前跳一点。所以比较新的东西已经被相当好地审核了(对大多数人来说都很好),比如C++、TDD等等。你一直在使用什么和爱?< /P> 更新2
到目前为止,我在答案中得到了很多很好的通用编程建议,这很好,但我真的在寻找更非传统的方法,这些方法已经证明对人们是成功的。我试着梳理一下敏捷实践者、TDER,以及你们中的其他人,他们已经尝试了一些东西,并且看到了这些东西的巨大回报或可怕的失败。作为一名软件工程师,您在过去几年中采用的工具或实践是否产生了显著的积极或消极影响?

  • 源代码控制
  • 单元测试(TDD)
  • 持续集成(或夜间构建)
  • 错误跟踪
与我共事过的固件工程师不会做这些事情


单元测试可能并不适用于所有类型的固件。我认为在物理硬件上运行时,单元测试比较困难。我想这取决于您是否有可用的模拟器。

不确定什么程度的软件被视为固件(bios、驱动程序或实用程序),但我听到的标准抱怨是UI不标准。认识到UI很重要,它应该遵循一些标准或传统,这将是一件好事

< C++ >,C++是可以理解的,因为与C相比,有很多开销,就像是一个带有LIBC的汇编语言,而在C++中,甚至一个简单的函数调用也可以是虚拟的。鉴于语言的复杂性,实现完全C++运行时不是那么容易。 在软件开发“最佳实践”方面,有太多的事情要列出(我讨厌这个词)。为什么不开始呢

乔尔测验

  • 你使用源代码管理吗
  • 你能一步完成一个构建吗
  • 你每天都做构建吗
  • 你有bug数据库吗
  • 在编写新代码之前,您是否修复了bug
  • 你有最新的时间表吗
  • 你有规格吗
  • 程序员有安静的工作环境吗
  • 你使用金钱能买到的最好的工具吗
  • 你们有测试员吗
  • 新应聘者在面试时会写代码吗
  • 你做过道可用性测试吗

  • 我曾担任嵌入式软件工程师和软件开发人员。在这两个世界中,我都了解到,无论您的系统有多么少的资源,无论您使用什么语言编程,都有许多事情可以让您的生活变得更轻松

    首先是你正在使用的工具。在嵌入式软件中,大部分时间只处理编译器/链接器。不止这些。Diff工具、正则表达式、脚本语言、文档工具为您节省了大量时间

    另一件事是代码质量。一个人需要遵循风格惯例,经历常规的重构周期,并且通常要记住,代码读取比代码编写更频繁,拥有更多可读性的代码确实是值得的

    有时在嵌入式软件中,我们完全错过了设计阶段。嵌入式项目通常没有桌面/服务器项目那么大,但这并不是不进行适当设计的借口


    软件需要单独测试,而不仅仅是作为设备的一部分。为您的系统构建一个软件模拟器真的节省了很多时间,只是为了测试软件是否符合要求的规范。当整个硬件和软件准备就绪时,这样做的成本要高得多。

    固件工程相当广泛。从PIC到DSP,它们都拥有不同程度的物理资源。如今,DSP功能非常强大(与5年前的CPU相当),可以支持大量内存等。但同样,您也可以使用几千字节的PIC。由于资源越来越贫乏,程序员不得不使用巧妙的黑客技术来最大限度地利用设备。重点是“让它工作起来”,而不是“编写优雅的代码”

    我想看到的是好的项目管理工具,包括代码和文档,因为您必须参考大量数据表、分散在网络和电子邮件blob上的设计文档等

    <>我也希望看到更好的DSPs的DVI工具(TI:请把CCS交给一个擅长制作IDE的人),还有更多的使用C++的图书馆生产商(我在看你吃)