浏览模型示例
打开模型示例 rtwdemo_roll。
open_system('rtwdemo_roll')
该模型包含不连接到根级别 Inport 或 Outport 模块的内部信号。某些信号具有名称,例如 phiCmd 信号。
该模型还包含一些维护状态数据的模块。例如,在 BasicRollMode 子系统中,标记为 Integrator 的 Discrete-Time Integrator 模块用于维护状态。
在模型中,将 Configuration Parameters > Code Generation > System target file 设置为 grt.tlc。
set_param('rtwdemo_roll','SystemTargetFile','grt.tlc')
检查 Configuration Parameters > Code Generation > Interface > Code interface packaging 的设置。设置 Nonreusable function 表示生成的代码不可重用(可重入)。
对于此示例,通过清除 Configuration Parameters > Code Generation > Interface > Advanced parameters > Mat-file logging 生成更简单的代码。
set_param('rtwdemo_roll','MatFileLogging','off')
生成不可重用的代码
设置以下配置参数:
将 Default parameter behavior 设置为 Tunable。
清除 Signal storage reuse。
set_param('rtwdemo_roll','DefaultParameterBehavior','Tunable',...
'OptimizeBlockIOStorage','off')
从模型中生成代码。
rtwbuild('rtwdemo_roll')
### Starting build procedure for: rtwdemo_roll
### Successful completion of build procedure for: rtwdemo_roll
文件 rtwdemo_roll.h 定义了几种表示内部数据的结构体类型。例如,模块输入和输出结构体为模型中的每个内部信号定义一个字段。每个字段名称都派生自生成该信号的模块的名称,或者派生自该信号的名称(如果您指定了信号名称)。
file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.h');
rtwdemodbtype(file,...
'/* Block signals (default storage) */','} B_rtwdemo_roll_T;',1,1)
/* Block signals (default storage) */
typedef struct {
real32_T phiCmd; /* '/ModeSwitch' */
real32_T Abs; /* '/Abs' */
real32_T FixPtUnitDelay1; /* '/FixPt Unit Delay1' */
real32_T Xnew; /* '/Enable' */
real32_T TKSwitch; /* '/TKSwitch' */
real32_T RefSwitch; /* '/RefSwitch' */
real32_T Integrator; /* '/Integrator' */
real32_T DispLimit; /* '/DispLimit' */
real32_T Sum; /* '/Sum' */
real32_T DispGain; /* '/DispGain' */
real32_T RateLimit; /* '/RateLimit' */
real32_T Sum1; /* '/Sum1' */
real32_T RateGain; /* '/RateGain' */
real32_T Sum2; /* '/Sum2' */
real32_T CmdLimit; /* '/CmdLimit' */
real32_T IntGain; /* '/IntGain' */
real32_T hdgError; /* '/Sum' */
real32_T DispGain_a; /* '/DispGain' */
real32_T Product; /* '/Product' */
boolean_T NotEngaged; /* '/NotEngaged' */
boolean_T TKThreshold; /* '/TKThreshold' */
boolean_T RefThreshold2; /* '/RefThreshold2' */
boolean_T RefThreshold1; /* '/RefThreshold1'