文档

选择外部代码集成工作流

完成这些任务可以帮助您选择与项目一致的外部代码集成工作流和工具。

任务 行动 更多的信息
1 划分应用程序,将算法映射到组件,并确定集成点。 生成嵌入式代码部署的设计模型
2 确定是否可以依赖于代码生成器生成的调度代码,或者是否必须将生成的代码与特定于运行时环境的调度机制集成在一起。 选择一个软件执行框架来安排代码执行
3. 评估正在导入或导出生成代码的外部代码的特征。 评估外部代码的特性
4 确定集成需求,这有助于为您的集成选择最佳工具。 识别集成需求
5 根据任务1-4的结果,选择一个工作流。 选择工作流程

选择一个软件执行框架来安排代码执行

代码生成器支持两种类型的软件执行框架—金宝app单个顶级模型和多个顶级模型,如生成嵌入式代码部署的设计模型。要回答的第一个问题是两个框架中哪一个满足项目的调度和其他需求。例如,您可以将外部代码导入到单个基于速率的顶级模型中。您可以从单个顶级模型或多个顶级模型导出代码,以便与自定义(外部)调度机制集成。

  • 单顶模型

    生成一组应用程序代码文件从外部代码和代码的Simulink金宝app®C/ c++代码生成器生成。生成的代码包括一个调度器。在这种情况下,你进口代码导入到Simulink代金宝app码生成环境中。

  • 单个顶级模型或多个顶级模型

    将代码生成器从模型组件生成的C或c++代码与外部应用程序代码和外部调度程序集成在一起。你出口从Simulink代码生成环境生成代码。金宝app

将对外部设备驱动程序代码的调用导入到模型中,并为该模型生成用于导出的代码,包括导入和导出代码。

基于目标和需求,外部代码集成有几个特点,需要不同的工作流程和集成工具:

  • 将现有的外部代码导入生成的代码。

    • 调用可重用的外部算法代码进行仿真和代码生成。

    • 将外部C/ c++代码放入生成的代码中。

    • 调用外部设备驱动程序。

    • 应用函数和操作符代码替换。

    • 接口与外部定时器中断或调度程序。

    • 为特定的运行时环境生成替换代码。

  • 导出生成的代码以包含在外部代码库中。

    • 生成用于导出的组件源代码。

    • 生成用于导出的共享库。

接下来,看到评估外部代码的特性

评估外部代码的特性

在选择外部集成工作流之前,评估外部代码的这些特征。为了与外部代码接口,生成的C或c++代码处理一个或多个外部代码特征。了解这些特征以及您对建模、仿真和代码生成的需求有助于您为集成场景选择最佳工作流。(见识别集成需求。)

特征 要考虑什么
硬件的依赖

外部代码是否依赖于硬件?实用程序函数、查找表和过滤器都是与硬件无关的代码的示例。

设备驱动程序直接与硬件交互。它们取决于硬件的特性。例如,模数转换器的设备驱动程序初始化、从硬件寄存器读取数据并将数据写入硬件寄存器。硬件差异和依赖关系涉及数据类型大小、端序、移位操作、编译器指令以及优化的函数和操作符支持。金宝app其他代码通过使用API和映射到特定内存地址的数据与设备驱动程序进行接口。通常,在开发计算机上进行模拟是不可能的。在开发计算机的模拟过程中,对寄存器的读写会产生意想不到的和不想要的结果。

可重用的 外部代码是可重用的软件模块吗?示例包括实用函数、查找表、过滤器、专用积分器和比例-积分-导数(PID)控制模块。
函数调用之间对数据持久性的依赖 外部代码需要持久化数据吗?例如,对一阶过滤器函数的调用使用前一次调用该函数的输出来计算新的输出值。您可以选择将数据定义为全局数据或在函数上下文之外使用共享内存。
数据类型和接口 外部代码使用的数据有多复杂?数据接口是什么样子的?它由参数、返回值、全局变量和访问函数组成。代码使用什么数据类型?这些类型是否仅限于基本的ANSI C整数、浮点类型、整数或浮点类型的数组,以及指向这些类型的指针?接口是否包含结构体或指向结构体的指针?
定点代码 外部代码是否设计为在纯整数处理器上运行?如果是,代码只交换和使用表示为整数的数据。数据可以与定点缩放或偏移量相关联。
外部资源依赖 外部代码是否使用在代码范围之外定义的数据、函数或宏?例如,该函数可以使用标准ANSI函数、共享库或预定义常量。在这些情况下,您必须告知编译器和链接器外部资源的路径和文件名。
需要外部求解器 您是否使用外部函数进行高级开发或快速原型来描述具有连续传递函数或一组微分方程的系统?如果是,则外部代码依赖于外部求解器。

接下来,看到识别集成需求

识别集成需求

在选择外部集成工作流之前,请查看这些集成需求。了解这些需求和外部代码的特征可以帮助您为集成场景选择最佳的工作流。(见评估外部代码的特性。)

要求 要考虑什么
努力 为集成项目计划了什么级别的工作——低、中等还是高?
学习努力 分配项目资源的编程经验是什么?分配的资源有多少使用Simulink和MathWorks的经验金宝app®C/ c++代码生成产品?下载188bet金宝搏
模拟和代码生成行为 你想利用基于模型的设计吗?为了充分利用基于模型的设计,将代码转换为建模元素,然后可以在Simulink和Stateflow中使用金宝app®仿真环境。然后,模拟并生成集成组件的代码。使用软件在环(SIL)或处理器在环(PIL)测试来验证两种环境中的算法行为是否相同。
数据接口和输入
  • 您的模型或生成的代码是否需要与外部函数交换数据?如果是,将输入、输出和参数映射到外部函数接口。典型的函数接口包括函数参数和返回值、全局变量和访问函数,例如getRPM

  • 要表示数组、结构还是枚举类型?在Simuli金宝appnk环境中,您可以将这些类型表示为向量、总线和IntEnum,分别。

  • 是否需要定点支持?金宝app如果使用Simulink定点接金宝app口,则可以缩放和指定偏移量。

  • 外部代码是否使用公司特定的数据类型?如果是,你有嵌入式编码器®软件,创建别名类型来表示那些外部类型。代码生成器在其生成的代码中使用别名类型。例如,一旦定义,您就可以在函数原型、临时变量或块输出中指定别名类型。

  • 代码是否与共享内存交换数据?如果是,定义并使用内存段。

直接函数调用 你想调用C外部代码直接从一个模型?您可以从一些机制中进行选择,例如遗留代码工具、Stateflow外部代码接口和图表操作语言,以及MATLAB®功能块。
将外部代码插入生成的代码中 是否要控制外部代码在生成代码中的位置?是否要将代码插入生成的入口点函数中?您可以使用模型配置参数或自定义代码块将代码放置在生成的代码中。
代码生成优化支持金宝app 是否要优化代码生成器生成的代码?如果是这样,您可以为代码生成器配置模型,以根据应用程序目标(如执行、ROM和RAM效率)优化它生成的代码。您还可以选择使用代码替换库。
文件要求 您想要最小化维护的文件数量吗?一些外部代码集成工具要求您维护单独的文件来定义模拟和代码生成。

接下来,看到选择工作流程

选择工作流程

要为每个集成点选择工作流,请使用以下流程图。灰框标识常见的工作流,并提供指向更多信息的链接。单击最能满足集成点需求的灰色框。

相关的话题