嵌入式软件与标准软件有些细微的相似之处,但其本身就存在的一些令人感到棘手的小问题以及局限性,给开发人员带来了非同寻常的挑战。

因此,我们现在将深入研究嵌入式软件开发周期,以建立一个框架,来帮助开发团队构建强大、安全,且能够让最终用户真正信赖的嵌入式软件。

是什么让嵌入式软件开发与众不同?

在标准开发周期中,软件才是主角;硬件的存在是为软件提供平台,使其易于交互,但并非是主要焦点。

但是就嵌入式软件而言,硬件和软件相辅相成。二者往往联系密切,不可偏废。

所以说嵌入式软件开发人员必须围绕一些特殊要求而开展工作。

首先,嵌入式软件应用中的每行代码均需适应硬件的约束及构成。因此,开发周期必须考虑包括硬件的重量,以及硬件将如何与其他系统交互等在内的所有因素。如果您的嵌入式软件具有人工智能组件,那么从芯片再到数据管道存在更多因素需要考虑。

其次,随着嵌入式软件日益进入更为关键的基础设施领域,如自动驾驶汽车和智能城市中的交通信号灯,安全问题至关重要。换言之,嵌入式软件开发人员需要考虑包括地方法规,企业健康及安全规则在内的所有因素。由于对使用嵌入式软件的物联网设备进行网络攻击已变得极为普遍,数据安全问题也是重中之重。

第三,就其本质而言,嵌入式软件一旦推出就很难更新。一则,大多数嵌入式软件在运行时很少(如有)受到最终用户的干预。这样一来,用户就很难破坏软件,但也让更新变得棘手;如果您需要给软件打补丁,那么必须分配一个程序员来启动更新,并检查它是否顺利运行。如果软件需要多次更新,那么可能会在推出时耗费数百个小时。

而且,不仅仅是缺少用户干预让嵌入式软件难以更新。嵌入式软件最常出现在“随时在线”的技术中,比如安全传感器、工厂机械和医疗设备。因此更新软件时,即使快速安装,并且只需快速重启,也会造成巨大的破坏。也就是说只有为提升性能非更新不可时,才应该进行更新;您不可能每月都推出新补丁。因此,风险通常更高,规章制度往往更棘手,而且容错率极小。

下面来看看如何能应对这些挑战,并仍然能构建出色的嵌入式软件。

第 1 步:范围界定(亦称:何人、何事、何时、何地以及何故)

软件开发最重要的规则之一:在确切知道您要为谁构建软件之前,请勿开始构建软件。

那么现在应该具体了解一下:

  • 谁会使用这个软件?
  • 它能解决什么问题?它满足了什么需求?
  • 他们将如何使用该软件?试想一下它将在何时何地启动,需要运行多长时间,以及这会如何改变您所构建的软件类型。
  • 顾客会为您正在生产的产品支付多少钱?

这些问题的答案将指导您完成软件开发周期的余下部分,所以请勿匆忙浏览或跳过。您需要不断回顾该研究,以确保主体方向正确。

第 2 步:设计(亦称:绘图、规划和组建团队)

既然您了解所要满足的需求,那么现在应该着手让您的设备及相配套软件的规格更充实具体些。

此处,意思是要弄清楚您的硬件和软件如何协同工作,以最大限度地提高性能。

也就是说您应该与开发硬件的团队保持持续沟通,从而找到适合的人员组建:

  • 工具——您所需要的软件开发工具能够支持嵌入式软件开发的独特需求。因而嵌入式软件开发工具应安全性高(因此您的最终用户受到保护),适应性强(因此您可以在硬件需发展时快速反应),并能加速开发过程。您还需要选择一个项目来帮助您的Linux 尽可能快速和高效地运行(我们推荐 Yocto ——您可以在此处了解更多原因)。
  • 人员——您正构建的设备类型以及团队的组成将决定您的团队所需要的硬件工程师、嵌入式软件工程师、开发人员和电气工程师以及其他一系列角色的组合。现在正是时候来弄清您是否需要一些提供嵌入式软件开发服务的公司来提供额外支持。
  • 硬件和软件要求——现在应该为您的设备创建一个详细的技术规范文档。这里,您将定义产品用途,列出主要特征,并制定出制造要求(尺寸、重量、工作电压、内存类型,以及一切您能想到的)。

同时也正是时候设定团队的成功指标,来衡量您的表现,并收集数据,从而完善下一个开发项目。

第 3 步:构建(亦称:向前一步,后退两步)

