要从响应初始化、重置和终止事件的建模组件生成代码,请使用块初始化函数和终止函数. 有关如何使用这些块的信息,请参见自定义初始化、重置和终止函数(万博1manbetx模型)。您可以在模型层次结构的任何地方使用这些块。
何时生成响应初始化、重置或终止事件的代码的示例包括:
启动和停止组件。
计算初始条件。
从非易失性存储器保存和恢复状态。
生成响应外部事件的复位入口点函数。
每个非虚拟子系统和参考模型都可以有自己的一组初始化、重置和终止功能。
代码生成器生成的初始化和终止代码与重置代码不同。对于初始化和终止代码,代码生成器在默认的入口点函数中包括组件的初始化和终止代码,
和模型
_initialize
。只有在建模重置行为时,代码生成器才会生成重置代码。模型
_terminate
当您为包含初始化函数和终止函数块,代码生成器:
在入口点函数中包含初始化事件代码和默认初始化代码
。模型
_initialize
在入口点函数中包含带有默认终止代码的终止事件代码
。模型
_terminate
考虑到模型rtwdemo_irt_base。
对于此模型,代码生成器生成其他代码可以与之交互的初始化和终止入口点函数。
Void rtwdemo_irt_base_initialize(Void) / /初始化
此代码将显示在生成的文件中rtwdemo_irt_base.c
。初始化函数,rtwdemo_irt_base_initialize
:
初始化错误状态。
为块I/O和状态参数分配内存。
设置输出值
设置离散积分器的初始条件。
终止函数,,rtwdemo_irt_base_terminate
,不需要代码。
此代码假设禁用了对非有限数字和mat文件日志记万博1manbetx录的支持。
void rtwdemo_irt_base_initialize(void){rtmsterrorstatus(rtwdemo_irt_base_M,(NULL));(void)memset((void*)和rtwdemo_irt_base_DW,0,大小(DW_rtwdemo_irt_base_base_T));rtwdemo_irt_base_base_Y.Out1=0.0;rtwdemo_irt_base_base_base_base_基_基_离散化=0.0;//(终止代码){
添加初始化函数和终止函数块到模型(参见rtwdemo\u irt\u初始术语
).函数块使用国家作家块设置离散积分器块的初始条件。终止功能块包括一个国家的读者块,它读取离散积分器块的状态。
的事件类型参数事件监听器块的初始化和终止函数初始化
和终止
初始化函数使用状态写入程序块将离散积分器块的输入值初始化为10。终止函数使用状态读取器块读取离散积分器块的状态。
代码生成器包括为Initialize函数生成的事件代码,以及使用入口点函数中的标准Initialize和Terminate代码终止函数块rtwdemo_irt_initterm_initialize
和rtwdemo_irt_initterm_terminate
。此代码假设禁用了对非有限数字和mat文件日志记万博1manbetx录的支持。
void rtwdemo_irt_initterm_initialize(void) {rtmSetErrorStatus(rtwdemo_irt_initterm_M, (NULL));(void) memset((void *)&rtwdemo_irt__initterm_DW, 0, sizeof(DW_rtwdemo_irt__initterm_T));rtwdemo_irt_initterm_Y。着干活= 0.0;rtwdemo_irt_initterm_DW。DiscreteIntegrator_DSTATE = 10.0;} void rtwdemo_irt__initterm_terminate(void){/*(不需要终止代码)*/}
生成响应重置事件的代码初始化函数或终止函数建模组件中的块。通过设置事件类型参数的事件监听器块重置
. 还设置了事件名称参数默认名称为重置
。
代码生成器生成重置入口点功能只有如果对重置行为建模。如果组件包含多个重置规范,则代码生成器生成的代码取决于重置函数是否共享事件名称。对于给定组件层次结构:
对于具有唯一事件名称的重置函数,代码生成器为每个命名事件生成单独的入口点函数。每个函数的名称都是相应事件的名称。
对于共享事件名称的重置函数,代码生成器将重置代码聚合为一个入口点函数。重置函数的代码按顺序显示,从组件层次结构的最低级别(最内层)开始,以根(最外层)结束。函数的名称为
。有关更多信息,请参见事件名称和代码聚合。模型
_reset
考虑到模型rtwdemo\u irt\u重置
,包括从初始化功能块派生的重置功能块。
的事件类型和事件名称参数事件监听器块被设置为重置
和重置
分别地该函数使用状态写入程序块将离散积分器块的输入值重置为5。
代码生成器产生reset函数rtwdemo_irt_reset_reset
。
void rtwdemo_irt_reset_reset(void){rtwdemo_irt_reset_DW.DiscreteIntegrator_DSTATE=5.0;}
使用初始化函数和终止函数块,用于为组件层次结构定义多个初始化、重置和终止函数。每个层次只定义一个初始化函数和一个终止函数。可以为层次结构级别定义多个重置函数。在给定级别上为函数配置的事件名称必须是唯一的。
在生成代码时,代码生成器将整个组件层次结构中具有给定事件名的函数的代码聚合到一个入口点函数中。重置函数的代码按顺序出现,从组件层次结构的最低层(最内层)开始,以根(最外层)结束。代码生成器使用事件名来命名函数。
例如,模型rtwdemo_irt_shared
包括复制父模型中的初始化、重置和终止功能的子系统。
尽管模型包含initialize、reset和terminate函数的多个副本,但代码生成器为reset生成一个入口点函数(rtwdemo_irt_shared_reset
),一个用于初始化(rtwdemo_irt_shared_initialize
),一个用于terminate (rtwdemo\u irt\u共享\u终止
).在每个入口点函数中,在列出配置了初始条件(
),代码生成器对组件的代码进行排序,从层次结构的最低级别开始,以根结束。模型
_P。块
_集成电路
. . .void rtwdemo_irt_shared_reset(void) {rtwdemo_irt_shared_DW。SubIntegrator2_DSTATE = 5.0;rtwdemo_irt_shared_DW。Integrator2_DSTATE = 5.0;}…void rtwdemo_irt_shared_initialize(void) {rtmSetErrorStatus(rtwdemo_irt_shared_M, (NULL));(void) memset(((void *)&rtwdemo_irt_shared_DW), 0, sizeof(DW_rtwdemo_irt_shared_T));rtwdemo_irt_shared_Y。着干活= 0.0;rtwdemo_irt_shared_DW。Integrator1_DSTATE = 0.0; rtwdemo_irt_shared_DW.SubIntegrator2_DSTATE = 2.0; rtwdemo_irt_shared_DW.Integrator2_DSTATE = 10.0; . . . void rtwdemo_irt_shared_terminate(void) { /* (no terminate code required) */ }
如果将子系统重置功能配置的事件重命名为reset_02
,代码生成器生成两个重置入口点函数,rtwdemo_irt_shared_reset
和rtwdemo\u irt\u共享\u重置\u 02
。
void rtwdemo_irt_shared_reset(void) {rtwdemo_irt_shared_DW。SubIntegrator2_DSTATE = 5.0;} void rtwdemo_irt_shared_reset_02(void) {rtwdemo_irt_shared_DW。Integrator2_DSTATE = 5.0;}
不能从线束模型(包含模型块的根模型)生成代码,该模型块公开初始化、重置或终止功能端口。