生成要导出到外部代码库的组件源代码

您所在的位置:网站首页 comsol导入外部数据作为输入 生成要导出到外部代码库的组件源代码

生成要导出到外部代码库的组件源代码

2023-06-26 17:07| 来源: 网络整理| 查看: 265

创建包含要导出的函数的模型

具有要导出的函数的模型必须满足模型根级别的架构约束。在根级别,有效模块为:

Inport

Outport

Function-Call Subsystem

Simulink Function

Goto

From

Merge

代码生成器为 Function-Call Subsystem、Simulink Function、Initialize Function 和 Reset Function 模块生成函数代码。对于 Function-call Subsystem 模块,您需要将模块输入端口连接到用于断言函数调用信号的根 Inport 模块。子系统会根据接收到的函数调用信号而执行。Simulink Function 模块会对相应 Function Caller 模块或 Stateflow 图的执行进行响应运行。在发生模型初始化事件时会执行 Initialize Function 模块,在发生用户定义的重置事件时会执行 Reset Function 模块。

为了导出函数,模型 rtwdemo_functions 包含两个函数调用子系统(f1_alg 和 f2_alg)和一个 Simulink Function 模块 (f3),它们均用于导出函数。该模型还包含一个 Initialize Function 模块 (Initialize Function) 和一个 Reset Function 模块 (Reset Function)。要计算在模型的其他部分中有状态的模块的初始条件,可在 Initialize Function 和 Reset Function 模块内部使用 State Writer 模块。

open_system('rtwdemo_functions')

创建包含 Function Caller 模型

使用 Function Caller 模块来调用 Simulink Function 模块。Function Caller 模块可以与 Simulink Function 模块在同一模型中,也可以在不同模型中。

多个 Function Caller 模块可以调用一个 Simulink Function 模块。您可以将 Function Caller 模块放在函数调用子系统内。在代码生成期间,代码生成器从函数调用子系统导出函数。

模型 rtwdemo_caller 导出包含 Function Caller 模块的函数调用子系统。

open_system('rtwdemo_caller')

创建用于仿真的测试框架模型

导出函数时,生成的代码不包含调度器。创建一个测试框架模型来处理仿真期间的调度。不要使用该测试框架模型来生成您部署的代码。

模型 rtwdemo_export_functions 是一个测试框架。模型:

在 rtwdemo_caller 中用 Function Caller 模块调度 Simulink Function 模块。

向此示例中的其他模型提供函数调用信号以调度模型内容,包括模型初始化和重置事件。

open_system('rtwdemo_export_functions')

对测试框架模型进行仿真

通过对测试框架模型进行仿真,验证包含要导出的函数的模型是否按预期执行。例如,对 rtwdemo_export_functions 进行仿真。

sim('rtwdemo_export_functions')

生成函数代码

打开 Embedded Coder。然后,为要导出的函数生成代码。例如,为 rtwdemo_functions 生成代码。

slbuild('rtwdemo_functions')### Starting build procedure for: rtwdemo_functions ### Successful completion of code generation for: rtwdemo_functions Build Summary Top model targets built: Model Action Rebuild Reason ====================================================================================== rtwdemo_functions Code generated. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 19.151s

查看生成的代码

查看生成的代码。

ert_main.c 是模型的示例主程序(执行框架)。此代码显示如何调用导出的函数。该代码还显示如何初始化和执行生成的代码。

rtwdemo_functions.c 调用初始化函数(包括 Initialize Function)和针对模型组件 f1_alg、f2_alg 和 f3 导出的函数。

rtwdemo_functions.h 声明模型数据结构体和一个对接导出的入口函数和数据结构体的公共接口。

f3.h 是共享文件,用于声明 Simulink 函数 f3 的调用接口。

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

编写接口代码

打开并查看代码接口报告。要编写用于您的执行框架的接口代码,请使用该报告中的信息。

通过添加指令 #include rtwdemo_functions.h、#include f3.h 和 #include rtwtypes.h 来包含生成的头文件。

将输入数据写入模型的 Inport 模块的生成代码。

调用生成的入口函数。

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

输入端口:

rtU.U1 的类型为 real_T,维度为 1

rtU.U2 的类型为 real_T,维度为 1

入口函数:

初始化入口函数 void rtwdemo_functions_initialize(void)。在启动时,调用一次此函数。

重置入口函数 void rtwdemo_functions_reset(void)。根据需要调用此函数。

导出的函数 void f1(void)。根据需要调用此函数。

导出的函数 void f2(void)。根据需要调用此函数。

Simulink 函数 void f3(real_T rtu_u, real_T *rty_y)。根据需要调用此函数。

输出端口:

rtY.Accumulator1 的类型为 int8_T,维度为 [2]

rtY.Accumulator2 的类型为 int8_T,维度为 [2]

rtY.TicToc10 的类型为 int8_T,维度为 1

有关详细信息

生成要导出到外部代码库的组件源代码 (Embedded Coder)

Deploy Applications to Target Hardware (Embedded Coder)

Customize Code Organization and Format (Embedded Coder)

为模型入口函数配置生成的 C 函数接口 (Embedded Coder)

关闭示例模型

bdclose('rtwdemo_export_functions') bdclose('rtwdemo_functions') bdclose('rtwdemo_caller')


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3