Bootstrap

Matlab/Simulink之Embedded Coder代码生成的配置

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通过

详细可参考该文档

Simulink代码生成:AliasType配置_chhttty的博客-CSDN博客

;