就像任何开发领域一样,嵌入式系统的开发就像大海一样:深海洋流相对上较稳定,而看似平静的海面下却可能暗潮汹涌。冒着可能被淹没的危险,我想表达的是,当今嵌入式系统的开发基础,基本上就跟工程师当年必须在硬联机微电脑上拨动套环开关才能跑程序代码一样。就像那些工程师一样,我们至今仍得尝试监控外部事件,并做出适当地响应。那么,我们如何在持续变化中求发展?
从表面上看,用于建构嵌入式系统的硬件、软件和方法日益精进——或至少有所不同。为了衡量这些变化,《Embedded.com》分别在1999年、2009年和2019年进行了调查,而今借着比较并分析这些调查结果,将有助于一窥过去20年来嵌入式开发如何演变的缩影。
实际上,每一项调查的问题本身都反映了其中的一部份变化。1999年的调查涉及很多部份,针对交叉编译程序、面向对象的设计方法以及电路中硬件仿真器出了许多问题,但针对操作系统(OS)方面的讨论并不多。到了2009年的调查,排除了这些特定部份的问题,并加入了更多有关多处理器设计、OS以及特定的嵌入式Linux等更多信息,但诸如物联网(IoT)和人工智能( AI)之类的主题还没开始受到任何关注。而在2019年的调查中,包括IoT、AI以及安全性这些主题,才开始显露更广泛的兴趣和积极运用。
由于在2009年时针对调查方法进行了大幅改变,因此很难比较这几次调查的细节。在某些情况下,同样的一般性问题被延伸为答案不只一个的多重选择题。这对于任何解释都增加了不确定性,这在以下的「设计功能」部份更多的讨论。此外,调查结果中还缺少1999年的部份调查资料,因此有些部份只能看到2009年和2019年的数据。最后,值得注意的是,调查结果的误差范围通常在大约3%到6%以上,因此想要详细加以比较可能极具风险。
过去十年来,嵌入式设计的主要应用领域有什么改变?尽管工业和消费领域仍排名前五大重点应用,但汽车和IoT应用有关的设计开始占据主导地位(表1)。或许我们可以说在2009年被称为数据通信(datacomm)的设计,可以包含在2019年的通讯中。
表1:前5大嵌入式应用领域。 (%的受访者)
过去二十年来,设计的本质如何变化?1999年的调查列出了将Web技术整合于设计中的多个问题。在研究1999年的调查时,特别有趣的是一点是:有43%的受访者表示并不打算这么做,但有14%的受访者表示愿意。我其实并不确定该问题中「Web技术」究竟表示什么,但希望不会有人想把httpd服务器嵌入其系统中。
更广泛地来看,表2显示三项关键设计功能的演变。唯一真正的变化是连网设计大幅增加,从2000年初约占35%的设计,到2010年时已经高达90%以上了。(我认为该调查方法没注意到连网和无线可能互换,但从加总的统计数字来看, 2009年和2019年所显示的连网设计量大致相同。)
同样地,嵌入式开发人员打造以电池供电的设计至少长达十年之久了。有时候,业界会忘记电池供电的设计早在IoT和可穿戴装置兴起之前就已经存在。
表2:关键设计功能。 (%的受访者)
值得注意的是,C/C++并不一定是嵌入式开发的主要语言(图1)。由于每项调查中可能潜藏其他的响应,加上更高性能的处理器崛起,很可能减少了对于组合程序代码的一些需要。但事实是,只有约37%的项目能按时按期完成——尽管2009年表示希望加速开发流程,但这个数字到了2019年也没有多大的改变(参考图6)。
图1:主要的开发语言。(%的受访者)
2009年底,开放原始码OS开始取代商用OS的使用。到了2019年,这一趋势仍持续进展。有趣的是,取代商用OS并不仅仅是因为开源OS的兴起。客制/内部专有OS的使用率也持续增加(图2)。
图2:操作系统(OS)类型。(%的受访者)
过去十年来,32位的处理器架构虽然仍旧在使用中,但64位架构却有了显着的进展(图3)。可能有人会认为这就是演进的主要趋势,因为开发人员不断地寻求更宽的位宽度(从8位到16位、32位再到64位),以期实现更好的处理器性能以及更高效的内存周期(包括指令快取)。
图3:处理器架构。(%的受访者)
2010年最明显的趋势可能就是设计从多处理器芯片精简为多核心组件——从采用相同处理器的多芯片演变成同质多核心组件,或者是从采用不同处理器的多芯片进展至异质的多核心组件(图4)。
图4:单处理器芯片 vs 多核心处理器。(%的受访者)
二十年来,决定处理器选择的主要因素并没什么改变(图5)。软件开发工具的可用性仍然是工程师的首选。并不是所有人都情愿在面板上切换机器程序代码。但有意思的是,从2000年开始以来,熟悉处理器架构不再是最重要的了,成本和IO/周边装置功能的重要性也(相对地)在持续下滑中。
图5:影响处理器选择的因素。(%的受访者)
最后,对于即将到来的技术挑战之看法有何转变?如果我们比较2009年和2019年调查中列出的前五大挑战,那么,整合、程序代码复杂度以及软件工具仍然是最主要的顾虑。令人玩味的是,过去十年来,人们对于上述在开发过程的顾虑逐渐消失,取而代之的是开始担心低功耗和安全性。
因此,对于安全的顾虑以及为了减轻威胁而采取的各种措施,构成了2019年的调查重点。在2009年,只有3%的受访者认为安全问题很重要。但如同先前提到的,2009年和2019年在按时完成项目的统计相似度较低,显示2019年对于开发过程中的顾虑转变,主要是和更关键的问题出现有关。
图6:最主要的技术挑战。(%的受访者)
那么,对于接下来的2020年代,这些结果又意味着什么?
我们可以从这些调查结果中推断,软件开发工具以及管理程序代码大小等问题仍然很重要,而像性能和外围装置等处理器特性的重要性则相对降低些。另一方面,在2020年代,只有少数的新技术(例如不用编写程序代码的开发工具、量子运算以及支持现场训练神经网络模型的AI核心等)出现,似乎也为设计挑战带来了重大转变。是这样吗?
嵌入式系统仍然需要工具来编写(或产生)程序代码,而且,对于更复杂的异质多处理器硬件设计而言,也确实需要这么做。这些设计仍然必须连接实体世界,但是,接口的性质可能更进一步发展,而不仅仅来自硬线接口、传感器或协作对等装置等。未来将会持续要求更多的功能性,从而需要更先进的硬件提供更高性能以及进一步强化的功能,才能执行更复杂的应用。
在即将来临的下一个十年,嵌入式系统设计仍将需要更有效地连接至数据来源,以最低延迟执行更复杂的程序代码,以及克服更复杂的安全威胁,同时还得保持在超低功耗。未来,我们很可能采用全然不同的途径,但目标将保持不变。
探索更多调查结果,请点选《Embedded.com》分别在1999年、2009年和2019年调查连结。
(原文发表于ASPENCORE旗下EDN姐妹媒体embedded,参考链接:How embedded development has evolved over the past two decades,编译:Susan Hong)