第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Simulink自动代码生成2——生成嵌入式代码(generating embedded code)

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

时间:2019-03-08 08:18:34

相关推荐

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

写在前面,一个小tips:用低版本打开高版本slx的方法如下,这个方法不是万能的,可能会引发一些错误,谨慎使用。

目录

1. 代码生成的常用界面

2. 代码基本结构

代码文件的主结构主循环函数生成代码中的数据综述信号声明与定义参数声明与定义入口函数模型的数据结构

3. 代码生成过程

模型编译代码生成可执行文件生成(可选)

1. 代码生成的常用界面

以官方slx文件(piCtrl.slx)为基础,以matlab b为工具,

该模型实现的是如下公式:

有如下几个常用界面:

1)configset里的solver界面

2)configset里的code generation界面

3)这里有特别重要的几个界面:

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

2. 代码基本结构

代码文件的主结构

生成后的代码如下

好多人搞不清这些文件有什么区别和联系,包含了什么什么东西。这里拆解分析一下,生成的文件一般分为7个:

model.c:定义3个入口函数(entry points function),initial_func,step_func(其中包含算法),terminal_funcmodel.h:声明模型中的数据结构(data structure),全局数据和全局函数(extern)model_private.h:模型或子模型的局部变量(local),一般被model.c所#include;model_types.h:包含实时模型(real-time model)的数据结构声明,一般函数复用时的函数声明会放在该文件中。model_data.c:对模型中tunable的参数(parameter)进行赋初值,或者对I/O口数据结构声明(待定)。(该文件不一定每次都生成出来,具体看configset对参数的设置:inline不生成,tunable会生成)。rtwtypes.h:宏定义数据类型,为了统一matlab中数据类型和目标板中数据类型的名称。ert_main.c:代码生成的默认主函数,用来调用入口函数的。其中还包含一个overrun的标志位判断,防止程序超时。

主循环函数

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

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

ert_main.c截取如下(model_initialize / rt_OneStep / model_terminate):

piCtrl.c截取和对应公式如下(OverrunFlag / model_step):

生成代码中的数据综述

生成的代码中有3大类数据:signal,parameter和state。

上图数据可通过model data editor进行编辑,注意红框内容

其默认的命名方式如下,熟记命名规则有利于快速理解梳理代码。

设置在这里:

信号声明与定义

信号一般分为:状态,输入和输出。simulink一般会先在.h中定义信号的数据类型,再在.h中用该数据类型声明变量,最后再.c中定义信号并使用。

信号的数据类型定义 信号的声明 信号的定义

参数声明与定义

configset对参数有个重要的控制项:inline和tunable。默认为inline即内联,将参数直接用初值生成到代码中。tunable适配标定,将参数设置为变量然后赋初值,这样使得该参数可标定。

下面说下tunable的情况:参数与信号类似,但simulink一般把参数打包成一个结构体,先在.h中定义结构体,然后在types.h中用typedef对结构体类型另命名,再在.h中用typedef定义的结构体类型生成实例,最后在data.c中对结构体赋初值。

在.h中定义参数结构体 在types.h中用typedef对结构体类型另命名 在.h中用typedef定义的结构体类型生成实例 在data.c中对结构体赋初值

入口函数

在.h中对函数原型进行声明

在.c中对函数进行定义

模型的数据结构

模型的数据结构(model data structure)指的是根模型的timing,solvers等real-time信息。如ert_main.c中的OverrunFlag标志位。

model data structure和参数(parameter)很类似,如下:

在.h中结构体类型定义 在types.h中结构体typedef另命名 在.c中用extern将另命名后的结构体实例化声明 在.c中进行变量或指针的定义 在主函数中使用

3. 代码生成过程

过程分为3块:模型编译,代码生成,可执行文件生成(可选)。

编译过程:model.slx → model.rtw(描述文件:输入输出/变量) → .c.h → 通过makefile生成model.exe,图示如下:

详细描述3个步骤示图:

模型编译

代码生成

可执行文件生成(可选)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。