使用嵌入式编码器®,您可以自定义生成的C和c++函数接口金宝app仿真软件的功能而且函数调用者块。函数代码接口配置支持更容易地将生成的代码与外部代码中的函数或函数调用集成,并金宝app针对编码标准或设计需求进行定制。
你可以自定义生成的C和c++函数接口:
全球动态仿真模金宝app块®功能
导出作用域的Simulink函数金宝app
不能为作用域自定义生成的函数接口金宝app仿真软件的功能不位于模型根级别的块。有关更多信息,请参见作用域和全局的Simulink函数块金宝app概述.
通过从所选的金宝app仿真软件的功能或函数调用者块,您可以自定义为该块生成的函数原型。您对所选块的更改也会更新其他相应的块金宝app仿真软件的功能而且函数调用者模型中的块。函数可见性,全局的或范围的,在函数中设置触发端口Block决定你可以修改哪些函数属性:
对于全局函数,可以更改函数名、名称、类型限定符和函数参数的顺序。
对于导出的作用域函数,可以更改参数类型限定符和参数的顺序。不能更改函数和参数名。
您的更改不会在图形上改变模型,也不会影响在块中定义的Simulink函数原型。金宝app
Embedded Coder支金宝app持对配置了基于er金宝appt的系统目标文件的模型的Simulink函数代码接口配置,但AUTOSAR系统目标文件除外。
这个例子展示了如何定制代码生成器为全局变量生成的C函数接口金宝app仿真软件的功能块。
开放示例模型rtwdemo_functions
.将模型的副本保存到可写的位置。
在应用程序库中,打开嵌入式编码器应用程序。
在C代码选项卡上,选择代码接口>单个元素代码映射.
在代码映射编辑器中,单击功能选项卡。
在这排金宝app仿真软件功能:f3
,单击功能预览超链接。系统弹出“C/ c++函数接口”对话框金宝appSimulink函数原型作为Y = f3(u)
而且C/ c++函数原型作为Void f3(rtu_u, * rty_y)
.预览C/ c++函数原型在您进行更改时进行更新。
配置函数名和参数。
修改函数和参数标识符名称。型号配置参数子系统方法参数定义的默认命名规则金宝app仿真软件的功能参数。在C/ c++函数接口对话框中所做的更改将覆盖默认命名规则。
在C/ c++函数名场,而在C/ c++标识符名称列为每个Simulink函数参数金宝app,输入自定义名称或命名规则。指定有效的c标识符字符、标识符格式宏或字符与宏的组合。对于本例,为函数命名function3
对于参数,输入命名规则N M美元
.
要查看有关可用宏的提示,请将光标放在上面C/ c++函数名而且C/ c++标识符名称.有关标识符命名规则的更多信息,请参见标识符格式控制.
为参数u
,设置C/ c++类型限定符来指向const的指针
.
重新排列参数。拖动y
参数上的行u
论点一行。
通过检查函数原型预览来验证您的更改。
点击应用.您的修改,无论是对金宝app仿真软件的功能Block或a函数调用者阻塞,影响代码生成金宝app仿真软件的功能块和对应的函数调用者模型中的块。
您可以随意更改C/ c++返回参数从无效
来y
.在这种情况下,C函数原型是Y = function3(const * u)
.
通过单击保存更改好吧.
保存模型。
确保金宝app仿真软件的功能Block未被选中。然后,为模型生成代码。
在代码视图,打开生成的文件rtwdemo_functions.c
然后搜索function3
.生成的函数代码反映了对生成的C函数原型的更改。
void function3(real_T *y, const real_T *u) {rtY。TicToc10 = rtDWork.Delay_DSTATE;rtDWork。Delay_DSTATE = (int8_T)(int32_T)-(int32_T)rtY.TicToc10;加法器(rtB。减、rtU。U2, *u, &rtB.FunctionCaller);*y = rtB.FunctionCaller;}
此示例展示了如何定制代码生成器为导出的、限定范围的金宝app仿真软件的功能块。
对于导出的、有作用域的函数,可以修改生成的返回参数、参数类型限定符和参数的顺序。不能更改生成的函数名和参数名。
打开模型rtwdemo_functions
.将其保存到可写的位置。
更改全局函数的可见性f3
从全局到范围。打开金宝app仿真软件的功能块f3
.在功能块内部,双击触发端口块f3
.在块参数对话框中设置功能可见性来作用域
.点击应用而且好吧.
在应用程序库中,打开嵌入式编码器应用程序。
在C代码选项卡,单击代码映射- C选项卡。
在代码映射编辑器中,单击功能选项卡。
在函数行f3
,单击功能预览超链接。系统弹出“C/ c++函数接口”对话框金宝appSimulink函数原型作为Y = f3(u)
而且C/ c++函数原型作为Y = rtwdemo_functions_f3(rtu_u)
.预览C/ c++函数原型在您进行更改时进行更新。
对于为C多实例化代码配置的模型,有作用域的Simulink函数的接口预览包括一个金宝app自我
论点。的自我
参数是一个指向实时模型版本的指针(RT_MODEL
)数据结构,存储与可重用函数相关的多实例数据。
如果模型配置参数代码接口打包设置为可重用的功能
而且每个顶级模型允许的实例总数设置为多个
,论证为自我
,表示代码生成器产生一个自结构。
如果模型配置参数代码接口打包设置为可重用的功能
或每个顶级模型允许的实例总数设置为多个
,论证为(自我)
,表示参数是可选的。代码生成器生成一个自我
结构,只有当您使用模型作为顶级模型和代码接口打包设置为可重用的功能
或者如果您使用模型作为参考模型,并且每个顶级模型允许的实例总数设置为多个
.
有关配置用于多实例化代码生成的模型的更多信息,请参见从Simulink函数块生成可重入代码金宝app.
配置参数。对于本例,配置u
论点。集C/ c++类型限定符来指向const的指针
.
通过检查函数原型预览来验证您的更改。
点击应用.您的修改,无论是对金宝app仿真软件的功能Block或a函数调用者阻塞,影响代码生成金宝app仿真软件的功能块和对应的函数调用者模型中的块。
您可以随意更改C/ c++返回参数从y
来无效
.在这种情况下,C函数原型是rtwdemo_functions_f3(* rty_y, const * rtu_u)
.
单击保存更改好吧.
保存模型。
确保金宝app仿真软件的功能Block未被选中。然后,为模型生成代码。
在代码视图,打开生成的文件rtwdemo_functions.c
然后搜索rtwdemo_functions_f3
.生成的函数代码反映了对生成的C函数原型的更改。
real_T rtwdemo_functions_f3(const real_T *rtu_u) {real_T rty_y_0;而无。TicToc10 = rtDWork.Delay_DSTATE;rtDWork。Delay_DSTATE = (int8_T)(int32_T)-(int32_T)rtY.TicToc10;加法器(rtB。减、rtU。U2, *rtu_u, &rtB.FunctionCaller);rty_y_0 = rtB.FunctionCaller;返回rty_y_0; }
这个例子展示了如何定制代码生成器为导出的作用域生成的c++函数接口金宝app仿真软件的功能块。
对于导出的作用域函数,可以修改生成的返回参数、参数类型限定符和参数的顺序。不能更改生成的函数名和参数名。
打开模型rtwdemo_functions
.将其保存到一个可写的工作区域。
更改全局函数的可见性f3
从全局到范围。打开金宝app仿真软件的功能块f3
.在功能块内部,双击触发端口块f3
.在块参数对话框中设置功能可见性来作用域
.点击应用而且好吧.
在应用程序库中,打开嵌入式编码器应用程序。
设置模型配置参数语言来c++
.
打开“配置C/ c++功能接口”对话框。右键单击金宝app仿真软件的功能块f3
.在上下文菜单中,选择C / c++代码>配置C/ c++函数接口.对话框显示金宝appSimulink函数原型作为Y = f3(u)
而且C/ c++函数原型作为Y = rtwdemo_functions_f3(rtu_u)
.预览C/ c++函数原型在您进行更改时进行更新。
配置参数。对于本例,配置u
论点。集C/ c++类型限定符来指向const的指针
.
点击应用.您的修改,无论是对金宝app仿真软件的功能Block或a函数调用者阻塞,影响代码生成金宝app仿真软件的功能块和对应的函数调用者模型中的块。
您可以随意更改C/ c++返回参数从y
来无效
.在这种情况下,c++函数原型是rtwdemo_functions_f3(* rty_y, const * rtu_u)
.
单击保存更改好吧.
保存模型。
确保金宝app仿真软件的功能Block未被选中。然后,为模型生成代码。
在代码视图,打开生成的文件rtwdemo_functions.cpp
搜索函数f3
.生成的函数代码反映了对生成的c++函数原型的更改。
real_T rtwdemo_functionsModelClass::f3(const real_T *rtu_u) {real_T rty_y_0;而无。TicToc10 = rtDWork.Delay_DSTATE;rtDWork。Delay_DSTATE = static_cast(static_cast (-static_cast (rtY.TicToc10)));加法器(rtB。减、rtU。U2, *rtu_u, &rtB.FunctionCaller);rty_y_0 = rtB.FunctionCaller;返回rty_y_0; }
对于c++代码生成,全局Simulink函数与用于模型入口点函数金宝app的c++类接口不兼容。
金宝appSimulink函数代码接口配置不支持Stateflow中的Simulink函数和函数调用器金宝app®.