0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

MATLAB 来源:djl 2019-09-12 15:43 次阅读

模型质量目标(Model Quality Objectives,以下简称 MQO)的标准是由一流的汽车厂商MathWorks 公司共同制定,目的是当在嵌入式软件开发中 OEM 和供应商进行 Simulink 模型共享时,可以清晰定义并简化双方的协作,并最终提高软件产品的质量和完整性。

首先,基于软件开发生命周期的四个不同阶段用到的四种设计模型,本文定义了一套软件开发方法。然后,针对每种模型,提出了一个名为 MQO 的特定质量目标。每个目标被定义为一组质量特征和一些可衡量的标准,称为模型质量要求(Model Quality Requirement,MQR)。此外还提供了一些额外的规范,来管理与 MQO 和 MQR 相关的计划和质量评估活动。在文章最后也对汽车工业采用 MQO 的预期影响进行了总结。

为什么制定模型质量目标

为了加速嵌入式软件的开发,用 Simulink 软件开发的设计模型在业界广泛使用。这些模型使工程师能够完成各种工程任务,如频域分析、桌面仿真、形式验证和自动代码生成。这个开发过程被称为基于模型设计。

出于验证需求和快速地探索设计方案的目的,可以在非常早期的阶段开发设计模型。这些模型也可以逐步改进,直到它们达到一定成熟度,可生成符合国际软件安全标准的代码。为了逐步增加设计模型的成熟度,需要涉及到系统工程、控制工程和软件工程等不同的工程学科。使用相同的语言、工具和模型进行协作,是提高工程师之间的沟通、降低工程费用和缩短开发时间的好方法。然而,由于在不同的项目阶段使用设计模型有不同的规程,可能会出现关于模型的作用和它们代表的内容间的混乱。

对模型代表的内容的错误解释会导致错误地使用这些模型,并最终影响所产生的软件的质量。参与制定 MQO 的 OEM 和一级供应商分享了许多关于成熟度不够或存在漏洞的模型被过早地确定为“可用于编码”的惨痛案例。

因此,有可能出现超出计划的开发人力投入、问题、与职责相关的争论等。为避免这种情况,文章旨在阐明设计模型在嵌入式软件开发中的作用,并规范可测量的标准,以验证其质量。

这种方法的灵感来自于2010 年由一些汽车厂商和 MathWorks 定义的软件质量目标(Software Quality Objectives,SQO)[1],当时汽车制造商和供应商之间的大多数交流都是基于文本规范和手工代码。在以下方面,这种方法还可更进一步:模型共享的规范化,于 2014 年由 Bosch [2]所定义;ISO 26262-6 等软件安全标准所推荐的技术与措施的实现 [3]。

制定模型质量目标的目的是:

为软件开发定义设计模型的主要用例

根据它们的用例,定义评估模型质量的标准和通用方法

软件开发和模型设计

文章定义了一种基于四类设计模型的开发方法,这些设计模型支持 V 流程的左侧。

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

图 1:基于模型设计/MQO 软件生命周期

基于模型设计/MQO 的软件开发生命周期包含五个具体阶段,见图 1 中标示的 1 到 5。后面也将讲述有关阶段的更多细节。

图 2 列出了基于模型设计/MQO 的软件开发生命周期与业界其它软件开发生命周期的映射关系。设计模型所支持的阶段已用黑色背景突出显示,基于模型设计(Model-Based Design,简称为 MBD)。

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

图 2:基于模型设计/MQO 的软件阶段与其他工业标准的对照[3][4][5][6]

软件计划阶段

本节定义了在准备使用设计模型前必须执行的计划活动。这些活动在使用功能模型时是推荐的,在使用架构、组件设计和组件实现模型时是强制要求的。这些概念中的大多数已经在诸如 DO-331[5]之类的安全标准中得到贯彻。

范围定义:不是所有的设计模型都适用于所有的项目。例如,基于模型设计的范围可以简化为单个软件组件的开发,或者只被用于支持软件架构设计规范。项目应定义设计模型所支持的软件开发阶段。在所属的软件开发阶段,每个设计模型都应该作为其所属阶段的工作产品被独立管理。

工具定义:在项目开始时,支持设计模型的开发和验证的工具应该被鉴别和分类。如果项目要求,这些工具应是合格的。

标准定义:在进入软件架构阶段之前,应该定义用于支持设计模型开发的建模标准。在进入软件组件实现阶段之前,应该定义用于支持设计模型开发的编码标准,或者最好在进入软件组件设计阶段之前定义。

