中文 英语

嵌入式软件的巨大变化

集成和重用正在将重点从最小占用空间转移到可重用性和灵活性上。

受欢迎程度

每个优秀的硬件或软件设计都始于整个设计周期的结构化方法,但随着芯片架构和应用开始专注于特定领域并包含某些版本的人工智能,这种结构变得越来越难以定义。嵌入式软件,过去是为非常狭窄的功能编写的,占用空间很小,现在越来越多地融入到整个系统设计中,并在任何可能的地方被重用。

嵌入式软件通常包括实时操作系统、驱动程序和固件,其中大部分是定制开发的,一次加载到设计中,很少再碰。但是,随着越来越多的芯片被用于更长的时间,以及安全和关键任务的应用,嵌入式软件可能需要更新。因此,它不再是嵌入式软件的单一架构,而是变得越来越灵活和适应性强,而且在某些情况下能效更低,速度更慢。现在的挑战是弄清楚什么需要优化,以及如何最好地实现这一目标。

“问题变成了,‘这个系统在做什么?“如果结果证明你需要开发软件,但它可能是隐藏的,那么硬件和软件一起实现所需的功能,”Tensilica IP的技术和战略营销集团主管皮埃尔-泽维尔托马斯说节奏.“在今天的许多嵌入式系统中,当系统中有一个微控制器时,嵌入式软件必须进行优化。软件的作用是协调输入,输出,也许还有一些处理,让系统完成它应该做的事情,也就是从环境中收集信息,做一些事情,然后提供一些新的信息来激活一些事情。在工业领域,甚至在智能家居中,情况都不是这样。在智能家居中,你可以感知,你可以做一些事情,你可以查看感知数据,然后激活一些东西。面临的挑战是优化,低成本,并执行功能非常好。在这里,软件变得非常具体,并且对接口非常具体,在某种程度上对架构本身也非常具体。当你控制输入或输出时,有寄存器来控制、通信等,所以软件可以非常具体,软件人员和固件开发人员与硬件非常接近。”

但随着设计变得更加个性化,以及芯片制造商试图在设计中增加一些灵活性,以使所有东西都不是昂贵的一次性设计,同时设计硬件和灵活的软件变得更加困难。

“看看20年前的嵌入式软件领域,嵌入式设备往往不是连接的,也不是管理的,而是在专门制造的设备中,”公司总经理斯科特•莫里森(scott Morrison)表示西门子嵌入式解决方案.“工程团队试图针对特定功能进行优化。可能会有一些可重用性的概念,这样他们就可以为同一家公司的类似设备编写代码。在那个时候,开源并不是一个真正的选择。这意味着嵌入式软件开发从非常手工制作,甚至雕刻,以性能为中心和以优化足迹为中心的软件开始。”


图1:嵌入式软件的可重用性越来越强,但挑战在于优化。图片来源:西门子嵌入式解决方案

这些类型的应用程序仍然存在。像心脏起搏器这样的医疗设备只有一项工作,而且由于电池很难更换,所以它们使用尽可能小的占地面积和尽可能少的能量来实现这一目标。但是,现在许多其他设备也使用嵌入式软件,并且该软件需要在使用它的任何系统的上下文中工作。

那么,今天的嵌入式软件究竟是什么呢?“也许嵌入式软件行业的最佳定义是,开发人员共同设计硬件和软件,以获得优化的解决方案,并欣赏双方的资源平衡,”公司首席执行官Simon Davidmann说治之软件.“硬件抽象层是一种很有用的方法,可以让各方对整体操作有一些了解,而不会被不必要的细节搞得不知所措。硬件是基于半导体材料和晶体管的物理特性,但对于大多数数字设计,门级视图与RTL抽象最有用。软件是基于处理器的指令集体系结构(ISA),用汇编级微体系结构来实现必要的功能,但软件是用硬件抽象层、高级语言(如C语言)的抽象和由RTOS或OS管理的操作基础设施来开发的。

