主要内容

生成嵌入式代码部署的设计模型

当使用嵌入式编码器时®要为嵌入式系统架构生成代码,设计你的Simulink是很重要的金宝app®从设计过程的一开始就考虑到代码生成的模型。思考相关的设计因素和问题,例如:

应用程序算法和运行时环境

使用Si金宝appmulink来设计代表应用程序算法和运行时环境的模型,您打算从中生成可部署的代码。根据你的应用程序,你可以将代码部署到一个执行环境中,该环境由以下组合组成:

执行环境组件 选择
硬件
  • 开发计算机

  • 快速构建原型的董事会

  • 微处理器

  • 单片机

  • FPGA

  • ASIC

  • 多个

操作系统
  • 通用的

  • 实时

  • 无(裸金属)

调度
  • 单一任务

  • 多任务处理

  • 中断驱动

  • 并发性

  • 操作系统提供

  • 由模型生成

应用算法代码
  • 由模型生成

  • 外部代码

当您设计模型以生成C或c++代码以进行快速原型设计或生产部署时,请记住执行环境。生成满足实现需求并避免潜在设计返工的代码。如上表所示,生成的代码的执行环境可以从相对简单到复杂。例如,一个简单的案例是您从运行在单核微处理器上的单一任务模型生成的代码。复杂用例是由一个模型生成的代码,该模型被划分为在多核微处理器和FPGA上作为分布式系统运行。

生成代码的软件执行框架

应用程序执行环境的一部分是软件执行框架,它负责调度和运行生成的代码。该软件可以预先存在,比如操作系统及其调度程序,或者您可以手动编写软件。复杂度的高低取决于下面哪种建模和代码生成场景的应用:

  • 从单个顶级模型生成代码,该模型表示要在执行环境中运行的算法。

  • 从模型生成代码,它代表整个算法的一部分。您可以将生成的代码与手工编写的代码以及从其他来源或MathWorks版本生成的代码混合在一起®下载188bet金宝搏产品。

单顶模

对于单个顶级模型,软件执行框架负责运行生成的代码,其方式与Simulink模拟模型的方式相同。金宝app生成的代码中的函数是高度协调和优化的,因为Simulink意识到依赖性。金宝app框架只与为顶级模型生成的代码进行接口。为顶级模型生成的代码处理与引用模型块的代码的接口。

考虑下面的示例,其中一个顶级模型映射到运行在单核CPU上的任务。

对于这个系统,您将模型时钟率映射到硬件上运行的任务。您可以为Simulink选择隐式映射速金宝app率,也可以在模型中显式映射它们。您可以根据如何将模型中的速率映射到单任务或多任务执行环境来建模延迟效应。金宝appSimulink根据模型中的速率和任务之间的数据依赖关系正确地调度任务。代码生成器在其生成的代码中实现了相同的依赖项。软件执行框架以基于系统计时器和中断的速率调用生成的入口点函数。生成的代码以与Simulink模拟模型相同的方式执行,并包含专门用于在以不同速率运行的函数之间通信数据的金宝app代码。

多个顶级模型

当您分别从多个顶级模型生成代码并将该代码与通过其他方式获得的代码混合使用时,应用程序的执行环境将承担更多的软件执行框架责任。对于这个建模场景,您将为独立的、原子的可重用组件生成代码。

在这种情况下,Simulink不知道模型金宝app依赖关系。从不同模型生成的代码中的函数进行了最低限度的协调和优化。例如,模型可能共享生成的实用函数。潜在的跨模型边界的优化是不可能的。在设计软件执行框架时,必须考虑到代码单元之间的依赖关系,包括执行顺序。对于需要跨多个核并发执行的应用程序,必须考虑跨核的数据延迟影响。

代码生成器帮助您解决软件执行框架的挑战,例如共享全局数据和避免标识符冲突。为每个模型生成的代码处理引用模型块的接口。

将嵌入式系统架构映射到Simulink建模环境金宝app

在将嵌入式系统架构映射到Simulink建模环境时,要考虑模型设计。金宝app

建模算法 给定初始状态和输入,一组有效地产生您想要的结果的任务或指令。
建模接口 使算法组件能够跨组件边界进行通信和交换信息的机制。
建模系统 实现更高级别、领域特定目标或结果的算法组件的集合。组件经常共享资源。
运行时环境建模 处理系统算法资源调度和执行的框架。

考虑以下关于具有相应建模功能和相关信息链接的嵌入式系统体系结构的问题。使用这些信息作为将您的体系结构细节映射到Simulink建模环境的指南。金宝app在设计模型体系结构时考虑到特定的嵌入式系统体系结构,可以帮助您避免返工和未来的转换和维护成本。

建模算法

结构注意事项 建模方面的考虑 相关信息
系统域是什么? 产品先决条件(基于组件的领域)
系统是否涉及物理领域,如机械、电气或液压领域? 物理系统
您的算法的哪些方面可以用MathWorks产品提供的块表示?下载188bet金宝搏你需要创建什么块? 块的使用、创建和自定义
体系结构是否包含状态机组件? 事件驱动系统

在状态流中建模反应系统(Stateflow)

是否需要对代码生成器从多个模型生成的代码进行标准化? 自定义数据和函数的代码定义

建模接口

结构注意事项 建模方面的考虑 相关信息
  • 在生成的代码中必须表示哪些数据?

  • 您需要如何表示输入和输出—数据类型、维度、复杂性?

  • 算法是使用浮点运算还是定点运算?

  • 数据将如何变化?

