为运行时间计数器生成代码
这个例子展示了一个模型,它包括一个触发子系统,放大器
,由一个使用运行时间计数器的离散时间积分器块组成。该模型ex_elapseTime
在文件夹中matlab /帮助/工具箱/ rtw /例子
.
ex_elapseTime模型
放大器子系统
生成的头文件中的代码ex_elapseTime.h
该模型使用64位实现定时器的基本速率(clockTick0
而且clockTickH0
).
下面的子结构包含关于模型的时间信息的信息。*/ struct {time_T taskTime0;uint32_T clockTick0;uint32_T clockTickH0;time_T stepSize0;time_T tFinal;boolean_T stopRequestedFlag;}时机;
类的先前时间值和过去时间值分配存储空间放大器
子系统(Amplifier_PREV_T
)D_Work(州)
结构ex_elapsedTime.h
.
/*块状态(自动存储)为系统'<根>' */类型定义结构{real_T离散时间integrator_dstate;/* '/离散时间积分器' */ int32_T clockTickCounter;/* ' /Pulse Generator' */ uint32_T Amplifier_ELAPS_T[2];/* '<根>/放大器' */ uint32_T Amplifier_PREV_T[2];/* ' /放大器' */}DW_ex_elapseTime_T;
中的运行时间计算如下所示执行ex_elapseTime_step
功能:
/*——为触发子系统的输出:'<根>/放大器'合并:TriggerPort: '/触发器'——*/ zcEvent = rt_ZCFcn(RISING_ZERO_CROSSING, &ex_elapseTime_PrevZCX. ')Amplifier_Trig_ZCE ((real_T) rtb_PulseGenerator));if (zcEvent != NO_ZCEVENT) {elapseT_H = ex_elapseTime_M->定时。clockTickH0——ex_elapseTime_DW.Amplifier_PREV_T [1];如果(ex_elapseTime_DW。Amplifier_PREV_T[0] > ex_elapseTime_M->Timing.clockTick0) { elapseT_H--; } ex_elapseTime_DW.Amplifier_ELAPS_T[0] = ex_elapseTime_M->Timing.clockTick0 - ex_elapseTime_DW.Amplifier_PREV_T[0]; ex_elapseTime_DW.Amplifier_PREV_T[0] = ex_elapseTime_M->Timing.clockTick0; ex_elapseTime_DW.Amplifier_ELAPS_T[1] = elapseT_H; ex_elapseTime_DW.Amplifier_PREV_T[1] = ex_elapseTime_M->Timing.clockTickH0;
如上所示,运行时间被维护为触发子系统的一种状态。离散时间积分器块最终使用运行时间执行输出和更新计算。
/*——Discrete-Time Integrator: '/Discrete-Time Integrator'——*/ OUTPUT = ex_elapsetime_dww . discrete - teintegrator_dstate;/*——更新为离散时间积分器:' /Discrete-Time Integrator'合并:Constant: ' /Constant'——*/ ex_elapseTime_DW。离散时间积分状态+= 0.3 * (real_T) ex_elapseTime_DW。Amplifier_ELAPS_T [0] * 1.5;