MQR 识别和分配:在项目开始时,项目相关方应识别并同意 MQR。一些 MQR 应该随项目需求(例如,模型和代码覆盖度准则)而调整。每个 MQR 都将被分配给项目相关方。

MQR 的实现策略:一旦为项目定义了 MQR,就应该定义实现这些目标的策略。策略可以包括与项目里程碑对应的中间步骤,特定培训,或工具迁移流程。例如,建议逐步提高覆盖度标准;不要等有了软件的最终版本,再执行大部分的测试开发工作。

MQR 一致性证明:在项目结束时,应该规划并证明项目 MQR 的一致性。对每个 MQR 的验证都应提供报告,这些报告由负责 MQR 的项目相关方提交。当不满足 MQR 时,必须提供充分的理由(例如,覆盖度未达标需要被证明是合理的)。负责合规评估的人应当具备理解这些理由的必要技能。

软件需求阶段

本节重点介绍软件需求阶段开发的功能模型。功能模型的作用是澄清和细化复杂的动态行为,这些行为将被转化为软件需求。

在大多数情况下,功能模型和软件需求由负责软件需求的人同时开发。功能模型工程师帮助固化软件需求(what),而在鉴别好的设计方案(how)方面则有待在设计和实现阶段进一步精细化。功能模型通常被称为可执行规范,因为它提供了满足功能需求的功能行为。然而,功能模型并不能取代软件功能需求。功能模型用于软件需求的验证活动。

功能模型侧重于算法和方程的正确性,它不必考虑与嵌入式软件开发相关的设计约束。然而在开发功能模型时,应该预测硬件平台的主要特征及其对软件需求的影响。

如果软件功能需求易于实现,则可能不需要功能模型,也无需在功能模型中表达全部功能需求。图 3 展示了一个连续时间功能模型的例子,它实现了大型软件中的一个小功能。

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

图3:功能模型的例子(防抱死系统)

软件架构设计阶段

本节重点介绍软件架构设计阶段开发的架构模型。架构模型用于软件体系结构设计规范。

图形符号天然适合定义组件组织结构、表述接口和连接、说明组件的调度。对于复杂的架构,如果没有合适的建模语言,或者是像 Simulink 这样的计算机辅助设计工具,要开发这样的图是无法想象的。

架构模型完全确定了静态软件架构设计(如,组件模型、接口),向将要构建或者已构建好的组件设计模型提供了链接/参考。架构设计模型与数据字典关联,该字典定义了软件及其组件的数据和接口。

架构模型直接用于设计活动,因此要符合行业质量标准、安全标准,及/或架构标准(如,对需求的可追溯性,与架构标准的兼容性。)

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

图4 架构模型的例子

软件组件设计和测试阶段

本节重点介绍组件设计模型,这些模型是在软件组件设计和测试阶段产生的。组件设计模型的作用是:提供软件组件设计的完整规范,并支持其动态验证和静态分析验证。

使用高级建模和编程语言可以更好地管理复杂的算法,并减少设计错误的可能性。由于支持仿真和静态分析,它有助于消除设计错误。

组件设计模型完全确定了算法和方程式——这将是嵌入式软件的一部分,并且排除了用于调试或原型设计的任何元素,例如测量点或重载机制。每个组件设计模型都与一个数据字典相关联,它定义了模型的接口、参数和监测信号

组件模型直接用于开发活动,因此需符合行业质量标准、安全标准,及/或设计标准(如,符合建模规范,对需求的可追溯性。)

图 5 展示了一个组件设计模型的例子,它具有完整定义的接口和用状态机实现的子功能。

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

图 5:组件设计模型的例子

软件组件实现和测试阶段

本节重点介绍组件实现模型,这些模型是在软件组件设计和测试阶段产生的。组件实现模型的作用是:为特定的嵌入式目标和基本软件生成产品代码。

组件实现模型完全确定了软件组件的实现。实现细节被添加到数据字典中,以细化如何在目标内存中表征参数和信号。定义代码配置项和定制项,用于将生成的代码与特定的基本软件功能集成在一起,以便它们与目标的特征(例如字节顺序)匹配,并满足针对该软件组件的代码内存占用和执行性能方面的要求。

组件实现模型生成的代码直接用于开发活动,因此要符合行业质量标准和安全标准、及/或编码标准(如,MISRA C)。每个组件实现模型都与一个定义其接口参数和监视信号的数据字典相关联。

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

图 6:组件实现模型的代码生成配置的例子

设计模型间的关系

