目录

前面

一个模型

代码生成之前的工作

生成代码

代码生成流程

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. 如何编出一个大型游戏代码

    如何编出一个大型游戏代码(1) C++语言,可能需要特定的C++语言编译器编译,也可能是代码可能有bug也请各位能找出来(由于代码过长,将分成六份发送(1,2,3,4,5,6)) 上代码 #inclu ...

  2. 质疑贴——对《新版微软一站式示例代码库》中的一个示例的质疑

    在"新版微软一站式示例代码库发布 - 绑定第三版示例代码浏览器"中,有若干最新的asp.net的示例. 对其中的一个示例的源代码研究了一番.觉得有问题,故在此阐述本人的疑问,望广大 ...

  3. python自动导出数据脚本_使用python生成一个导出数据库的bat脚本文件的示例代码...

    这篇文章分享使用python生成一个导出数据库的bat脚本文件的示例代码 实例如下:# 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库 ...

  4. 在CSharp中如何写一个随机晚餐代码,你能给我写个示例吗?

    在 C# 中可以使用 System.Random 类来生成随机数.您可以使用这个类来生成一个随机的晚餐选择. 下面是一个示例代码: string[] meals = { "巧克力蛋糕&quo ...

  5. 介绍一个十分牛逼的GitHub看代码神器,零基础必学会的操作。

    给大家介绍一个非常实用的工具,有了它,我们可以在几秒之内用 VS Code 打开 GitHub 上的任意一个 Repo,无需 Clone,速度飞快. 用法也十分简单而且好记,下面给大家介绍下. 介绍 ...

  6. 普鲁克分析(Procrustes Analysis)评估物种-环境/功能关联度的一个示例

    R包vegan的普鲁克分析(Procrustes Analysis)示例 几天前,同学咨询这篇文献中的分析方法,先来看一下(部分截图). (Zhao et al, 2019) 大体意思是,作者测量了活 ...

  7. php调用其它控制器,TP框架控制器里面怎么调用另一个控制器的代码

    我网站TP框架,一个前台D:\WWW\User\Home\Controller\CommonController.class文件,一个后台D:\WWW\snadmin\Home\ControllerC ...

  8. java订单类_基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...

  9. Android Studio 导入 so 简明教程:通过一个示例让你理解整个过程

    Introduction 如果你是一名 C/C++ 开发人员,正在尝试将 C/C++ 的代码往安卓上迁移,那么这篇文章对你有很大的帮助 如果你是一名 Android 开发人员,正在尝试将外部 so 嵌 ...

最新文章

  1. 设置VSS2005使支持通过Internet访问(转)
  2. 登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$
  3. Python入门实战题目
  4. oracle12c的scott,Oracle12C创建scott账户
  5. P5327 [ZJOI2019]语言
  6. python中的封装调用_Python基础之封装
  7. 5G 和 IoT 究竟意味着什么?
  8. electron webview 页面加载事件顺序
  9. CoolFire系列讲座 第5讲:善用你所得到的任何资讯 (Exm: HOSTS 档)
  10. HashMap底层原理实现
  11. HX710_24位电子秤AD采集
  12. java解压zip压缩包
  13. 100个特别的遥感应用和用途
  14. [架构]京东咚咚架构演进
  15. [架构之美]一款APP从想法-开发-上线-产品的全过程
  16. mysql latch_MySQL中的latch(闩锁)详解——易产生的问题以及原因分析
  17. Latex论文写作各种小问题
  18. 起源地杯青年足球锦标赛
  19. 14个python就业前景_python普通人学有什么用 就业前景和工资待遇怎么样
  20. HOTMAIL搭建企业邮箱

热门文章

  1. 如何选择适合自己的域名?怎么选择域名?
  2. kbengine运行mysql error access denied for user ‘kbe@localhost‘
  3. Web前端响应式框架
  4. LSC问题(不连续问题)
  5. c语言程序while,C语言之while循环
  6. Oracle ERP数据转换论
  7. 【范县城关镇社工站】“快乐无忧,健康相守”活动
  8. sorl 查询 跟 mybatisboot集成sorl
  9. java怎么实现七天封禁玩家_java中如何踢人下线?封禁某个账号后使其会话立即掉线!...
  10. 解决360 兼容模式下问题