首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 01:02
  • 4007
  • 11654
blog.csdn.net

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

文章目录

  • 1 问题引入
  • 2 原子子系统配置
  • 3 将原子子系统单独生成文件
  • 4 原子子系统的数据类型
  • 5 总结

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 总结

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

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/105178640"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top