Simulink代码生成(二)——代码生成时模型的配置方法及操作流程
一、模型
示例模型为简单选择模型。
二、代码生成设置
1、步长选择
由于要生成嵌入式代码下载到开发板中,而我们的开发板都是采用定步长工作的,所以生成代码时也要选择定步长。
2、系统目标文件设置
系统目标文件是指导代码生成过程的总括。系统目标文件可以规定生成代码的全局结构,以匹配所支持的目标芯片群及目标语言。
常用的系统目标文件有以下两个:
- ert.tlc-针对嵌入式代码生成的系统目标文件。
- grt.tlc-生成通用式实时目标的C代码。
一般采用erg.tlc或者根据erg.tlc针对某芯片的TSP(Target Support Package)。
3、生成代码打开测试报告
4、保存代码生成过程rtw文件
rtw 文件作为模型编译器的输人文件和编译过程的中间产物, 记录了模型创建信息和编译信息、名字与版本号、配置参数集、输人输出、参数等所有信息。可以通过以下选项保留这个中间文件。
5、代码解析
生成的文件有以下7个,最重要的是untitled.c,该文件生成代码的结构和S-function有点类似,有三个函数:
- void untitled_initialize(void) - 进行初始化
- void untitled_step(void) - 循环跑
- void untitled_terminate(void) - 结束时执行的动作,通常可以不需要
这个文件
/*
* File: untitled.c
*
* Code generated for Simulink model 'untitled'.
*
* Model version : 1.3
* Simulink Coder version : 9.0 (R2018b) 24-May-2018
* C/C++ source code generated on : Wed Oct 12 21:32:40 2022
*
* Target selection: ert.tlc
* Embedded hardware selection: Intel->x86-64 (Windows64)
* Code generation objectives: Unspecified
* Validation result: Not run
*/
#include "untitled.h"
#include "untitled_private.h"
/* External inputs (root inport signals with default storage) */
ExtU_untitled_T untitled_U;
/* External outputs (root outports fed by signals with default storage) */
ExtY_untitled_T untitled_Y;
/* Real-time model */
RT_MODEL_untitled_T untitled_M_;
RT_MODEL_untitled_T *const untitled_M = &untitled_M_;
/* Model step function */
void untitled_step(void)
{
/* Switch: '<Root>/Switch' incorporates:
* Inport: '<Root>/In1'
*/
if (untitled_U.In1 > untitled_P.Switch_Threshold) {
/* Outport: '<Root>/Out1' incorporates:
* Gain: '<Root>/Gain'
*/
untitled_Y.Out1 = untitled_P.Gain_Gain * untitled_U.In1;
} else {
/* Outport: '<Root>/Out1' incorporates:
* Gain: '<Root>/Gain1'
*/
untitled_Y.Out1 = untitled_P.Gain1_Gain * untitled_U.In1;
}
/* End of Switch: '<Root>/Switch' */
}
/* Model initialize function */
void untitled_initialize(void)
{
/* Registration code */
/* initialize error status */
rtmSetErrorStatus(untitled_M, (NULL));
/* external inputs */
untitled_U.In1 = 0.0;
/* external outputs */
untitled_Y.Out1 = 0.0;
}
/* Model terminate function */
void untitled_terminate(void)
{
/* (no terminate code required) */
}
/*
* File trailer for generated code.
*
* [EOF]
*/