主要内容

DWork矢量基础知识

什么是DWork向量?

DWork向量是s函数向Simulink请求的内存块金宝app®引擎分配给模型中s函数的每个实例。如果模型中可能出现多个s函数实例,则s函数必须使用DWork向量而不是全局或静态内存来存储s函数变量的特定实例值。否则,s函数将面临一个实例覆盖另一个实例所需的数据的风险,从而导致模拟失败或产生不正确的结果。将调用跟踪s -函数的多个实例的能力可重入性

通过使用引擎为s -函数的每个特定实例管理的DWork向量,可以创建可重入的s -函数。

DWork向量有几个优点:

  • 为块变量提供特定于实例的存储

  • 金宝app支持浮点、整数、指针和一般数据类型

  • 消除静态和全局变量

  • 直接与Simulink引擎交互以执行内存分配、初始化和金宝app回收

  • 在代码生成期间方便内联s函数

  • 提供对数据在生成代码中显示方式的更多控制

请注意

工作矢量是最通用和通用的工作矢量类型,下面几节将重点介绍它们的用途。Simu金宝applink产品提供了额外的基本类型的工作向量,支持浮点数、整数、指针和模式数据。金宝app你可以在基本工作向量

DWork向量为在模拟和代码生成期间设置数据的数据类型、名称等提供了最大的灵活性。下面的列表描述了你可以在DWork向量上设置的所有属性:

  • 数据类型

  • 大小

  • 数字类型,实数或复数

  • 的名字

  • 使用类型(见DWork向量的类型

  • 金宝app仿真软件编码器™标识符

  • 金宝app仿真软件编码器存储类

  • 金宝app仿真软件编码器C类型限定符

看到如何使用DWork向量有关如何设置这些属性的说明。这三个金宝app仿真软件编码器属性只属于代码生成,在模拟期间没有影响。

功向量和金宝app引擎

DWork向量的一个关键优势是它们与Simulink引擎的连接。金宝app在模拟的过程中,引擎将s函数从所有与DWork向量相关的内存管理任务中解脱出来。

要了解这种连接的用处,请考虑一个使用全局变量存储数据的s函数。如果一个模型中存在多个s函数副本,则s函数的每个实例都必须小心地分配、操作和释放它使用的每一块内存。

在使用DWork向量的s函数中,是引擎而不是s函数管理DWork向量的内存。在模拟开始时,引擎根据DWork矢量内容的大小和数据类型为每个s函数实例分配所需的内存。在模拟的最后,引擎会自动释放内存。

请注意

在模拟期间,您无法控制引擎如何为DWork向量分配内存。当使用金宝app仿真软件编码器软件中,您可以使用存储类在代码生成期间定制内存分配。看到ssSetDWorkRTWStorageClass有关使用存储类的更多信息的参考页。

该引擎还执行基于s功能中使用的DWork矢量类型的特殊任务。例如,它包括在模型范围的状态向量中存储离散状态信息的DWork向量,并使它们在状态日志记录期间可用。

功向量和金宝app编码器产品

DWork向量允许您自定义数据如何在生成的代码中显示。当代码生成时,金宝app仿真软件编码器代码生成器在模型的数据结构中包含DWork向量。DWork向量控制结构中使用的字段名。DWork向量还控制生成代码中使用的存储类和C类型限定符。看到sfun_rtwdwork.c了一个例子。