中文 英语

嵌入式软件:有时更简单,但通常更复杂

依赖关系和分区可以把一段简单的代码变成一个复杂的系统挑战。

受欢迎程度

嵌入式软件,曾经是编写、更新和优化的挑战,现在正在遵循其他类型软件的路线。它是抽象的,使用起来更简单,而且写起来更快。但在某些情况下,也很难做到正确。

从概念层面上看,嵌入式软件的一般定义并没有太大的变化。它仍然是底层驱动程序和rtos,它们运行在硬件附近,本质上是确定性的,对时间和资源非常关键。但围绕该软件的生态系统和用于创建它的方法已经发生了重大变化。

公司产品营销高级经理Kamal Karthikeyan表示:“终端应用程序开发人员可以从硅供应商和第三方获得如此多的工具和API支持瑞萨电子.“这有助于开发人员快速集成他们的应用程序,他们不必担心任何底层硬件细节。他们只需使用工具接口来配置他们打算使用的硬件,并使用软件api来编写他们的应用程序。这有助于大大减少开发工作,并实现更快的上市时间。这意味着嵌入式软件现在的面貌是代码配置器和api。”


图1:在更高的抽象层次上进行权衡。来源:瑞萨

开发人员受益于硬件知识的抽象,从开发到他们甚至不需要使用任何实际硬件进行开发。其中大部分都可以通过虚拟硬件平台完成,并且由此产生的嵌入式应用程序可以比过去轻得多。

“嵌入式软件的底层架构在初始化特定于硬件的模块和启动应用程序入口时仍然遵循相同的流程,”Karthikeyan说。此代码将由硅供应商开发和提供,因此最终用户无需担心这一点。此外,大多数低级嵌入式代码仍在使用汇编或C编程语言。”


图2:嵌入式软件使系统中的各个组件以非常特定的方式运行,但是系统越复杂,需要考虑的依赖关系就越多。

因此,虽然嵌入式软件在终端用户应用程序中正在发生变化,但由硅公司开发的底层嵌入式软件并没有发生太大变化。

的首席执行官Simon Davidmann说:“随着软件和跨平台重用设计的日益复杂,标准的额外抽象层对开发人员非常有用治之软件.例如Arm公司的CMSIS(通用微控制器软件接口标准)和SiFive公司的Freedom Metal。抽象是很好的方法,也是一种有用的方法,但是挑战在于分析和正确地看待任务的上下文,比如在新平台上引导第一个操作系统的操作系统驱动程序、固件或应用程序开发。特定的验证、分析和分析工具扩展了传统的调试解决方案,以涵盖重要的抽象上下文。任何启动OS或RTOS的处理器都可能有大量的进程和软件线程,因此开发人员需要选择上下文,从低级事件、硬件交互和指令流一直到OS函数调用到应用层。对于嵌入式开发人员来说,细节很重要,所以你需要能够很好地覆盖抽象的正确工具。”

基于处理器ISA的指令精确模型的虚拟平台允许对处理器到外设的交互进行内省,或者在大多数多核、多线程或异构处理器中,可以对核心之间的交互进行内省——特别是围绕异步事件。

“通过某些软件模拟和分析工具,分析工具是虚拟平台之下的抽象,不需要对操作系统或软件进行任何修改,”Davidmann解释道。“这在高可靠性或安全应用程序中工作得非常好,因为生产二进制文件无需修改就可以使用,并且不知道它是否运行在物理硬件上。抽象是一种有用的方法,但是开发人员需要能够在上下文中进行分析的工具。这样的工具允许用户在不同的抽象层上工作和调试,包括从硬件抽象层到完全支持操作系统的工具。高效软件开发的关键是在适当的抽象级别上工作,而使用虚拟原型的软件解决方案可以实现这一点。”

这对于试图决定芯片和系统架构的工程团队具有重要意义。

约翰内斯·斯塔尔,产品营销高级总监Synopsys对此他指出,在一个例子中,显示出能够以最佳方式执行特定边缘应用程序的公司赢得了这笔交易。“他们是怎么做到的?”他们从终端客户那里获得应用程序。他们在模拟磁带录制之前运行所有应用程序,以确定他们的体系结构实际上以尽可能好的方式支持软件,并消耗最少的电力。你必须在硅之前做这个,因为如果你不做,风险太大了。此外,它必须在硅之前完成,因为如果你是一家初创公司,你想赢得一个插座,你不能等到有了硅。你必须在此之前完成这项工作,然后,当然,跟进并显示有工作的硅,所以现在他们可以触摸它了。”

Stahl说,与此相关的另一个方面是对运行在新架构上的软件进行功能验证。“这对录音来说很重要,但这已经不够了。如今,该领域的所有客户都在此基础上增加了两个方面。一个是测量性能,比如使用该软件工作负载通过架构的周期有多少。其次是权力。同时衡量性能和性能以及功能的正确性是至关重要的,只有功能、性能和性能这三者才能给他们提供基本的标准,并说,‘我有一个可行的架构,它实际上符合我的软件应用程序的需求。’”