简而言之,嵌入式软件和硬件之间的联系变得更加复杂和微妙。微软产品营销高级总监约翰内斯•斯塔尔(Johannes Stahl)表示:“传统上,当我们考虑软件开发时,总是首先考虑硬件。Synopsys对此.“有一个指令集,有一个建立在指令集上的CPU,有一个硬件架构,然后基本上首先要构思它,然后创建指令集。软件必须移植和开发,这实际上是一件痛苦的事情,但这种情况发生在极少数指令集生态系统中。”

随着时间的推移,软件总体上已经发展到驱动更多关于硬件的决策,嵌入式软件已经成为整个系统软件体系结构的一个组成部分。但随着AI/ML现在被添加到几乎所有东西中,它也变得更加模糊。在这个世界里,指令集是没有定义的,但是软件和算法是有定义的。斯塔尔说:“在那里,系统架构师会说,‘我有一些软件,现在给我建一个最好的架构来执行它。“顺便说一下,用最低的功率。’现在真的是软件优先,这是一个有趣的变化,因为工程团队会考虑他们需要执行的软件堆栈,客户对这个软件堆栈的关心,以及最适合它的架构。”

里程可能有所不同
在汽车等市场,有很多非常复杂的ecu,嵌入式软件更难分离出来。

西门子的莫里森说:“我雇佣的一个人刚刚完成了一个项目,在这个项目中,他们想出了一个增加功能的想法。“这位工程师必须把要添加到代码中的字节数提交给这家德国汽车公司。他想要增加的字节还不到10个字节,但这引起了程序员的巨大争论。在汽车领域,他们现在使用了很多32位处理器,内存比以前便宜多了,而且重点更多地放在了设计汽车的速度上,因为代码优化和定制得越多,需要的时间就越长。如果你可以添加一些功能强大的东西,但你不需要优化它,也许你是从过去的程序中重用它,所以它带来了一些额外的代码,而不是高度优化的。但它可以完成工作,即使它会花费你更多的内存或性能。重点已经转向可重用性、降低成本、缩短上市时间。”

部分原因是,更多的系统使用寿命更长,而且它们正在以更小的批量开发。因此,与手机不同的是,一个芯片的销量可能会达到数亿美元,而对特定领域应用的关注大大减少了这些销量。芯片制造商通过在设计中增加灵活性来进行调整,同时也通过扩大他们向客户销售的产品——通过直接向原始设备制造商(oem)销售解决方案,而不是向一级或二级公司销售解决方案,这一点成为可能。

公司执行副总裁Sailesh Chittipeddi表示:“我们花了更多的时间在获胜组合和系统解决方案上瑞萨.这可以像一个特定系统的原理图布局一样简单,在一个特定应用的板上结合一个微控制器/微处理器定时设备。一个很好的例子就是房间加湿器,一个简单的布局就可以让它全程使用。另一方面是一个系统解决方案,例如,你可以定义一个完整的机械手臂,把所有的设备放在一起,交付软件包,以及它如何连接到其他东西。这是我们以前从未做过的事情。在过去,我们会出售一些应用程序需要的WiFi芯片。现在,我们要全力以赴。”

嵌入式软件在这类设备中起着至关重要的作用。“一般来说,软件架构是一个非常重要的主题,尤其是在嵌入式软件中,因为它有一个主要角色,并且非常依赖于硬件,”Haris Turkmanovic说Vtool他同时也是贝尔格莱德大学电气工程学院电子系的助教。同时,好的嵌入式软件是不依赖于硬件的。为什么?因为如果你创建了一个非常好的软件架构,那么这个软件就不会依赖于硬件。”

对Turkmanovic来说,一个好的软件架构必须由多层组成,包括驱动层、中间件层、服务层和应用程序层。“一般来说,所有的软件都必须有一些层次。在嵌入式软件中,这一点尤为重要,因为硬件经常会发生变化。如果您设计的软件编写得很好,那么更改就很小。但是如果你没有一个计划和一个好的软件设计,你就会遇到大问题。另一方面,如果这是一个大项目。在这里,很好地设计软件是至关重要的,因为很多人都会使用它。版本控制系统也使管理软件开发变得更加容易,合并关键分支时的冲突数量将大大降低。”

