Simulink代码生成: 原子子系统及其代码

本文研究Simulink中的原子子系统生成的代码。

1 问题引入

在手写嵌入式C代码的时候,如果遇到反复使用的同一个代码片段,一个基本操作就是把他提炼为一个函数,然后反复调用。这样做不仅能使代码更具有可读性,也能有效的减少代码量,降低了Flash资源使用。

同理,假如有如下Simulink模型,大量使用了具有相同逻辑的模块。
在这里插入图片描述
生成的代码中就会出现重复功能的C代码。
在这里插入图片描述
在项目中的模块一般都比demo中的更加复杂,也就产生了更多的冗余代码。一个好的解决办法就是将重复的模块配置成原子子系统

2 原子子系统配置

1.框选其中一个模块,然后Ctrl+G将其封装为子系统
在这里插入图片描述
2.右键子系统,选择Block Parameters,打开模块参数配置窗口。
在这里插入图片描述
3.在Main这一栏中,勾上Treat as atomic unit。然后在Code Generation这一栏中,将Function packaging选为Reusable Function。下面的函数名和文件名可以自定义,也可以默认。
在这里插入图片描述
在这里插入图片描述
4.把其余两个模块替换成原子子系统的复制。
在这里插入图片描述
5.保存模型,生成代码。可以看出Simulink为原子子系统生成了一个函数,然后在step函数中调用了三次。
在这里插入图片描述

3 将原子子系统单独生成文件

通过配置也可以将原子子系统生成一个单独的文件,供step函数调用。
1.首先,在Block Parameters窗口中配置文件名。通过自定义文件名称和函数名称,可以将原子子系统的代码生成到一个C文件中。
在这里插入图片描述
对应的代码:
在这里插入图片描述
另外,还可以将原子子系统配置成,就可以供多个模型调用,也更加便于修改。

4 原子子系统的数据类型

最近博主在工作中发现,原子子系统的输入输出的数据类型,也会对代码生成有一定的影响。

1)将原模型的第3个Import的输出类型修改为uint16,仿真后,输入输出类型就不再是像上面的两个double型了。
在这里插入图片描述
2)将原子子系统的代码生成配置都改成Auto。
在这里插入图片描述
3)Ctrl + B生成代码。
在这里插入图片描述
观察生成的代码会发现,三个内容相同的原子子系统生成了不同的两个函数。前两个输入输出调用的是同一个demo_Subsystem()函数,后一个输入输出调用的是另一个demo_Subsystem2()函数。

导致这种情况的原因就是因为原子子系统的输入类型不一样,导致了必须生成类型不用的形参,才能和模型的类型相对应。博主认为,在建模过程中应该尽量使同样的原子子系统的输入输出类型相同,这样才能够比较有效地降低代码量。

如果接口类型不同的情况向,像是第3章中强制指定原子子系统对应函数的名称,则生成代码会报错。

5 总结

通过定义原子子系统,实现将同种功能的代码复用,减少了代码量,提高了可读性。

>>返回个人博客总目录

  • 29
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值