随着芯片越来越多样化,子系统越来越多,仿真和虚拟原型尤为重要。其中一些功能用于更多的应用级软件,而芯片的其他部分则使用实时软件。但是,即使这是一个嵌入式设备,除了实时组件之外,它可能在芯片的一部分上具有与桌面设备或服务器设备相同的处理能力。

Dan Driscoll,高级工程师西门子嵌入式解决方案他指出,随着复杂性的增加,对嵌入式工程技能集的需求也在增加。“它们仍然是必需的,即使有更多的处理过程没有进入深度嵌入的空间。在工程方面,仍然有足够多的领域需要这些技能。”

抽象帮助

利用这些技能加上更高级别的抽象,在“嵌入式空间”的芯片上运行比过去复杂得多的软件是可能的。

Driscoll说:“随着新的架构变得越来越复杂,有更多的处理元素,更深入的管道,三到四层缓存,以及多个具有交互能力的子系统,这就需要对整个系统有更深入的理解。”“这是一个在哪里放置什么以及如何利用整体硬件获得最高效率的问题。这是同样的问题,曾经存在于深度嵌入的空间,但现在它比过去更复杂。为了最大限度地利用这些芯片,仍然非常需要专业知识,归根结底就是这样。这是如何最有效地优化这些复杂芯片的使用,特别是在有严格的实时要求或需要实时操作系统或类似的截止日期的情况下。”

在当今的许多系统中,所有这些都需要协同工作。功能需要优化,但它也需要成为整体架构分区的一部分。

西门子嵌入式解决方案总经理Scot Morrison表示:“以车辆的分区架构为例,你可以在微控制器或SoC上进行分区,以确定哪些场景可以使用该SoC,并且在SoC的某个部分中不运行硬实时或甚至安全认证的代码。”“然后你可能会有一个通用操作系统——甚至是对它要求不那么严格或相对宽松的Linux——在同一芯片上运行尽力而为类型的执行,其中的项目绝对必须运行。这使得它更像是一个系统问题当你开始谈论设计可以在汽车不同位置运行的功能时,例如,你甚至不知道在你做高级设计的时候它们会在汽车的什么位置运行。然后这个问题就变成了系统架构的设计问题。”

因此,虽然实时编程本身变得越来越容易,但它会在应用程序级别上增加约束。Tensilica IP at的技术和战略营销集团总监Pierre-Xavier Thomas表示:“通常情况下,嵌入式系统将实时工作,并且必须实时做事,这意味着延迟非常重要。节奏.“设备需要有一个明确的响应时间,而不是像PC那样能够做任何事情或任何应用程序。但你不一定知道它是否总是在相同的时间内完成。在嵌入式系统中,所花费的时间以及嵌入式系统在实时系统方面所做的事情是非常重要的。很多挑战都是关于如何创建架构,以便能够实时完成所需的所有功能,并使用正确的架构实现能源效率目标。”

这可以帮助确定哪些可以在硬件中完成,哪些可以在软件中完成。托马斯说:“对于特定的任务,硬件通常更节能,但灵活性较差。”“它还可能需要更大的面积。如果你想增加一些功能,然后在硬件上实现,因为硬件不够灵活,你就需要在芯片上添加更多的块来实现。这就带来了更高的漏电功率,而且你的模具价格也更高。这些只是工程团队为了实现他们的系统所面临的一些权衡。”

权衡的问题
然而,在开发的某个阶段,工程团队不可避免地要权衡是否重写需要定制和优化的东西。当涉及到性能和功率优化时尤其如此。

“这是你可以改变方向的地方,”该公司首席营销官鲁珀特•贝恩斯(Rupert Baines)表示Codasip.“如果你使用现成的标准处理器,它可以在80%的时间里为80%的人完成80%的工作,这可能就足够了。当你开始着手一个预算更大、野心更大、任务更复杂的项目时,80%的工作都不够好。这时,您决定必须做一些特定的事情,而不是使用标准库。‘我们要自己写一些代码来做一些具体的事情。’”

与大多数设计一样,应用程序和用例很重要。“下一步将是,‘我们不会使用标准处理器,”贝恩斯说。“我们将修改硬件,我们将进行硬件-软件协整。这是高端市场的情况,而苹果多年来在智能手机领域一直是这样做的。这是他们过去几年在M1系列上所做的,他们设计了他们的处理器,实际的代码,以适应他们正在运行的应用程序。GPU,神经网络,操作系统加速器都紧密耦合在软件和硬件之间。我们在嵌入式领域经常看到这种情况。围绕协处理器、加速器、领域特定硬件、异构计算有很多应用程序,其中有一种非常容易理解的方法。它很难实现,因为您不一定有能力对处理器进行更改。但像RISC-V这样的技术让这变得越来越可能。”

相关的
嵌入式软件的巨大变化
集成和重用正在将重点从最小占用转移到可重用性和灵活性。
软件更新的隐藏影响
无线代码更改会以意想不到的方式给系统带来压力。
软件定义的汽车
这种方法将简化开发和升级,但也增加了设计的复杂性。



留下回复


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

Baidu