文档

把外部C / c++代码生成的代码

您可以自定义代码,代码生成器产生的模型通过指定外部代码自定义代码块或模型配置参数。

  • 开始和结束的地方代码为根模型生成的代码。

  • 声明,身体,退出代码生成功能的代码块在根模型或nonvirtual子系统。

功能,您可以增加与外部代码取决于函数的代码生成器产生块模型中。例如,如果一个模型或原子状态子系统包括块,您可以指定代码禁用功能。同样的,如果你需要保存数据的代码块,释放内存,或重置目标硬件,为终止函数指定代码。有关更多信息,请参见块目标文件的方法

工作流

将外部C或c++代码在代码生成器生成的代码的特定位置根模型和子系统,遍历表中列出的任务。

任务 行动 更多的信息
1 如果你想整合外部C代码生成c++代码或相反,修改的语言外部代码匹配生成的代码的语言选择。 修改外部代码的编程语言来匹配生成的代码
2 回顾你的评估外部代码特点和集成需求。 选择一个外部代码集成工作流(嵌入式编码)
3 如果有必要,在C或c++重写代码。
4 选择一个集成方法将外部代码添加到仿真软件模型。万博1manbetx 选择一个集成方法(嵌入式编码)
5 定义代码生成的模型数据的表示。 外部C / c++代码之间交换数据和仿真软件模型生成的代码万博1manbetx(嵌入式编码)
6 为代码生成配置模型。 生成代码相匹配的外部代码(嵌入式编码)模型配置(嵌入式编码)
7 生成代码和代码生成报告。 代码生成(嵌入式编码)
8 检查生成的代码接口和静态代码度量。 分析生成的代码接口(嵌入式编码)静态代码度量(嵌入式编码)
9 从模型中构建一个可执行程序。 在仿真软件环境中构建集成的代码万博1manbetx(嵌入式编码)
10 确认可执行程序执行。 数值等价测试(嵌入式编码)代码执行分析(嵌入式编码)

选择一个集成方法

在仿真软件万博1manbetx®建模环境,两种方法可用于将外部C或c++代码部分代码生成器生成的代码:

  • 添加的自定义代码块库根模型或原子子系统。

  • 设置模型配置参数代码生成>自定义代码窗格。

下表比较了这两种方法。选择对齐的方法最好的集成需求。如何使用每种方法的更多信息,见集成外部代码通过使用自定义代码块(嵌入式编码)集成外部代码通过使用模型配置参数(嵌入式编码)。

要求 模型配置参数
包含一个表示的外部代码建模画布
代码在函数为根生成模型
代码在函数为原子生成子系统
保存代码放置在一个模型配置设置
放置在顶部和底部的代码生成的头文件和源文件的一个模型
地方的代码在声明、执行和退出的SystemInitializeSystemTerminate代码生成器创建的函数
地方的代码在声明、执行和退出的SystemStart,SystemEnable,SystemDisable,SystemOutputs,SystemUpdate,或SystemDerivatives代码生成器创建的函数
添加预处理器宏定义生成的代码
使用指定的自定义代码设置仿真目标
配置库模型使用定制代码设置父模型库的链接

集成外部代码通过使用自定义代码块

定制代码块库

自定义代码块库包含模块,您可以使用它们来将外部C或c++代码放入内特定位置和功能代码生成器生成的代码。图书馆由10块,将代码添加到模型的头(模型。h)和源(模型。c模型. cpp代码生成器产生的)文件。

模型头源模型添加外部代码块顶部和底部的头文件和源文件的代码生成器产生根模型。这些块显示两个文本字段,您可以在其中输入或粘贴代码。一个字段指定代码,你想生成的头的顶部或源文件。第二个字段指定代码,你想在文件的底部。

剩下的块外部代码添加到函数的代码生成器产生根模型或原子子系统包含块。块显示文本字段,您可以在其中输入或者粘贴定制函数,代码生成器生成的代码。文本字段对应声明、执行和出口部分的代码对于一个给定的函数。

自定义代码 使用这个块
计算连续状态 系统衍生品
禁用状态 系统禁用
使国家 系统启用
重置状态 系统初始化
产生的输出 系统输出
执行一次 系统启动
空闲内存,保存数据重置目标硬件 系统终止
需要更新在每个主要的时间步 系统更新

块和它的位置在一个模型决定了外部代码,代码生成器的地方。例如,如果系统输出块在根模型级别,代码生成器模型中的代码的地方输出函数。如果块驻留在一个触发或启用子系统,代码生成器子系统中的代码的地方输出函数。

如果代码生成器不需要生成一个函数,对应于一个自定义代码块中包含在一个模型中,代码生成器是下列之一:

  • 省略了外部代码中指定自定义代码块。

  • 返回一个错误,表明该模型不包括相关的块。在这种情况下,从模型中删除自定义代码块。

有关更多信息,请参见块目标文件的方法

添加自定义代码块建模画布

添加自定义代码库块模型:

  1. 在模型库浏览器万博1manbetx,打开自定义代码块库。你可以访问图书馆:

    • 导航到万博1manbetx仿真软件编码器>自定义代码在浏览器中。

    • 进入MATLAB®命令custcode

  2. 拖动块你想要进入你的模型或子系统。拖模型头源模型块为根模型。基于函数的自定义代码块拖拉到根模型或原子子系统。

您可以使用模型包含自定义代码块作为参考模型。代码生成器生成代码的时候忽略了块仿真目标。当产生一个代码生成的目标代码,代码生成器包括和编辑自定义代码。

外部代码添加到生成的函数开始

