打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
怎样生成我想要的 C 代码系列(9)
userphoto

2022.09.17 广东

关注

我们写 C 代码的时候,为了主程序结构清晰,通常会把具有独立功能的代码变成子函数的形式。类似的,为了 Simulink 模型结构清晰,我们在模型里也经常会用把具一片实现某种功能的模块变成子系统的形式。

那么,问题来了。

如果我希望这些 Simulink 子系统,在自动代码生成时,也能真的生成单独的子函数,该如何配置呢?

(点击末尾的 “阅读原文” 下载本文的案例模型。)

把某个子系统变成函数调用

要得到:

自动生成代码时,让某个 Simulink 子系统的算法生成单独子函数形式。

怎么做:

把该子系统变为元胞子系统 (Atomic Subsystem),并配置子系统的代码生成选项。

照例,还是先举个例子

1. 模型

这是在前一篇帖子最后用到的一个模型。Matlab Function 里面写了一个循环语句,并在循环内部调用了外部子系统 func。

它所生成的代码如下图。可以看到 Simulink 子系统 func 在生成代码后,具体的 C 代码并不会平铺在主程序里。它而是作为一个函数调用的形式出现的的 func()。

2. 设置

这是因为对该模块的属性做了设置,如下图。

首先右键点击模型,打开 Block Parameters 界面,首先要在 Main 的页面将子系统勾选为 Atomic Subsystem。只不过在这个案例模型里,由于 func 是触发子系统,默认就是 Atomic 的。

然后,点开出现的 Code Generation 页面,将 Function packaging 配置为 Nonresusable function,主函数调用它时通过全局变量来传递数据。(总之不选择 Inline 和 Auto)

也可以设置为 Reusable ,这时主程序调用它的时候,会通过传参的方式来进行数据传递。最后生成的代码如下图。

模型的默认设置是 Auto,所以在这种情况下,代码生成工具会把这个子系统的算法代码写在主程序里,而不会采用函数调用的方式,如下图:

总结

如果希望某个子系统的 C 代码单独生成一个子函数,那么,首先需要把子系统配置为元胞子系统(Atomic Subsystem);然后设置它 Code generation 属性为 Reusable  或者 NonReusable。

另外,不仅可以将子系统的代码放在单独的子函数里,还可以配置放在单独的文件(在配置菜单里指定文件名即可)里。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
怎样生成我想要的C代码系列 | Simulink子系统如何生成单独的子函数?
怎样生成我想要的C代码系列 | Stateflow实现循环逻辑
MBD的Simulink使用技巧③:虚拟子系统与原子子系统的代码生成
如何特意制造栈缓冲区溢出?(x86 & ARM)
GUI指导教程系列(9)——在GUI中调用Simulink模型 - MATLAB技术论坛 ...
Simulink中任务调度实现方法浅谈
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服