主要内容

快速原型开发的设计模型

使用时金宝app®编码器™为了生成快速原型的代码,从设计过程的一开始就考虑代码生成,这一点很重要。金宝app

应用算法和运行时环境

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

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

  • 快速构建原型的董事会

  • 微处理器

  • 单片机

  • FPGA.

  • ASIC.

  • 单身的

  • 多种的

操作系统
  • 通用的

  • 实时

  • 没有(裸露的金属)

调度
  • 单一任务

  • 多任务处理

  • 中断驱动

  • 并发性

  • 由操作系统提供

  • 从模型生成

应用程序算法代码
  • 从模型生成

  • 外部代码

在设计模型以生成用于快速原型或生产部署的C或c++代码时,请记住执行环境。生成满足实现需求的代码,避免潜在的设计返工。如上表所示,您生成的代码的执行环境可能比较简单,也可能比较复杂。例如,一个简单的例子是您从运行在单核微处理器上的单一、单一任务模型生成的代码。一个复杂的情况是,在多核微处理器和FPGA上作为分布式系统运行的模型生成代码。

生成代码的软件执行框架

应用程序执行环境的一部分是软件执行框架,它负责调度和运行生成的代码。软件可以预先存在,就像操作系统和它的调度程序一样,或者你可以手工编写软件代码。复杂程度取决于下列哪个建模和代码生成场景:

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

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

单一的顶级模特

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

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

对于此系统,您将模型时钟速率映射到在硬件上运行的任务。您可以选择Simulink隐含地映射速金宝app率,或者您可以在模型中明确映射它们。您可以通过如何将模型中的速率映射到单任务或多任务执行环境中的延迟效应延迟效应。金宝appSimulink根据模型中的速率和任务之间的数据依赖性的速率正确调度任务。代码生成器在它生成的代码中实现相同的依赖项。软件执行框架根据系统定时器和中断调用生成的入口点函数。生成的代码以同样的方式执行Simulink模拟模型,并包含专用于以不同速率运行的函数之间传送数据的代码。金宝app

多个顶级模型

当您单独生成来自多个顶级模型的代码并将该代码与以其他方式获取的代码混合,应用程序的执行环境带领更软件执行框架责任。对于此建模方案,您将为独立的原子可重用组件生成代码。

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

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

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

在为快速原型开发设计模型时,请考虑这些设计因素。

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

考虑以下关于建模功能的问题。在设计模型时,使用问题中列出的信息作为指导。在设计模型时考虑到特定的运行时执行环境可以帮助您避免返工以及将来的转换和维护成本。

建模算法

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

型号流的模型反应系统(Stateflow)

建模界面

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

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

  • 数据如何变化?

数据表示
在哪里以及如何将数据拉入系统并在系统内拉入? 输入

信号加载技术比较

  • 数据在系统内推出的在哪里以及如何从系统中推出?

  • 需要哪些外部触发器?

输出
  • 您需要为每个组件定义哪些功能?

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

函数和函数调用

配置模型入口点函数的C代码生成

您是否需要导出由模型外部的控制逻辑调用的函数? 函数出口
系统监控信号或日志数据(例如,用于校准)吗? C API和ASAP2数据交换接口
例如,您是否需要替换为函数或运算符生成的代码,以优化特定硬件的代码? 代码替换
是否有细化和未来考虑的要求? 阐述和未来的考虑

定义模型组件的接口

建模系统

结构注意事项 建模方面的考虑 相关信息
  • 系统的范围是多少?控制器?外部环境或植物?测试线束?

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

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

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

组件化
  • 系统的各个方面是否需要单元测试?

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

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

模型参考
您是在对客户机-服务器体系结构建模吗? 金宝appSimulink函数和呼叫者块
相关的遗留代码或自定义代码可用吗? 外部代码集成 什么是外部代码集成?(嵌入式编码)
您可以应用参考架构或参考组件吗? 模型和项目模板
你能重用函数吗? 功能重用
  • 组件是否需要共享对全局数据的访问?

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

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

共享数据

模型运行时环境

结构注意事项 建模方面的考虑 相关信息
  • 您的申请需要对运行时接口的控制级别如何?

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

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

多核处理器的目标

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

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

  • 组件使用单一速率或多个速率吗?

时钟和时钟速率

定义模型组件的接口

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

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

  • 组件使用单一速率或多个速率吗?

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

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

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

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

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

  • 组件之间的执行顺序依赖性(测序)是什么?

  • 任务和函数执行的时间约束是什么?

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

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

  • 系统是分布式系统吗?

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

  • 该体系结构采用对称或不对称多处理吗?如果不对称,平台软件如何跨CPU分区?

加工平台 多核处理器的目标

用于代码生成的模型模板

嵌入式编码器®提供一组内置模板,作为创建通用应用程序设计模型的起点。使用模板创建预先配置为嵌入式系统应用程序生成代码的模型。

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

从模板创建模型:

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

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

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

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

相关话题