MATLAB/Simulink中一共提供三个代码生成的工具:
- MATLAB Coder
- Simulink Coder
- Embedded Coder
从名字能看出来,MATLAB Coder用于m脚本生成C/C++代码;而Simulink Coder用于模型、Stateflow等生成C/C++代码;而Embedded Coder是上述两者的集成,同时扩展了在嵌入式开发中必不可少的特性。
一个模型要能生成嵌入式代码,至少需要满足以下两个要求:
- Simulink求解器设置为定步长;
- 选择代码生成的系统目标文件ert.tlc。(ert的全称为Embedded Real Time)。
新建文件夹,新建模型,命名为code_test
在2019a的基础上,新建模型,求解器只做如下修改
模型如下图所示:
关于该 模型实现的功能参考如下文章:
https://blog.csdn.net/BlueBachke/article/details/131911653
在代码生成的地方选择ert.tlc
生成报告并打开
运行模型,发现正常运行未报错
01--可变大小信号代码生成设置
Ctrl+B生成代码,发现报如下错误:
上面模型所使用的模块中find模块是可变大小的模块,当前代码生成不支持。
这个可以通过代码生成-接口内进行设置。
02--主函数main生成设置
完成上面的设置后,再生成代码,代码报告如下:
ert_main.c 是主函数的源文件,初始化模型或调度等。若在项目的工程文件中,有定义工程的主函数,可以在代码生成的配置中取消main函数的生成。
继续Ctrl+B进行验证:
03--该模型生成A2l的设置
04--代码打包进_sharedutils文件夹内:
选择Auto时
该文件夹内容:
修改之后:
相当于把Shared files文件代码放到了_sharedutils文件夹内
当多个模型生成代码需要放到一个工程中时(并行开发时常出现这种情况),有些文件是最需包含一次的如rtwtype.h。此时可以通过如下设置把共享文件分离出来以便管理。该选项会把共享文件放在\slprj\ert_sharedutils里。
05--生成多个代码
有时发现一个模型出现了很多代码和头文件
在上述模型中新增一个子系统模型
子系统内部:
有状态机和S-function
将该子系统设置为原子子系统
该部分代码可参考:
https://blog.csdn.net/BlueBachke/article/details/131323819
红框处若都设置为Auto,则不会单独生成代码
生成后:
当然,如果你的模型内引用了自己搭建的库浏览器内的模块,那么,也会对应生成库浏览器对应的源文件和头文件
06--数据类型类定义
当你设置了新的数据类型定义时,要在关联的sldd内再定义,否则生成代码报错
在sldd定义后可build通过
详细可参考该文档