数据表示
在哪里以及如何将数据拉入系统以及如何在系统内部拉入数据? 输入
  • 在哪里以及如何将数据推入系统内部和系统外?

  • 需要哪些外部触发器?

输出
  • 您需要为每个组件定义什么函数?

  • 每个入口点函数的原型是什么?

函数和函数调用
为数据和函数的类别设置默认代码生成配置是否会使您受益? 数据与功能配置
您是否需要导出由模型外部的控制逻辑调用的函数? 函数出口
系统是否监视信号或记录数据(例如,用于校准)? C API和ASAP2数据交换接口
您是否需要替换为函数或操作符生成的代码,例如,为特定硬件优化代码? 代码替换
是否需要控制数据或函数在内存中的位置? 记忆的部分
是否有细化和未来考虑的要求? 精化和未来的考虑

建模系统

结构注意事项 建模方面的考虑 相关信息
  • 这个系统的范围是什么?控制器吗?外部环境还是植物?测试工具?

  • 如何将系统划分为算法组件(逻辑块)?

  • 在Simulink中可以表示哪些组件?金宝app

  • 你能设计可重用的组件吗?重用的动机是什么(例如,劳动分工或即插即用)?

组件化
  • 系统的某些方面需要单元测试吗?

  • 一个团队的人在这个项目上合作吗?

  • 你需要保护知识产权吗?

模型参考
您正在建模客户机-服务器体系结构吗? 金宝appSimulink函数和调用器块
是否有相关的遗留代码或定制代码可用? 外部代码集成 外部代码集成
您能应用参考体系结构或参考组件吗? 模型和项目模板
您是否需要导出由模型外部的控制逻辑调用的函数? 导出功能模型 导出-功能模型概述
是否需要将组件的源代码打包为共享对象库以简化分发或共享? 共享对象库(动态链接库) 将生成的代码打包为共享库
你能重用函数吗? 功能重用
  • 组件是否需要共享对全局数据的访问?

  • 在系统中,是否发生了状态变化?在每种情况下,如何传达结果?

  • 是否需要考虑标识符(命名)问题?

共享数据
是否需要控制数据或函数在内存中的位置? 记忆的部分
您是否必须应用AUTOSAR标准?如果是,AUTOSAR的架构涉及哪些方面? AUTOSAR AUTOSAR Blockset
您的系统需要满足其他标准或指导方针吗? 标准及指引 金宝app支持标准和指南

运行时环境建模

结构注意事项 建模方面的考虑 相关信息
  • 您的应用程序需要对运行时接口进行什么级别的控制?

  • 在一个模型中可以表示多少系统?

运行时连接
系统是否被划分为并发组件以最大化并行性?哪些组件? 并发性

多核处理器目标

  • 组件是否由外部时钟驱动?

  • 系统组件使用什么时钟率?

  • 组件使用单一速率还是多个速率?

时钟和时钟频率

定义模型组件的接口

  • 系统中的组件是由时钟驱动的吗?

  • 系统组件使用什么时钟率?

  • 组件使用单一速率还是多个速率?

  • 系统任务和功能的优先级是什么?

基于时间的安排
  • 系统中的组件是否由事件(中断)驱动?

  • 系统任务和功能的优先级是什么?

基于事件的调度
系统是否需要处理初始化、重置或终止事件? 初始化,重置,终止
  • 这个系统是单任务系统还是多任务系统?

  • 组件是否需要实时执行?

  • 组件之间的执行顺序依赖关系(排序)是什么?

  • 任务和函数执行的时间限制是什么?

任务执行
  • 如果您知道处理平台,它是什么?

  • 系统运行在单核还是多核处理器上?

  • 系统是分布式系统吗?

  • 处理平台是混合的还是异构的?

  • 体系结构采用对称还是非对称的多处理?如果是非对称的,平台软件如何跨cpu分区?

处理平台 多核处理器目标
  • 您是否希望生成并运行不需要外部实时内核或操作系统的独立可执行文件?

  • 是否需要实时操作系统(RTOS) ?如果是,什么是RTOS?

内核,操作系统

用于代码生成的模型模板

Embedded Coder提供了一组内置模板,可作为为常用应用程序设计创建模型的起点。使用模板创建预配置的模型,以为嵌入式系统应用程序生成代码。

模板 描述
代码生成系统 基本模型由一个输入块和输出块组成。
导出功能 从函数调用子系统生成代码的模型。通过右键单击一个子系统,选择,可以分别导出每个函数调用子系统C / c++代码>导出功能,然后单击构建
固定步,多重速率的 固定步长模型,使用多种速率,由输入块、输出块和求和块组成。该模型配置为使用固定步长离散求解器,并使用带有模型配置参数的两个速率周期抽样时间限制设置为无约束和参数将每个离散的速率视为一个单独的任务选中。金宝appSimulink插入一个速率转换块来处理两个采样速率。
固定步长,单一速率 固定步长模型,使用单一速率,由import块、Outport块和Sum块组成。该模型配置为使用固定步长离散求解器。

要从模板创建一个模型:

  1. 在MATLAB上®Home选项卡,单击金宝app

  2. 在Simuli金宝appnk开始页面中展开嵌入式编码器

  3. 将鼠标悬停在模板上并单击创建模型.一个使用模板内容和设置的新模型出现在Simulink Editor窗口中。金宝app

有关更多信息,例如创建和使用模板作为参考设计,请参见从一个模型创建一个模板

相关的话题