从我对固件工程工具、实践等历史的了解来看,它一直落后于软件工程领域几年。例如,据我所知,在固件世界中,对于C++是否真正值得用于我们的应用程序,还有相当多的争论,而且一些C++编译器显然没有(微芯片?!)。我认为,在很大程度上,这是由于固件和软件之间的需求不同。再一次,从历史上看,它似乎只是一个时间问题,适当审查的工具和技术,使它进入固件世界。
现代软件工程师经常使用的方法、工具、最佳实践等,固件工程师也能利用这些方法来改进他们的工艺吗?
具体来说,我是沿着以下几个轴思考的(但不要让它们限制您):
我也希望看到嵌入式商店回答或评论答案,以提供关于理论可行性或更好的个人体验的反馈。
更新
我特别感兴趣的是在曲线前跳一点。因此,相对较新的东西,已经被审查得相当好(对大多数人来说都很好),比如C++,TDD等等。你一直在使用什么和爱?
更新2
到目前为止,我在答案中得到了很多好的通用编程建议,这是很棒的,但我真的在寻找更多的非传统方法,这些方法已经被证明对人们是成功的。我试图戏弄敏捷实践者、TDDers和你们中的其他人,他们已经尝试过一些东西,并且看到它在黑桃中得到了回报,或者可怕地失败了。作为一名软件工程师,您在过去几年中是否有一种工具或实践对您产生了显著的积极或负面影响?
发布于 2009-07-24 12:10:15
我做过嵌入式软件工程师和软件开发人员。在这两个世界中,我已经了解到,无论你的系统资源多么少,你正在编程的语言,有很多东西可以使你的生活更容易。
第一件事是你正在使用的工具。在嵌入式软件中,您大部分时间只处理编译器/链接器。不止这些。Diff工具,正则表达式一种脚本语言,文档工具为您节省了很多时间。
另一件事是代码质量。人们需要遵循风格约定,经历定期的重构周期,并且通常要记住,代码读取比编写代码更频繁,拥有更多可读性的代码确实值得。
有些时候,在嵌入式软件中,我们完全错过了设计阶段。嵌入式项目通常不像桌面/服务器项目那么大,但这并不是不进行适当设计的借口。
软件需要自己进行测试,而不仅仅是作为设备的一部分。它确实节省了大量的时间来构建一个软件模拟器您的系统,只是为了测试软件是否符合所需的规格。当整个设备、硬件和软件准备就绪时,这样做要昂贵得多。
发布于 2009-07-24 11:56:58
与我一起工作的固件工程师不要做任何这些。
单元测试可能不适用于所有类型的固件。我想象当某件东西在物理硬件上运行时,单元测试更加困难。我想,这取决于您是否有可用的模拟器。
发布于 2009-07-25 17:38:23
假设“固件工程师”是指“嵌入式软件工程师”,那么我的回答是:他们是软件工程师,所以他们应该--在可能的情况下--做与其他软件工程师相同的事情。
显然,为嵌入式系统编写软件需要一些不同的技能,例如对目标处理器的详细了解,以及能够处理有限的资源(与PC或类似的计算机相比)。
正如其他人所提到的,单元测试是复杂的,因为这可能必须在运行在PC上的模拟器上完成,这虽然非常有用,但永远无法替代对实际系统的彻底测试--特别是考虑到嵌入式系统所受事件的异步性质。
我担心为什么嵌入式软件看起来“落后”是因为软件工程--作为其中的一部分,嵌入式软件--通常没有在电子工程学位上进行任何深度的教学。考虑到一个电子工程师的职业生涯中有那么多的时间可能花在编码上,这似乎是一个巨大的疏忽。
幸运的是,有些人正试图弥补这一点。我强烈建议阅读Jack的文章(在他的网站上,以及他关于embedded.com的专栏中)。
此外,米斯拉-C是在不久前创建的,目的是为了避免汽车行业的C软件中常见的bug,而his自那时起就被嵌入式软件世界中的许多人所采用。添加像PC-Lint这样的静态分析检查器,您已经在改进代码方面取得了一些进展。
在许多情况下,工具供应商也没有帮助他们创建自己的IDE,也许专注于编译器和调试器并将IDE留给其他人(例如Eclipse )会更好。
顺便提一句,关于在嵌入式系统中不使用C++的更多信息,请参见这个问题。
最后:因为固件工程师是软件工程师,我们面临许多相同的问题、挑战和关切,所以我们应该使用相同的资源;毕竟,周围有很多这样的资源,而您正在阅读其中的一个!
我经常浏览的其他网站包括:
编辑:在回应Gabe的评论时说,“我们应该寻找哪些工具来适应?”,几个例子浮现在脑海中:
独立于编译器的IDE:有用于C的大量的IDEs,但据我所知,在没有兼容编译器的情况下,很少有人能适应它们的潜力。我希望看到编译器开发人员和IDE开发人员会聚在一起,这样,理想情况下,任何编译器都可以与任何IDE一起使用。
在没有兼容编译器的情况下,我希望能够使用PC-Lint (或类似的)作为我选择的IDE的“官方”编译器。
仿真和建模:仿真工具(如Simulink )允许对PC和一些高端嵌入式处理器的软件进行仿真、建模和测试。像这样的工具对于较小的芯片也同样有用,所以很高兴看到它们扩展到市场的那个领域。
PS:本周杰克·甘塞尔的专栏题为"是什么让嵌入式与众不同?",与上述问题(松散地)也是相关的。
https://stackoverflow.com/questions/1177181
复制相似问题