这个例子展示了如何使用系统启动将外部C代码块在代码生成器生成的代码模型,该模型包括一个离散滤波器。

  1. 创建以下模型。

  2. 为代码生成配置模型。

  3. 双击系统启动块。

  4. 在块参数对话框,系统启动函数声明代码字段中,输入这个代码:

    unsigned int * ptr = 0 xffee;
  5. 系统启动函数的执行代码字段中,输入这个代码:

    / *初始化硬件* / * ptr = 0;
  6. 点击好吧

  7. 生成代码和代码生成报告。

  8. 视图生成的模型。c文件。搜索的字符串启动功能。你应该找到下面的代码,包括外部代码进入步骤4和5。

    {{/ *用户代码(开始函数头)系统* / / * * / <根>unsigned int * ptr = 0 xffee;/ *用户代码(启动函数体)系统* / / * * / <根>/ *初始化硬件* / * ptr = 0;}}

另一个例子,看到外部C代码集成到生成的代码通过使用自定义代码块和模型配置参数(嵌入式编码)。

集成外部代码通过使用模型配置参数

模型配置参数提供了一种方法将外部C或c++代码中的特定位置和功能代码生成器生成的代码。

选择
插入外部代码生成的顶部附近模型。c模型. cpp文件

源文件,并输入外部代码插入。

请注意

如果您生成子系统的代码到单独的文件中,代码没有访问外部你指定的代码源文件参数。例如,如果您指定一个包含文件源文件设置,代码生成器插入# include的顶部附近模型。c模型. cpp文件。子系统的代码,代码生成器的地方在一个单独的文件不可以访问声明包括在你的文件。在这种情况下,考虑指定外部代码头文件参数。

插入外部代码生成的顶部附近模型。h文件 头文件,并输入外部代码插入。
插入外部代码内部模型的初始化函数模型。c模型. cpp文件 初始化函数,并输入外部代码插入。
插入外部代码模型内终止功能模型。c模型. cpp文件 终止函数,并输入外部代码插入。也选择终止功能要求的参数接口窗格。
添加预处理器宏定义 定义了,输入一个空格分隔的列表添加预处理器宏定义生成的代码。列表可以包含简单的定义(例如,-DEF1)和定义一个值(例如,-DDEF2 = 1)。定义可以省略- d(例如,-DFOO = 1FOO = 1是等价的)。如果一个定义包括- d工具链,可以覆盖国旗,如果定义的工具链使用不同的信号。
使用相同的自定义代码设置为模拟指定的参数设置MATLAB函数块,Stateflow®图表和真值表块

使用相同的自定义代码设置为模拟目标

这个参数是指模拟目标面板的配置参数对话框。

让图书馆模型使用定制代码设置独特的从父母模型库的链接

使用本地自定义代码设置(不继承主要模型)

这个参数只能包含的库模型MATLAB函数块,Stateflow图表或真值表块。

在外部头文件包含一个头文件,添加#如果未定义代码。使用这段代码可以避免多个夹杂物。例如,在rtwtypes.h,下面的# include看守说:

的ifndef RTW_HEADER_rtwtypes_h_ # define RTW_HEADER_rtwtypes_h_……# endif / * RTW_HEADER_rtwtypes_h_ * /

有关如何添加的更多信息文件头的位置和名称,来源,构建过程和共享库文件,看看在仿真软件环境中构建集成的代码万博1manbetx(嵌入式编码)。

请注意

代码生成器包括外部代码包括在配置设置为software-in-the-loop生成代码时(银)和processor-in-the-loop(公益诉讼)模拟。然而,代码生成器忽略外部代码包括在生成代码的时候一套配置功能,快速模拟或仿真系统的目标文件。

更多信息自定义代码参数,看到模型配置参数:代码生成自定义代码。例如,看到的外部C代码集成到生成的代码通过使用自定义代码块和模型配置参数(嵌入式编码)。

外部C代码集成到生成的代码通过使用自定义代码块和模型配置参数

这个例子展示了如何将外部代码生成的代码中使用自定义代码块和模型配置参数。

1。打开模型rtwdemo_slcustcode

open_system (“rtwdemo_slcustcode”)

2。打开模型配置参数对话框和导航到自定义代码窗格。

3所示。检查设置参数源文件初始化函数

  • 源文件指定的评论并设置变量GLOBAL_INT2为1。

  • 初始化函数初始化变量GLOBAL_INT2为1。

4所示。关闭对话框。

5。双击模型块来源。的模型的来源字段指定代码生成器声明变量GLOBAL_INT1并将其设置为0的顶部生成的文件rtwdemo_slcustcode.c

6。打开触发子系统放大器。子系统包括系统输出块。代码生成器的地方代码指定在生成的代码块在最近的父原子子系统。在这种情况下,代码生成器将外部代码生成的代码放大器子系统。外部代码:

  • 声明变量的指针* intPtr并初始化变量的值GLOBAL_INT1

  • 在执行期间将指针变量设置为1。

  • 在退出前重置指针变量为0。

7所示。生成代码和代码生成报告。

8。检查生成的源文件中的代码rtwdemo_slcustcode.c。在文件的顶部,后# include语句,你会发现下面的声明代码。例子中指定的第一个声明源文件配置参数,第二块声明与模型来源。

int_T GLOBAL_INT2 = 1;

int_T GLOBAL_INT1 = 0;

的输出函数放大器子系统包括下面的代码显示了外部代码与生成的代码集成应用。的三行代码示例指定指针变量与系统输出块放大器子系统。

int_T * intPtr = &GLOBAL_INT1;

* intPtr = 1;

rtwdemo_slcustcode_Y。= rtwdemo_slcustcode_U输出。输入< < 1;

* intPtr = 0;

下面的赋值出现在模型初始化入口点函数。示例指定这个任务初始化函数配置参数。

GLOBAL_INT2 = 1;

相关的话题

这个主题有帮助吗?