主要内容

为运行时间计数器生成代码

这个例子展示了一个模型,它包括一个触发子系统,放大器,由一个使用运行时间计数器的离散时间积分器块组成。该模型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;

相关的话题