接下来一起看看所有的计划是否得到了回报。您的软件或硬件设计中是否存在任何意外困难?这两部分是否能完美地协调工作?

硬件通常居于首要地位——正如我们所探讨的,您必须调整软件以适应硬件,因而在着手开发应用之前,明智的做法是尽可能地把设备的物理形态确定下来。

也就是说,硬件工程师可以根据上一步开发的系统架构来开发阿尔法原型。他们将利用这一点来检查系统架构在实践中是否可行,并可能对设计进行一些调整,以便在建立贝塔原型之前解决任何问题。

然后就应该开始对嵌入式软件进行编码。

当然,简单语句中的背后有着很多复杂性。您将试图绕过严格的硬件要求开展工作,满足严格的安全要求,并提供技术规范中的所有功能。

但这仅仅是个开始。

第 4 步:测试和微调(亦称:无所不至,无处不在,一气呵成)

如前所述,固件一旦问世并为最终用户所用,更新起来就非常困难。因此,在进入下一阶段之前从各角度彻底测试代码均至关重要。

此处您所选择的开发工具可以制作或是破坏您的软件。

简而言之,在开发过程中,您需要像火箭燃料一样有着巨大推力的工具——这些工具可以让您开发新的迭代,并进行测试,从而快速更新为更完善、更强大的软件版本。最重要的是,您需要能够做到这一切,而不降低代码的质量或软件的安全性或可靠性。

因此,您应该寻找一种工具,能够:

  • 加快计算密集型开发任务,如编译、CI/CD 构建、QA 测试、代码分析和 API 测试。
  • 允许快速迭代和扩展,而不会使 IT 开销节节攀升。
  • 在不强迫改变常规流程或接受大量培训的情况下完成这两者。

通常,也就是说您需要一个像 Incredibuild 这样的工具:使用强大的分布式处理、虚拟化和独特的构建缓存来帮助您以闪电般的速度进行构建和测试。

由于等待代码编译或测试运行所花费的时间更少,您将能够真正深入持续集成中,更快地向开发人员获得反馈,使您的资源得到进一步扩展,并真正充分利用每一秒的开发时间。

这就意味着您将能够切实地对每条途径进行探索,并对每行代码进行压力测试,以便充满信心地进入下一阶段的进程。

第 5 步:现场测试(亦称:风、雨、热和技术恐惧症)

现在应该看看您的软件是否能通过最后一关;当它走出实验室并进入最终用户手中时,能否可靠、安全、高效地工作。

在此阶段,要留出一些时间来测试您的软件和硬件如何在环境运行。当您的软件被非专业人士使用时,如何维持运行?硬件在温暖的环境中,或在正常磨损的情况下,如何运行?

使用在第一步所收集到的信息,在将要使用的环境中对您的设备进行测试。如果你要构建智能洒水装置,请检查硬件是否足够坚固以抵抗各种外在因素。如果您正在为救护员构建医疗装置,即使当救护车必须前往交通不便的偏远地区,也请确保您的软件能快速启动并有效运行。

构建出色的嵌入式软件的关键何在?除了反复测试,别无他法。

如果您正构建嵌入式软件,您需要为更复杂的需求、更严格的限制以及更少的犯错空间而做好准备。

因此,尽管开发周期的每个阶段都很重要,但关键是要为自己准备好快速测试与快速迭代的工具。在开发过程中,您需要对代码中的所有内容进行测试——如果不能一次性完成,那当然也要尽可能快速有效地完成。

这是确保经得起任何考验的最好方法,这样一来您的最终用户也可以对其完全依赖。

点击获取试用License!

