主要内容

使用函数调用子系统为显式函数调用建模

通过将模型划分到单独构建的函数调用子系统,部署Simulink®模金宝app型中的嵌入式系统代码。

函数调用子系统模型

打开示例模型rtwdemo_explicitinvocation_funccallsubsys.该模型被配置为使用注释显示颜色编码的示例时间。要查看它们,在打开模型后,按下按钮更新图表Ctrl + D.要显示图例,请按Ctrl + J

该模型将算法划分为三个函数调用子系统:rate1rate2,DataBuffer.使用函数调用子系统来显式地建模多速率系统。

子系统rate1DataBuffer使用1秒的采样时间。子系统rate2使用2秒的采样时间。

这种模型设计称为导出功能建模。金宝appSimulink在根级约束模型为函数调用子系统。驱动导入块指定函数名。

相关型号配置参数设置

  • 类型设置为固定步

  • 解算器设置为离散(无连续状态)

  • 将每一个离散的速率视为一个单独的任务选中。金宝appSimulink应用多任务执行,因为模型使用多个采样率。

调度

金宝appSimulink®基于模型配置对模型进行仿真。金宝appSimulink传播并使用import块样本时间来基于单核多任务执行平台对块执行进行排序。

在样本时间图例中,红色表示最快的离散率。Magenta标识从导出函数继承的速率,表明它们的执行在Simulink调度的上下文之外。金宝app

执行框架必须调度生成的函数代码,并在函数之间传输数据。

执行框架需要调度生成的函数代码,并处理函数之间的数据传输。生成的代码很简单,您可以控制执行顺序。

生成代码和报告

打开嵌入式编码器然后,生成代码和代码生成报告。

检查生成的代码

从代码生成报告中,检查生成的代码。

  • ert_main.c是模型的一个示例主程序(执行框架)。这段代码展示了如何调用导出的函数。该代码还显示了如何初始化、执行和终止生成的代码。

  • rtwdemo_explicitinvocation_funccallsubsys.c调用子系统的初始化函数和导出函数rate1rate2,DataBuffer

  • rtwdemo_explicitinvocation_funccallsubsys.h向导出的入口点函数和数据结构声明模型数据结构和公共接口。

  • rtwtypes.h定义生成代码所需的数据类型、结构和宏。

代码接口

打开并检查代码接口报告。使用报告中的信息为执行框架编写接口代码:

  1. 通过添加指令来包含生成的头文件# include Rate1s.h# include DataBuffer.h,# include Rate2s.h

  2. 将输入数据写入模型导入块生成的代码中。

  3. 调用生成的入口点函数。

  4. 从生成的代码中读取模型Outport块的数据。

输入端口:

  • rtU。In1_1s类型的real_T维数为1

  • rtU。In2_2s类型的real_T维数为1

入口点函数:

  • 初始化入口点函数,空白rtwdemo_explicitinvocation_funccallsubsys_initialize(空白).在启动时,调用此函数一次。

  • 导出的函数,空白CallEvery1s(空白).根据需要调用这个函数。

  • 导出的函数,空白CallEvery1s(空白).根据需要调用这个函数。

  • 导出的函数,空白CallEvery2sAt1sPriority(空白).根据需要调用这个函数。

输出端口:

  • 而无。着干活类型的real_T维数为1

  • 而无。Out2类型的real_T维数为1

更多关于