Hyowinner的MBD技术论坛

 找回密码
 立即注册
搜索
查看: 512|回复: 0

【经验分享】可重用子系统的代码生成

[复制链接]

99

主题

247

帖子

4216

积分

管理员

校长

Rank: 9Rank: 9Rank: 9

积分
4216
QQ
发表于 2025-10-15 15:58:29 | 显示全部楼层 |阅读模式
基于模型设计软件,尤其是Simulink工具下建立的模型在ert.tlc系统目标下生成的C代码,往往由于种种原因,使得生成代码的规模较大,先不说编译之后的目标文件在各种硬件平台里面占用ROM多大,运行时RAM多大,单单生成代码的行数过多,就已经是让很多产品控制器开发人员难以接受的了。Simulink模型生成代码行数过多,有很多原因,如表达式折叠关闭、模型中存在太多冗余逻辑,总的来说包括两大类:配置问题和重复建模问题,配置问题的解决依赖于对Simulink代码生成参数的深度理解;而重复建模的问题,则是比较容易解决的。使用可重用子系统将重复逻辑封装为可重用子系统即可立竿见影

举一个最理想的例子(如上图),将不带有状态变量(unti delay之类模块会将内部离散状态变量生成独立的全局变量)的组合逻辑封装为可以重复调用的原子子系统,但是只生成一份函数定义。为了实现这个目标,推荐将可以重复使用的算法逻辑封装为原子子系统,并在“代码生成”页面下分别设置“函数打包”“函数名称选项”“函数名称(任意合法字符串,不必须如图所示)”“文件名选项”如下:



然后,点击确定完成重用子系统生成代码的配置。将此子系统拷贝多份构成新的模型如下图(包含所设置原子子系统的3个实例),然后Ctrl+B启动代码生成(为了方便观看效果,模型关闭了生成注释的功能)。



模型生成代码中,设置的原子子系统生成函数myFun只有一个定义,但是在Model_Step函数中被调用三次。如果不设置重用,那么生成代码里面实现不了如此简洁的效果。



而这个函数myFun是生成在单独的文件myFun.c和myFun.h中的,这是因为设置函数生成文件设置的参考函数名的效果。



通过上面这个简单的例子,希望让初学者了解建模过程中的设计和配置,对生成代码规模长度是有直观影响的,千万不要放松对建模技术的重视度

PS:即使让Simulink生成代码只有一行也是有办法的,参考校长的产品Code Line Reducer工具功能。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
持续学习 未来有你
基于场景 解决问题
项目合作联系微信:Hyo_Matlab
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|MBD全栈技术学校|苏ICP备2025212294号-1|Hyowinner校长B站首页|手机版|小黑屋|Hyowinner的MBD技术论坛

GMT+8, 2026-5-7 12:02 , Processed in 0.090957 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表