概述
文章目录
- 背景
- 1 针对matlab function 代码生成,使用子函数的方法:
- 2 针对block 的代码生成,使用子函数的方法:
- 输入参数为结构体
- 参考
背景
使用代码生成时,生成为一整块代码,考虑到减小栈空间消耗,
思考的两种方法
1、希望使用子函数的形式。
2、存在临时变量拷贝的,均改写成结构体/数组的指针
1 针对matlab function 代码生成,使用子函数的方法:
创建子系统时,设置为原子子系统,否则只是将系统进行简单的组合(group),在创建原子子系统之后,对代码生成项进行设置:
2 针对block 的代码生成,使用子函数的方法:
1、从Simulink Library中拖拽出一个Simulink Function子系统到空白模型中。
2、从外面可以观察到,Simulink Function子系统上方有一个引子,和一个函数表达式。左右两侧没有和子系统外界交互的端口,这一点和其他子系统不一样。
双击进入子系统,可以看到顶部的一个Trigger模块,以及输入输出端口。
这里的输入输出端口和Inport/Outport模块是不一样的,因为这是专门用于Simulink Function子系统中的Argument Inport模块和Argument Outport模块。
3、双击Trigger模块,将函数名修改成function1,同时把Trigger模块的名称也改成function1。
这样的话,外面的子系统的函数原型也就变成了 y = function1(u)。
可选:Function visibility配置
生成的函数名中带有模型名的前缀。如果将Simulink Function做一个Global配置,生成的名称就不一样,配置过程如下。
1)双击Simulink Function的Trigger模块,将Function visibility配置成global,并确认。
2)然后在子系统的正中间就会出现一个global的标志,代表它是全局的。
建立好Simulink Function子系统后,就可以用Function Caller模块在模型的其他地方调用这个子系统的功能。
1)新建一个Function Caller模块,将其中的Function Prototype改成上文的函数原型 : y = function1(u)。
2)为Function Caller模块添加一个常数输入和一个disp输出并仿真,测试一下调用的效果。
由图中可见,Function Caller模块调用了function1的gain功能。
输入参数为结构体
对于参数为结构体的情况,需要在Argument Inport或者Argument Outport中将类型配置为bus。后面演示输入端口配置成bus的情况。
1)在Matlab工作空间新建一个bus1,并配置2个element成员
2) 将Argument Inport的类型配置为bus1。
3)用Bus Selector模块,把element1挑选出来输出给后面的算法模块。
4)重新Ctrl + B生成代码如下。
这里生成的函数的参数是一个结构体指针。结构体的定义在另一个文件中。
参考
Simulink代码生成:Simulink Function子系统及其代码
matlab function代码生成
最后
以上就是苗条方盒为你收集整理的simulink代码生成主动生成子函数背景1 针对matlab function 代码生成,使用子函数的方法:2 针对block 的代码生成,使用子函数的方法:参考的全部内容,希望文章能够帮你解决simulink代码生成主动生成子函数背景1 针对matlab function 代码生成,使用子函数的方法:2 针对block 的代码生成,使用子函数的方法:参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复