你将学习:
- 在“痛苦的”嵌入式系统设计过程背后的主要问题是什么?
- 资源、组件和人才的短缺困扰着设计过程。
- 工具集和驱动程序集的不稳定性如何增加了难度。
已经参与了对不同功能有复杂需求的产品开发,这个过程的任何部分都比嵌入式软件的开发更具挑战性。对于物理世界的观察者来说,嵌入式软件是看不见的,但这种底层代码是电子系统的支柱。开发嵌入式系统软件通常是相当困难的,而且常常涉及到产品开发团队中最有经验的成员。
人们自然会问:“是什么让嵌入式系统设计如此痛苦?”答案有很多。这里有一些:
1.时间问题
调试与时间相关的问题,特别是在使用应用程序处理器时,是一个严重的痛点。这里的挑战是理解如何“剥洋葱”和删除抽象层,从应用程序层,到操作系统层,到裸金属/驱动程序层,到硬件层。
嵌入式系统工程师常常必须开发独特的方法来调试这些系统,以隔离故障。这些问题在硬件启动时最为明显,当对所有代码执行的时间进行排序时。这需要一个跨学科的团队来进行调试并“使其正确”,因为问题可能与硬件、嵌入式软件或两者都有关。
2.有限的资源
在开发带有低端处理器的物联网设备时,总是存在一个挑战,即如何使用可用资源(内存、I/O、带宽等)以一种节能的方式(尤其是在电池供电的设备中)完成您想要的工作。
3.组件短缺
这是当今最大的挑战之一,它影响硬件和必要的嵌入式软件。材料短缺正促使公司基于组件可用性重新评估架构和实施策略。如果不是因为供应不是静态的,而是不断变化的,这将是非常困难的。它导致许多硬件和固件开发人员以痛苦、耗时和昂贵的方式进行迭代。
4.不稳定的驱动程序集
工程师选择一个硬件集,供应商提供一个通用驱动程序集用于开发目的。除非硬件非常成熟,否则驱动程序并不总是稳定或经过良好测试的。同样地,当芯片供应商试图在驱动器中创造一个“通用的”时,这些集合可能会变得臃肿或迟缓。即使是开发平台(如Arduino)的驱动程序在功能上也是有限的,并不是防弹的。
来自制造商的不稳定驱动一直是一个问题。在某种程度上,这是可以理解的,因为许多调试芯片硬件的小改变会导致驱动程序不能很好地执行的问题。
5.处理固件更新
特别是当使用最新和最伟大的无线电技术时,固件似乎需要每天更新以解决bug和特性。在产品硬件开发的同时,处理来自芯片制造商的一系列固件更新是一项挑战。
对于参与早期芯片组的工程师来说,在同时开发电路和嵌入式过程代码的同时,保持在硬件和固件的领先地位并不容易。OTS通用驱动程序是为一般情况设计的,但可能没有稳定的、文档完整的源代码。此外,代码可能不是很精简;它可能效率很低,而且会占用资源。
6.开发工具集可能是不稳定的/不兼容的
工具集经常更新,但是如果要完成任务,就必须锁定一个版本。免费工具并不总是稳定的,导致代码无法编译。通常,一个工具集的新版本会使旧的源代码/ sdk与新工具集不兼容。调试中的问题有时可以追溯到没有很好地文档化的工具集的代码,资源效率低下,以及/或难以跟踪。一些提供的HAL层代码在硬实时场景下优化得不够。
7.处理器升级问题
从一个微域跳到另一个微域往往不像所说的那么容易。即使供应商声称硬件修订之间完全兼容,这些声明也必须经过测试。很多时候,需要对硬件和固件进行细微(或者不那么细微)的更改才能迁移到新的硬件版本,即使是在相同的处理器家族或系列中。
8.人才的挑战
优秀的嵌入式系统工程师供不应求。多年来一直如此。今天,尽管新冠肺炎对整个劳动力市场造成了影响,但你需要的人才非常难找。其结果是,嵌入式系统的工程师们面临着跟上形势的挑战。
嵌入式软件的问题需要软件和电气工程方面的多学科专业知识。因为这些挑战很难解决,所以需要多年的经验才能进行有效的设计和调试。
总的来说,这些年来驱动程序和工具都有所改进,但是每一个“新的和改进的”芯片组都会带来一系列新的嵌入式软件挑战。虽然新的工具集试图抽象硬件,使其更容易/更快地将产品功能带入生活,但当涉及到实时和可生产的健壮设计时,纪律和勤奋仍然是始终需要的。天下没有免费的午餐。
在嵌入式系统开发中,“没人说这是件容易的事”这句格言再合适不过了。这份工作很有挑战性,而且我敢说很有趣。嵌入式系统工程师正在部署设计技能,并因此创造出几年前还无法想象的新产品。