了解嵌入式软件开发周期相关推荐

  1. TPT Autotester|高效快捷的车辆在环ViL测试工具

    前言 汽车ECU(动力域.底盘域.ADAS.电子电器等)的研发最后一个阶段测试往往为ViL(车辆在环)测试,为确保产品的功能和性能正常,通常需要大量的测试. 一般的ViL测试过程 在涉及到发动机.变速 ...

  2. 最适合汽车软件开发的生态系统是什么?

    汽车软件开发领域极为多样化,而且演变速度极快.技术一直在进步,消费者的期望值不断增长,汽车制造商和汽车开发商也尽心竭力,推出更强大的性能方案并尽可能缩短开发时间,降低成本.激烈的竞争推动着创新发展,并 ...

  3. 笔记——嵌入式软件开发学习(一)

    嵌入式Linux软件设计学习过程: 熟悉C语言和基本程序设计方法: (C程序设计.数据结构.操作系统原理) 了解基本软硬件调试方法: (微机原理实验或单片机实验) 熟练掌握搜索相关网络资源的技巧: 熟 ...

  4. 用UML建模开发嵌入式软件

    摘要 针对面向对象开发与C语言的优缺点,提出一种新的方案,用面向对象的思想与开发工具进行软件的设计,用C语言进行编码,给出新方案应用实例,并在此基础上提出几种进一步优化程序性能的方法.新的方案增强了用 ...

  5. 嵌入式软件机器编程为啥选择梯形图作为编程语言?

    (机器编程系列文章二) 嵌入君 上一篇<机器人程序员正朝我们走来,大家准备好了吗?>文章中,谈到了我个人的观点,在一个编程平台中,是否算是机器编程,需要看机器完成的代码占总编码的量和对编程 ...

  6. 嵌入式软件开发就业面试题。2022最新,最全总结。

    嵌入式面试题!!! 1. select和epoll的区别 2.异步IO和同步IO区别? 3.什么叫死锁?产生死锁的原因是什么? 4.死锁的必要条件是什么? 5.linux的进程状态有哪些? 6.什么是 ...

  7. 嵌入式开发:使用条件复杂度测试嵌入式软件

    工程师们似乎在嵌入式软件开发的一个领域就是测试.工程师经常对设计和实现阶段感到兴奋,但是当涉及到证明系统工作时,努力和/或兴趣真的开始减弱.考虑到可能需要的时间和精力,这是完全可以理解的.嵌入式开发工 ...

  8. 嵌入式软件硬件比例_嵌入式做硬件方向好还是软件方向好?

    利益相关:利益相关 先放结论Q:现在学硬件方向好还是软件方向好? A:建议偏软件! 下面咱们详细说说为什么. 硬件开发就是做电路板或者电路原理图,一般把原理图叫做设计,PCB叫做版图或layout在芯 ...

  9. 从Tornado到Workbench新一代嵌入式软件集成开发环境

    从Tornado到Workbench --风河公司的新一代嵌入式软件集成开发环境 康宇峰 风河公司应用工程师 1.嵌入式系统开发所面临的问题 嵌入式软件开发有别于桌面软件系统开发的一个显著的特点是它一 ...

  10. 嵌入式软件工程师适合去芯片公司吗?

    事隔一年更新此文,是想将文章写得更客观,将工作内容.发展方向进行了细化,介绍创业阶段和成熟阶段公司的优劣势,扩充了选择一份工作的参考因素和评估矩阵.希望在年底换工作的高峰期能够给朋友们提供一些参考信息 ...

最新文章

  1. 《代码整洁之道》(Clean Code)- 读书笔记
  2. JAVA后端开发规范
  3. vlc的应用之二:vlc的ActiveX及cab
  4. webpack结合reactjs、vuejs项目中图片处理
  5. Aspx页面生命周期(转)
  6. RS-232交叉串口线的做法与测试.doc
  7. win10安装java不见了,win10安装java以及java配置遇到的坑
  8. mysql服务器io等待高定位与分析
  9. 如何解决MacOS无法登录app store的问题?
  10. oracle批量文件入库,C++ Oracle批量高效入库
  11. ubuntu wireshark找不到网卡及开启IP转发
  12. java 中xsd文件在哪_在Java Eclipse项目中存储XSD文件的约定 - java
  13. 悬崖帝国中文版下载|悬崖帝国中文破解版下载 v1.0绿色免安装版
  14. 基于RFID定位技术下的机房资产管理系统,RFID资产管理解决方案--新导智能
  15. jmeter性能测试实战——基础篇
  16. jmeter随机函数
  17. Python计算卡方值
  18. 中画幅相机焦距水平视角_摄影中的“中画幅”是什么?
  19. 关于mysql时间超过2038年时间戳查询数据问题
  20. android 中shape的使用

热门文章

  1. js获取某年某月某天是一年中的第几周
  2. do sb suggest to_suggest_suggest to do 和 suggest doing 的区别
  3. SpringCloud Netflix-Zuul使用
  4. 怎样屏蔽(去掉)csdn博客侧栏广告
  5. 37天熟练掌握百度竞价推广系列视频教程
  6. 当心真爱掉入“伪爱”漩涡
  7. Power query (Power BI)一步到位傻瓜式合并工作簿,史上最好用
  8. python合并工作簿所有内容_使用Python将多个工作簿合并为一个xlsx工作簿
  9. Word插入页码简单方法
  10. php与drupal,什么是Drupal