Simulink自动代码生成2——生成嵌入式代码(generating embedded code)TBD
写在前面,一个小tips:用低版本打开高版本slx的方法如下,这个方法不是万能的,可能会引发一些错误,谨慎使用。
目录
- 代码生成的常用界面
- 代码基本结构
- 代码生成过程
代码生成的常用界面
以官方slx文件(piCtrl.slx)为基础,以matlab 2019b为工具,
该模型实现的是如下公式:
有如下几个常用界面:
1)configset里的solver界面
2)configset里的code generation界面
3)这里有特别重要的几个界面:
- c code:可在APP里搜索embedded coder,用于代码生成和测试的主界面;
- code:显示生成的代码和模型的链接关系(如下图,点击模型中具体模块,就可链接到对应code);
- model data editor:设置模型中数据属性;
- code mapping:设置代码中数据和函数属性的默认行为。
代码基本结构
代码文件的主结构
生成后的代码如下
好多人搞不清这些文件有什么区别和联系,包含了什么什么东西。这里拆解分析一下,生成的文件一般分为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口数据结构声明
主循环函数
ert_main.c是默认生成的主循环函数,用来调用3个入口函数:
- model_initialize :程序开始运行前执行(定义在model.c中)。包含错误标志位初始化、外部输入输出初始化、初始状态初始化。
- rt_OneStep:由周期中断调用该函数,内部包含OverrunFlag的标志位检测和model_step函数(定义在model.c中)
- model_terminate:程序执行结束后执行(定义在model.c中)
ert_main.c截取如下:
piCtrl.c截取和对应公式如下:
信号声明与定义
参数声明与定义
入口函数
模型的数据结构