他说,第三个方面是软件部门何时成立。“假设划分是垂直的和水平的。水平的是上面提到的层,垂直的分区设置为服务,这是几个层的复合。如果您创建这样的软件,那么在最后的开发步骤中维护和测试该软件会容易得多,因为它是有组织和文档化的。无论我们选择什么作为软件的基础,都必须在多个层面上进行设计。但是层的复杂性取决于主程序流程。它是裸机还是基于RTOS的软件?”

艰难的权衡
鲁珀特•贝恩斯(Rupert Baines)是twitter首席营销官Codasip他认为,很多硬件工程师都没有意识到软件的重要性。“在你正在设计的SoC的采购决策中,软件副总裁可能对你使用哪个IP核或供应商有最终决定权。如果她说,‘不,我们没有使用它,因为工具不可用,你没有使用那个核心。硬件工程师可能会说,‘但这是一个非常可爱的内核。它是可爱的。“没关系。软件副总裁有更多的工程师和更多的痛苦,需要iar、lauterbach、Seggers、llvm和Clangs真正成熟。软件蚕食硬件,即使作为一家主要靠硬件授权赚钱的公司,到最后,一切都是软件,软件才是最重要的。”

这使得权衡尤为棘手。软件可以以一种非常特定于硬件的方式编写,以便针对特定应用程序对其进行优化。但它也可以被编写成适用于更多领域。

“就像工程中的所有事情一样,这是一种权衡,”贝恩斯说。“工程的全部意义在于你试图优化什么。您正在权衡开发效率和性能。对于现在非常多的应用程序和非常多的程序来说,您试图做的事情是非常容易理解的,非常标准化的,并且您希望利用已经存在的使用标准库和标准软件语言的东西。50年前,你可能会写自己的语言。现在,你会用C或c++或Python或Java或其他标准语言编写。现在用原始汇编编写几乎是不可想象的,因为编译器和工具链现在是如此的好。那你为什么要麻烦呢?您将使用现有的库和驱动程序。对于很多应用来说,这可能已经足够了,这将完美地完成你的工作。”

然而,这并不意味着硬件不那么重要。“它需要坚固、低成本、节能,等等,”Cadence的托马斯说。“但是现在,由于各种原因,当你做一些具体的事情时,你可能没有能力销售它,所以人们希望制造一些更灵活的系统,能够做更多的事情。为此,你需要知道你的目标是谁,以便销售更多产品。可能是你的系统变成了一个更大的系统,软件的区别是很重要的。再加上人工智能和机器学习所需要的智能传感器检测能力,以及由于安全和隐私等原因而在边缘做事情的能力,这就要求嵌入式系统的灵活性越来越高。进入这种类型的系统,你需要从了解如何编程和如何区分开始。”

例如,考虑一个智能家居,它有多个传感设备——智能扬声器、摄像头和其他安全传感器。它们可以用来感知特定的东西,然后做出决定。

托马斯说:“这可以在一个可以针对不同产品重新定位的设备中实现,但芯片本身可能是一样的。”“在这种情况下,如果有人想为智能设备开发应用程序,让它做一些不同于智能门铃的事情,你将被要求开放软件。然后你开始有一个嵌入式系统,它的设计方式更加灵活,这样它就可以针对不同的产品。在那里,您希望软件开始更容易接收高端应用程序,并且具有可编程和可重用的应用程序,以瞄准高端软件开发人员。这可能是处理所有硬件的底层之上的另一层。”

没那么简单
Vtool的Turkmanovic说,当今嵌入式软件开发的一个问题是没有统一的方法。“这是非常有问题的。一般来说,人们尝试遵循一些方法,但没有一个标准的方法来做这些事情。特别是如果它不是一些时间关键或安全关键的软件,项目团队没有任何规则。这对于维护,升级和改进来说都是非常困难的。当你得到一堆代码,而你无法将其可视化时,就很难理解它是如何工作的。这对于开发软件的工程师来说是很重要的,因为软件对安全性不太重要,或者在Linux领域。如果它处于中间,就没有规则,所以它归结为令人满意的功能。这就是问题所在。”

