MBD-从一个示例看代码生成过程(rtw文件、TLC语言)
目录
前面
一个模型
代码生成之前的工作
生成代码
代码生成流程
rtw文件
如何生成?
文件里有什么?
TLC语言
如何调取?
有哪些简单命令?
最后
前面
一直在看MBD,但却连matlab生成代码的过程都不了解,属实有点舍本逐末了。
一个模型
首先,先搭建一个简单的示例出来:
输入:正弦函数
经过:两路的增益,>0增益1.5,<0增益2,经过选择开关
输出:示波器观察
大家可以先想象一下,如果你是matlab你会怎么生成这个代码?
代码生成之前的工作
Ctrl+E进入设置界面,系统目标文件选择ert.tlc,语言选择C语言。
然后进入代码生成报告的选择里,选择生成报告、以及完成自动打开
对了还有步长设置,尽量直接选择固定步长,因为真要下载到MCU里,MCU是靠时钟工作的,时钟就是计数器,属于离散的,频率也是固定的。
然后还要修改刚刚的模型,把输入的正弦波,输出到示波器去掉,在生成的代码里一般都要以端口的形式存在。
完事具备,开始生成!!!!
生成代码
点它
界面会变成这样子,左边是生成并自动弹出的报告,中间是模型,右边是自动打开的代码窗口。
生成成功!!
然后咱们打开报告窗口:这里就是生成的代码。
具体的生成代码的内容以及文件结构后面再讲,这次重点是搞清楚这个代码是怎么生成的?难道真的只是把模型翻译一下,就变成C语言了?
代码生成流程
看图:图片来源《Simulink仿真及代码生成技术入门到精通》(需要PDF的同学可以私聊)
流程如下:
1、通过rtw命令将模型编译成rtw文件
2、利用TLC目标语言编译器将rtw文件转化成一系列的源文件
3、通过makefile编译链接源文件,生成可执行文件
4、下载到目标硬件上
咱们重点关注的是前两步。
其实如果往细了分析,还能分更多:
刚开始也没必要这么细,了解就可以,接下来重点关注两个东西:rtw文件、TLC目标语言编译器。
rtw文件
先不将它是什么,下能生成它,找到它,看到它,再去分析:
如何生成?
其实只要是生成代码,都会存在,只不过默认被清除,通过下面的选项把它保存下来:
再次生成文件,进入生成代码目录下,找到rtw文件:
文件里有什么?
rtw文件中包含了输入文件和编译过程的中间产物,记录了模型创建信息和编译信息、名字与版本号、配置参数集、输入输出、参数等所有信息。
所以文件贼长,不方便复制进来,大家可以自己尝试生成看一下。
就像一个大的结构体:
比如说:这一行NumBlockTypeCounts表示你这个模型用了几种模块。
比如说:每隔模块的名字以及ID号
比如:生成的文件树系统
现在有了rtw文件,下一步就是使用TLC语言,把rtw文件转化成我们想要的目标源文件。
TLC语言
Target Language Compiler目标语言编译器
是一种为了转化目标语言而存在的解释性语言,其存在的作用就是把模型编译出来的rtw文件转换位目标代码(C/C++)。
还是先教大家怎么用:
如何调取?
一样Ctrl+e,进入配置界面:勾选上TLC-debug
这个时候你再点击,生成代码的按钮就会发现,怎么没有代码生成?反而在命令行出现了这个:
这不就是debug嘛,没错就是debug,现在就由你来控制代码生成过程了。
有哪些简单命令?
其实严格来说也不是控制过程,而是可以借用TLC对rtw文件进行访问,编辑、修改。
比如说,我让它打印出来整个模型:print CompiledModel
会出现一个特变长的打印结果:
好像不太明显,咱们可以打印一个小的参数:print CompiledModel.ASTNodeDefaults
print也可以简化成p:
不仅可以访问,还可以修改:assign CompiledModel.ASTNodeDefaults.IsNonTerminal = 1
assign可以简化为a
………………
以上只是最简单的一些命令,很浅,更细节的东西还是需要大家自己下去摸索。
最后
大概介绍了代码生成流程,网上也有很多好的资源:
视频:
【【吐血整理】Simulink入门建模仿真资料——MATLAB Simulink仿真及代码生成技术【适合零基础】】 课时35.rtw文件——TLC命令对rtw文件的访问、编辑、内容追加_哔哩哔哩_bilibili
书籍:
《Simulink仿真及代码生成技术入门到精通》
后面准备分析一下生成代码内容以及代码文件的框架。
MBD-从一个示例看代码生成过程(rtw文件、TLC语言)相关推荐
- 如何编出一个大型游戏代码
如何编出一个大型游戏代码(1) C++语言,可能需要特定的C++语言编译器编译,也可能是代码可能有bug也请各位能找出来(由于代码过长,将分成六份发送(1,2,3,4,5,6)) 上代码 #inclu ...
- 质疑贴——对《新版微软一站式示例代码库》中的一个示例的质疑
在"新版微软一站式示例代码库发布 - 绑定第三版示例代码浏览器"中,有若干最新的asp.net的示例. 对其中的一个示例的源代码研究了一番.觉得有问题,故在此阐述本人的疑问,望广大 ...
- python自动导出数据脚本_使用python生成一个导出数据库的bat脚本文件的示例代码...
这篇文章分享使用python生成一个导出数据库的bat脚本文件的示例代码 实例如下:# 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库 ...
- 在CSharp中如何写一个随机晚餐代码,你能给我写个示例吗?
在 C# 中可以使用 System.Random 类来生成随机数.您可以使用这个类来生成一个随机的晚餐选择. 下面是一个示例代码: string[] meals = { "巧克力蛋糕&quo ...
- 介绍一个十分牛逼的GitHub看代码神器,零基础必学会的操作。
给大家介绍一个非常实用的工具,有了它,我们可以在几秒之内用 VS Code 打开 GitHub 上的任意一个 Repo,无需 Clone,速度飞快. 用法也十分简单而且好记,下面给大家介绍下. 介绍 ...
- 普鲁克分析(Procrustes Analysis)评估物种-环境/功能关联度的一个示例
R包vegan的普鲁克分析(Procrustes Analysis)示例 几天前,同学咨询这篇文献中的分析方法,先来看一下(部分截图). (Zhao et al, 2019) 大体意思是,作者测量了活 ...
- php调用其它控制器,TP框架控制器里面怎么调用另一个控制器的代码
我网站TP框架,一个前台D:\WWW\User\Home\Controller\CommonController.class文件,一个后台D:\WWW\snadmin\Home\ControllerC ...
- java订单类_基于Java创建一个订单类代码实例
这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...
- Android Studio 导入 so 简明教程:通过一个示例让你理解整个过程
Introduction 如果你是一名 C/C++ 开发人员,正在尝试将 C/C++ 的代码往安卓上迁移,那么这篇文章对你有很大的帮助 如果你是一名 Android 开发人员,正在尝试将外部 so 嵌 ...
最新文章
- 设置VSS2005使支持通过Internet访问(转)
- 登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$
- Python入门实战题目
- oracle12c的scott,Oracle12C创建scott账户
- P5327 [ZJOI2019]语言
- python中的封装调用_Python基础之封装
- 5G 和 IoT 究竟意味着什么?
- electron webview 页面加载事件顺序
- CoolFire系列讲座 第5讲:善用你所得到的任何资讯 (Exm: HOSTS 档)
- HashMap底层原理实现
- HX710_24位电子秤AD采集
- java解压zip压缩包
- 100个特别的遥感应用和用途
- [架构]京东咚咚架构演进
- [架构之美]一款APP从想法-开发-上线-产品的全过程
- mysql latch_MySQL中的latch(闩锁)详解——易产生的问题以及原因分析
- Latex论文写作各种小问题
- 起源地杯青年足球锦标赛
- 14个python就业前景_python普通人学有什么用 就业前景和工资待遇怎么样
- HOTMAIL搭建企业邮箱
热门文章
- 如何选择适合自己的域名?怎么选择域名?
- kbengine运行mysql error access denied for user ‘kbe@localhost‘
- Web前端响应式框架
- LSC问题(不连续问题)
- c语言程序while,C语言之while循环
- Oracle ERP数据转换论
- 【范县城关镇社工站】“快乐无忧,健康相守”活动
- sorl 查询 跟 mybatisboot集成sorl
- java怎么实现七天封禁玩家_java中如何踢人下线?封禁某个账号后使其会话立即掉线!...
- 解决360 兼容模式下问题