每个设计模型都应该在其所属的软件开发阶段,作为工作产品单独进行管理。与此同时,设计模型可以共享设计信息,并保持一致。例如,图 5 中的组件设计模型与图 4 的架构模型共享接口定义。任何需要一致性的时候,都应该鼓励重用。

图 7 显示了在设计模型间哪些方面可以重用(“reuse” 箭头),它还提供了关于设计模型的哪些方面可以被部分重用(“refine” 箭头)的指导,以加速开发。图 7 中的箭头可以应用于设计模型的以下建模方面:

架构方面:接口、调度、分块、组件间的控制和数据流等

算法方面:数学计算、组件控制和数据流、状态机、真值表等

代码生成方面:内存管理、数据访问、函数原型、代码优化等

因上述方面的成熟度级别和重要性不同,设计模型也各不相同。基于以下定义和描述,图 7 展示了成熟度和重要性的级别:

成熟度:高(产品)/ 低(原型)

重要性:强制(实线)/ 建议(虚线)

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

图 7:设计模型间的关系及对原型开发和产品开发的作用

功能模型应该有结构化的算法,用于通过建模和仿真来对软件需求进行验证。用于快速原型的模型代码生成配置,对在实时环境下验证软件需求非常有用。开发的重点应该放在软件需求上(没有在图上表示出来)。整个模型应被视为原型。

架构模型应定义软件架构中的组件接口和调度。功能模型的架构设计可以作为启动产品软件架构开发的基线(1a)。功能模型的原型算法可以移植到架构模型,以便在仿真中对模型进行早期动态验证,以评估架构对功能行为的影响(2a)。

可以创建软件架构标准(如 AUTOSAR)的原型代码生成配置,从而在早期验证实时环境和软硬件集成(例如 AUTOSAR RTE)对功能行为的影响。

组件设计模型应对软件组件的结构、调度和算法进行充分设计定义。模型的接口应该与架构模型(1b)一致,并且可以从架构模型中重用。为功能模型开发的原型算法,可以作为定义产品算法(2b)的基线。原型代码生成配置可以用于早期验证,发现设计模型对生成代码的深层次影响(例如,符合编码标准,代码覆盖率与模型覆盖率的级别,代码扩展)。

组件实现模型应该定义软件组件的设计和实现。结构、调度和算法应该从软件组件设计模型(1c、2c)中重用。算法的实现方式能随非功能性需求(例如优化、安全)而调整。代码生成配置将用于产品代码生成,并与软件编码标准和目标硬件兼容。

设计模型的质量

由于设计模型对于采用基于模型设计的软件开发非常关键,其质量必须仔细评估。设计模型可以自动转换为其他设计形式,如文档、源代码或可执行文件。因此,设计模型定义的质量目标应能影响模型本身及其派生产品。各种类型的设计模型各有其特定的质量目标以对应其特定的角色。

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

表格 1:设计模型的模型质量目标

表格 2 提供了适用于达到各种类型设计模型的质量目标的模型质量要求。

关于MATLAB和Simulink开发嵌入式软件的步骤和详细内容

表格 2:模型质量目标的模型质量要求概览

M:强制

R:推荐(对于早期验证)

注:在 DO-331 中需要附加额外从模型到源代码验证的模型质量要求。

表格 2 中所有模型质量要求的详细说明

本文论述了 Simulink 设计模型如何从软件需求规范到软件实施以加速开发和验证活动。介绍了四种服务于特定目的的设计模型类型,每种类型均有特定的质量目标以控制其合适的使用。每个质量目标均为一组带满意度量化标准的可度量指标,以便于促进和规范模型质量评估。

应用本文所述概念的组织将能体验到以下好处:

在组织内部共享基于模型设计的理解

应用合格的模型于基于模型设计项目,且符合行业软件质量和安全规范

在项目不同阶段评估模型质量

与合作伙伴协同实施基于模型设计的组织在应用本文所述概念时将能体验到以下好处:

在项目初期厘清各方责任

达成对模型质量的同等理解

交换模型时达成对模型质量的同等期望

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5086

    文章

    19142

    浏览量

    305987
  • 数据
    +关注

    关注

    8

    文章

    7076

    浏览量

    89153
  • 源代码
    +关注

    关注

    96

    文章

    2945

    浏览量

    66793