他说,对嵌入式软件采用系统的方法要好得多。“从项目开始到结束,你必须花很多时间来组织它。首先需要考虑有问题的关键路径。有些东西是实时的还是非实时的?你有多少中断程序?你将如何组织它们?你将如何对它们进行优先排序?在开始阶段,我们需要考虑很多问题。很多问题都是由项目的需求决定的。它们中的大多数都受我们使用的平台的限制,因为我们不可能在每个平台上都使用RTOS,只能针对某些特定的平台。 If some requirements are very strict time-wise, then you don’t have too much choice. You must follow one direction. If you have limited resources, you also need to better organize your code. What is needed is a unified framework for embedded software.”

西门子的莫里森说,在汽车行业,这被称为“面向服务的架构”。“在汽车领域,多年来在所有软件中出现的某些架构得到了更多的采用,但在过去10到20年里,在嵌入式领域出现的是分层架构的概念。在最近的汽车行业,这已经演变成面向服务的体系结构。在成熟的软件开发程序中,分层的整个概念是,你仍然会得到一些软件,这些软件将非常依赖于硬件,但它们应该有一个定义非常清晰的API,甚至可能是一个行业标准的API。例如,使用AUTOSAR,您可以获得MCAL(微控制器抽象层),该层通常与半导体公司的芯片或SoC一起提供。这是因为AUTOSAR标准机构在定义这一点上做得很好,这样你就可以把不同的AUTOSAR实现放在那里,它们通常都可以工作。这意味着您基本上将所有不可重用的或特定于芯片的软件绑定在最低级别,并在其之上构建。你把AUTOSAR放在上面,它大部分时间都在运行。当然,你必须验证它。然后,在AUTOSAR之上,有非常清晰定义的api。 This means you can take applications and re-use them from past programs, or move them onto different ECUs. You can reconfigure the software in the vehicle, and with AUTOSAR Adaptive, it takes it to the next level as more of a service-oriented architecture, where it can basically find the information that it needs. That leads to more updateability.”

结论
随着嵌入式软件和传统软件之间的界限越来越模糊,开发责任也在发生变化。

“传统上,嵌入式开发是OEM或硬件开发商的来源,即硬件生产商,”物联网和嵌入式副总裁Mohamed Awad说手臂.“从历史上看,软件团队和硬件团队会紧密结合在一起,可能在一天结束时向同一位经理报告,共同开发产品。这条界线现在开始变得模糊,我们看到很多云服务提供商或软件服务提供商——无论是机器学习还是其他用例——都希望访问终端上的所有计算,并在向不同数量的硬件设备提供软件方面带来很多价值,而他们不一定能控制这些设备。”

Awad说,为了让这些软件供应商能够在所有硬件的基础上提供价值和创新,必须有一定程度的一致性,这样他们才能实现规模,并证明这些投资是合理的。“对他们来说,为设备开发定制硬件是没有意义的,因为这些设备的出货量可能只有1,000或10,000台,即使他们已经达到了数百万甚至数十亿美元。精简的流程在这里至关重要。这就好比每个手机制造商都必须为自己的手机开发所有应用程序,而他们无法利用现有的应用程序生态系统。最重要的是,这些手机厂商只交付了他们所交付设备数量的一小部分。你可以想象这些生态系统会有多小,它们也不会那么丰富。”

这就解释了为什么半导体生态系统中的许多参与者都在围绕一个通用框架团结起来,这样软件开发人员就可以轻松地从一个设备移植到另一个设备,将软件从一个设备移动到另一个设备,并使设备易于测试,从而最终为软件生态系统创造规模经济。

相关的
嵌入式软件:有时更简单,通常更复杂
依赖关系和分区会把一段简单的代码变成一个复杂的系统难题。
软件更新的隐藏影响
无线代码更改会以意想不到的方式给系统带来压力。
软件定义的汽车
这种方法将简化开发和升级,但也增加了设计的复杂性。



留言回复


(注:此名称将公开显示)

Baidu