软件开发具有挑战性。 最新设备的嵌入式开发更具挑战性。 该技术领域面临的其他障碍主要是由于设备内部部署的代码行快速发展,如果要在商业上取得成功,就必须为常规 PC 用户界面提供更统一的外观。
鉴于典型部署场景中可能遇到的障碍的广泛性,嵌入式领域内软件系统设计的复杂性可能会迅速上升。 由于软件处于设备内部的部署后阶段,其“锁定”性质使得该领域的建模软件编程架构增加了传统 PC 或基于服务器的开发环境所面临的挑战。
在探索开源软件 (OSS) 在嵌入式设备开发中的潜力之前,您需要问自己为什么选择这种方法而不是使用任何专有平台或工具集。
测试OSS的健壮性
您选择嵌入式 OSS 是否是为了尝试节省成本 - 如果是这样,您是否考虑了必要时提供支持和服务的全部成本? 它是否可以与最先进的开源产品配合使用,从而提供复杂嵌入式部署所需的更强大的功能和灵活性? 如果是,那么相关代码是否已得到足够的增强和开发以提供一定程度的稳健性?
专有二进制文件
您需要记住的是,由于硬件本身的多样性,在硬件上集成嵌入式软件比在桌面系统上集成要困难得多。 我们在这里讨论的是您需要为驱动程序执行的配置以及软件堆栈中更高层的注意事项。
如果您有一组二进制驱动程序,它们可能不一定有效。 要解决此问题,您需要重新安装驱动程序的源代码以使其能够在您的硬件上运行。 即使您在一种硬件配置上有可用的专有驱动程序,它也可能无法在更高版本上运行。 使用开源软件,您将有机会解决这些问题。 但对于专有二进制文件,您需要要求供应商解决此问题,这可能会严重延迟您的项目。 这也适用于整个软件堆栈,包括 UI 层。
哪种开发方法最有效?
大多数行业评论员并不建议“敏捷”或“极端”编程方法对于嵌入式领域最有效,因为这些模型通常在轻量级应用中更有效。 在这种情况下,随着项目向最终游戏的进展,迭代开发模型的使用可以提供更快的系统构建,即缩短上市时间。
嵌入式GUI不同
嵌入式 GUI 可能根本不像桌面应用程序。 嵌入式应用程序通常是任务驱动的,具有简化的输入机制(通过触摸屏或有限的键盘)。 屏幕尺寸通常比桌面小得多,而且您没有桌面鼠标。 这会改变整个用户体验并影响应用程序的整体设计。
您很可能会在 PC 上运行应用程序开发来模拟嵌入式设备。 如果您决定使用 Qt 等应用程序框架,那么在您的 PC 上运行该应用程序也可能运行良好。 但您应该针对手头的任务规划和设计应用程序,以便用户在带有触摸屏或有限键盘的较小屏幕上获得良好的体验。
嵌入式的三大支柱
如果嵌入式系统开发的三大支柱要被认可和接受的话,很可能就是以下三个原则:集成、创新和产业化。 现在,这些规则不再是硬性的,甚至不是事实上的标准,而是随着该领域的发展一次又一次面临的共同挑战。
集成挑战:与外部合作伙伴和软件开发人员的协调将不可避免地成为整个项目的一部分。 为了在这个高度“精确”的开发环境中有效地管理此过程,有必要提供一定程度的所谓“战略业务规划”,该规划与您自己的开发团队的工作并行进行。
开源开发在这里有帮助的地方在于,本质上,有一个形成开源社区的开发者生态系统。 有时称为“贡献模型”,这是共享相同的沟通和交换理念的个人(在某些情况下,团队)在社会和技术上整合的集合。 在这样的环境下,整合自然更加顺利。
如果您只能完成您的项目,并且无法找到您已经需要的缺失组件和代码块,那么“请求”其他人提供帮助您填补缺失空白的选项并不罕见。 毕竟,部分开源社区始终在寻找下一个方向,将他们的想法付诸实践。
创新挑战:您需要新产品。 您还需要一款真正创新的必备产品,并且您需要生产它的技能。 缺乏内部嵌入式软件专业知识是该领域开发商店面临的最常见障碍之一。 你怎么解决这个问题?
很明显,开源开发方法可以在这里提供帮助。 很明显,从本质上讲,开放社区带来的额外范围允许您的项目利用其他人拥有的技能并将其合并到自己的项目中。
稍微考虑一下魔鬼拥护者的观点,悲观主义者可能会认为这绝不是理想的,因为所需的技能永远不会是内部的,也永远不会在需要这些技能的个人或公司本身的范围内。 现实情况是,几乎没有证据表明这是一个真正的问题。 事实上,嵌入式开发人员正在使用开源插件、代码示例或更成熟的组件来检查和审查他们使用的外部技术的每个元素。 事实上,他们在工作中学习。
工业化挑战:嵌入式软件通常以较大的工业规模销售。 构建软件来适应这一挑战并不是一件容易的事,引入互操作性测试必须是这个过程的一部分。
当开源开发按照适当水平的战略规划勤奋认真地执行时,与大型专有开发商店相比,其可扩展性没有明显的差异。 如果需要,互操作性可能比需要在封闭的专有商店中完成的配置带来的挑战更少。 特别是在大型项目中,没有太多详尽的测试。
人们普遍认为,嵌入式智能手机的工业“驱动力”将在嵌入式开发的下一阶段发挥重要作用,但手机和PDA绝不是推动嵌入式软件需求的唯一设备。 消费电子产品和家用电器也将推动嵌入式增长。
虽然像三星这样的公司已经在冰箱中内置了图形用户界面(这本身就是一项复杂的工作),但它实际上仍然是一个独立的设备。 当智能手机或其他带有嵌入式软件的复杂产品开始需要通过网络、蓝牙或其他一些标准或协议进行联网时,未来编程挑战的复杂性会呈指数级增长。 毕竟,未经测试的复杂性是毫无价值的。
诺基亚Qt框架与三星的合作非常广泛。 除了冰箱之外,Qt 还用于为三星最新的 CCTV 数字录像机开发 GUI。 作为一款先进的监控设备,该产品还具有基于网络的监控和搜索功能。 将此类功能构建到嵌入式软件驱动的设备中在十年前是闻所未闻的,开源的广度和范围推动了这种发展。
受益于嵌入式开源软件开发的不仅仅是现代制造业面向消费者的一端; Qt 本身也被用于开发工业领域的产品。 西门子使用Qt开发了其SIPLACE大型工业贴片机,HGZ咖啡机具有嵌入式Linux触摸屏,也是使用Qt构建的。
除了意大利公司 MicroNova(其咖啡研磨机配备基于 Qt 的触摸屏 UI)之外,ERSA 和 Pixy 还使用 Qt 开发了火车司机显示器。 基本上软件嵌入式设计软件嵌入式设计,应用程序的多样性就像使用当今工具的软件开发人员的想象力一样无限。
但它并不止于此。 我们已经讨论过嵌入式软件日益复杂的问题。 如果软件开发中不断增加的复杂性没有相应的测试水平相匹配,那么很可能会开发出质量和可靠性较差的产品,这是客户永远不希望看到的。
如果将此问题与设备本身的功耗和物理空间限制没有以相同的速度增加这一事实结合起来,那么您就可以理解为什么在不遵循软件应用程序开发最佳实践时会出现潜在的困境。 老实说,即使我们遵循最佳实践,代码行数几乎肯定会比 CPU 上可用的晶体管数量增长得更快,因此存在不可避免的挑战。
嵌入式的优缺点
当我们从技术和业务角度看待嵌入式软件应用程序开发时,随着产品功能的增加和部署变得更加繁琐或烦琐,您最终可能会花费更昂贵的开发周期并遭受更慢的上市时间。
我们在这里讨论开发最佳实践,CMMI 5 级过程改进方法的要求具有特殊意义。 能力成熟度模型指出,最佳实践应该使流程能够促进零缺陷软件开发,并关注缺陷的原因和影响,而不是其后果。
如果我们能够做到这一点,并实现一定程度的互连性和互操作性,使我们能够将我们的开发产业化并在必要时使用第三方技术,那么嵌入式的未来将是光明的。 现在,我们所需要的只是开发人员技能来实现这一目标!