收藏 人收藏

    评论

    相关推荐

    嵌入式系统开发中的测试方法 嵌入式系统开发与AI结合应用

    嵌入式系统开发中的测试方法 嵌入式系统开发是一个复杂的过程,涉及到硬件和软件的紧密结合。测试是确保系统可靠性和性能的关键
    的头像 发表于 12-09 10:22 392次阅读

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    嵌入式系统开发与硬件的关系 嵌入式系统是专为特定应用设计的计算机系统,它们通常嵌入在所控制的设备中。这些系统的关键特点是它们与硬件的紧密集成,这意味着
    的头像 发表于 12-09 09:38 295次阅读

    【「嵌入式系统设计与实现」阅读体验】全书概览与内容简介

    代码链接,想要研究代码的话可能需要额外花时间去网上寻找相关资源。 阅读感受 总体来说,《嵌入式系统设计与实现》内容丰富、覆盖面广,为嵌入式学者提供了绝佳的学习和参考机会。特别是其案例的多样性和
    发表于 12-01 17:05

    一文了解嵌入式软件开发的对象

    以前应用场景很单一,嵌入式开发可能谈不上面向对象开发。但现在,做嵌入式开发,没有面向对象开发,你就有点落伍了。 本文结合个人经验和周立功《抽象接口技术和组件
    的头像 发表于 11-15 10:31 372次阅读
    一文了解<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>的对象

    嵌入式linux开发的基本步骤有哪些?

    嵌入式Linux开发是一个复杂的过程,涉及到硬件选择、操作系统移植、驱动开发、应用程序开发等多个方面。以下是嵌入式Linux
    的头像 发表于 09-02 09:11 530次阅读

    嵌入式linux开发板芯片的工作原理

    了处理器、存储器、输入/输出接口等硬件资源的嵌入式系统开发平台。它通常采用Linux操作系统作为底层软件平台,提供了丰富的开发工具和库函数,方便开发
    的头像 发表于 09-02 09:07 410次阅读

    嵌入式软件开发与AI整合

    嵌入式软件开发与AI整合是当前技术发展的重要趋势之一。随着人工智能技术的快速发展,嵌入式系统越来越多地集成了AI算法,以实现更复杂的智能功能。以下是关于
    的头像 发表于 07-31 09:25 733次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>与AI整合

    嵌入式软件开发招聘

    本帖最后由 jf_19082533 于 2024-7-26 13:56 编辑 寻求:嵌入式软件工程师 要求:3年以上开发经验,音视频领域应用层开发 地址:北京市昌平区 邮箱:10
    发表于 07-26 13:44

    嵌入式开发前景怎么样?

    嵌入式开发前景非常广阔,这主要得益于物联网、人工智能、大数据等技术的快速发展,以及嵌入式系统在各个领域的广泛应用。以下是对嵌入式开发前景的详细分析
    的头像 发表于 07-10 09:00 2760次阅读
    <b class='flag-5'>嵌入式开发</b>前景怎么样?

    嵌入式开发者的未来

    和测试这些产品的硬件和软件。汽车行业:现代汽车包含大量的嵌入式系统,例如车载娱乐系统、发动机控制单元、自动驾驶系统等。在这个领域,工程师可以从事嵌入式软件开发、系统集
    的头像 发表于 06-23 08:10 386次阅读
    <b class='flag-5'>嵌入式开发</b>者的未来

    AMD Vitis™ Embedded嵌入式软件开发套件的功能和特性概述

    Vitis Embedded 是一款独立的嵌入式软件开发套件,主要用于为 AMD 自适应 SoC 和 FPGA 中的 AMD 嵌入式处理子系统(基于 ARM 的子系统和 AMD MicroBlaze)
    的头像 发表于 04-08 10:50 940次阅读
    AMD Vitis™ Embedded<b class='flag-5'>嵌入式</b><b class='flag-5'>软件开发</b>套件的功能和特性概述

    嵌入式软件设计的原则分享

    嵌入式软件开发如果具有更好的阅读性、扩展性以及维护性,就需要考虑很多因素。今天给大家分享几个嵌入式软件设计的原则。
    发表于 02-25 10:54 710次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>设计的原则分享

    嵌入式软件开发应该掌握哪些知识?

    嵌入式软件开发应该掌握哪些知识? 一、 什么是嵌入式软件嵌入式软件通常是指
    发表于 02-19 11:23

    嵌入式学习步骤

    开发嵌入式学习步骤总结如下: (1).确定目标平台:选择适合您要开发嵌入式系统的硬件平台。这取决于您要控制的设备以及您需要执行的任务。
    发表于 02-02 15:24

    嵌入式软件开发软件开发的区别

    嵌入式软件开发软件开发是两个不同的概念,它们在一些关键方面有着明显的区别。嵌入式软件开发是指开发
    的头像 发表于 01-22 15:27 2335次阅读