Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

写在前面,一个小tips:用低版本打开高版本slx的方法如下,这个方法不是万能的,可能会引发一些错误,谨慎使用。
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

目录

  1. 代码生成的常用界面
  2. 代码基本结构
  3. 代码生成过程

代码生成的常用界面

以官方slx文件(piCtrl.slx)为基础,以matlab 2019b为工具,
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
该模型实现的是如下公式:
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

有如下几个常用界面:
1)configset里的solver界面
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
2)configset里的code generation界面
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
3)这里有特别重要的几个界面:

  • c code:可在APP里搜索embedded coder,用于代码生成和测试的主界面;
  • code:显示生成的代码和模型的链接关系(如下图,点击模型中具体模块,就可链接到对应code);
  • model data editor:设置模型中数据属性;
  • code mapping:设置代码中数据和函数属性的默认行为。
    Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
    Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

代码基本结构

代码文件的主结构
生成后的代码如下Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
好多人搞不清这些文件有什么区别和联系,包含了什么什么东西。这里拆解分析一下,生成的文件一般分为7个:

  • model.c:定义3个入口函数(entry points function),initial_func,step_func(其中包含算法),terminal_func
  • model.h:声明模型中的数据结构(data structure),全局数据和全局函数(extern)
  • model_private.h:模型或子模型的局部变量(local),一般被model.c所#include;
  • model_types.h:包含实时模型(real-time model)的数据结构声明,一般函数复用时的函数声明会放在该文件中。
  • rtwtypes.h:宏定义数据类型,为了统一matlab中数据类型和目标板中数据类型的名称。
  • ert_main.c:代码生成的默认主函数,用来调用入口函数的。其中还包含一个overrun的标志位判断,防止程序超时。
  • model_data.c:该文件不一定每次都生成,用于包含参数结构(parameter)声明(declaration)和常量模块(constant block)的I/O口数据结构声明
    Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

主循环函数

ert_main.c是默认生成的主循环函数,用来调用3个入口函数:

  • model_initialize :程序开始运行前执行(定义在model.c中)。包含错误标志位初始化、外部输入输出初始化、初始状态初始化。
  • rt_OneStep:由周期中断调用该函数,内部包含OverrunFlag的标志位检测和model_step函数(定义在model.c中)
  • model_terminate:程序执行结束后执行(定义在model.c中)

ert_main.c截取如下:
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
piCtrl.c截取和对应公式如下:
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

信号声明与定义

参数声明与定义

入口函数
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

模型的数据结构
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD

代码生成过程

Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD