主要内容

C函数

从Simulink模型集成和调用外部C/ c++代码万博1manbetx

  • 库:
  • 万博1manbetxSimulink /用户定义函数

  • C功能块

描述

C函数block从Simulink集成和调用外部C/ c++代码万博1manbetx®模型。使用此块定义外部代码,并通过预处理或后处理数据自定义代码的集成。此外,您还可以为模拟和C代码生成指定定制代码。您可以有条件地调用代码中定义的函数,也可以在一个块中调用多个函数。使用此块,可以初始化持久数据并将其传递给外部函数。

C函数Block支万博1manbetx持初始化持久数据和从块对话框调用外部函数。持久数据可以包括自定义代码中定义的c++类的对象。看到使用C函数块与c++类接口.块只支持初始化和终止万博1manbetx持久数据。该块不支持在模拟过程中更新数据。万博1manbetx要对具有连续状态的动态系统建模,可以使用功能块。要了解关于s函数的更多信息,请参见什么是s函数?

类调用的源代码和支持文件万博1manbetxC函数模拟目标窗格中的“模型配置参数”对话框。看到模型配置参数:仿真目标

请注意

C99是C语言的标准版本,支持自定义C代码集成到Simulink中。万博1manbetx万博1manbetx

调用C库函数

类中直接调用这些C数学库函数C函数块。

腹肌 这些“可信赖医疗组织” 印度历的7月 : 量化 装天花板
因为 cosh 经验值 晶圆厂 地板上 在你
实验室 ldexp 日志 log10 战俘
sinh √6 棕褐色 双曲正切

当您调用这些函数时,除非所有输入参数都显式地为单精度,否则将应用双精度。当发生类型不匹配时,将输入参数转换为预期类型将替换原始参数。例如,如果调用函数的整数实参,将输入实参转换为类型的浮点数替换原来的参数。

若要调用其他C库函数,请创建并调用调用C库函数的外部包装器函数。

调用腹肌晶圆厂,实验室功能

解释腹肌晶圆厂,实验室函数C函数block超越了标准C版本,包括整型和浮点型参数:

  • 如果x是整数,标准C函数腹肌适用于x,或abs (x)

  • 如果x是double,标准C函数实验室适用于x,或实验室(x)

  • 如果x是一个单一的,标准的C函数晶圆厂适用于x,或晶圆厂(x)

基于类型的CRL (Code Replacement Library)

函数调用应该根据传递给函数的数据类型调用正确的CRL。如果没有指定CRL,对函数的调用应该调用特定类型的库。C99的CRL生成一个特定于类型的函数。例如:

传入的类型 代码生成调用
sin (doubleIn) sin (doubleIn)
sin (floatIn) sinf (floatIn)

限制

的这些特性与万博1manbetxC函数块。

  • 万博1manbetx仿真软件覆盖™

    只测量执行覆盖率。

  • 万博1manbetxSimulink Code Inspector™

  • 万博1manbetxSimulink设计验证器™

  • 万博1manbetx仿真软件测试™

    -测试线束

类中指定的C代码适用这些限制C函数块。

  • 的局部静态变量静态关键字不支持。万博1manbetx若要跨时间步骤缓存值,请将符号定义为持续的符号表的块对话框。

  • 你不能# include代码中的文件。包含外部函数的文件必须在模拟目标窗格中的“配置参数”窗口。

  • 取a的地址常数不支持符号。万博1manbetx

  • 不支持直接调用C库函数,而不是上面列出的C数学库函数。万博1manbetx若要调用其他C库函数,请创建并调用调用C库函数的包装器函数。

港口

输入

全部展开

输入端口的数量由所带符号的数量决定输入输入输出定义的范围符号表中的块参数对话框。每个输入端口标签与端口名称相同输入输入输出符号,除非您通过编辑标签符号表的块对话框。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|枚举|公共汽车

输出

全部展开

输出端口的数量由所带符号的数量决定输出输入输出定义的范围符号表中的块参数对话框。每个输出端口标签与端口名称相同输出输入输出符号,除非您通过编辑标签符号表的块对话框。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|布尔|枚举|公共汽车

参数

全部展开

在模拟过程中,块在每个时间步骤执行的输出代码,指定为字符向量或字符串标量。例如,您可以从外部C代码调用函数,修改结果,并执行将结果传递给其他块的操作。

编程使用

块参数:OutputCode
类型:字符向量或字符串标量
值:""|C代码
默认值:""

块在模拟开始时执行一次的初始化代码,指定为字符向量或字符串标量。例如,可以初始化持久符号。

编程使用

块参数:StartCode
类型:字符向量或字符串标量
值:""|C代码
默认值:""

在启用放置块的子系统或模型时执行的块的重新初始化代码,指定为字符向量或字符串标量。代码在模拟开始时执行一次,并且如果块在包含的子系统或模型中启用启用时的状态参数设置为重置,每当子系统或模型从禁用切换到启用时,代码也会执行。看到使用已启用的子系统.例如,您可以使用此代码来设置初始输出值或重置持久变量的值。

编程使用

块参数:InitializeConditionsCode
类型:字符向量或字符串标量
值:""|C代码
默认值:""

块在模拟结束时执行一次的终止代码,指定为字符向量或字符串标量。例如,使用此代码释放缓存在指定为void指针的持久符号上的内存。

编程使用

块参数:TerminateCode
类型:字符向量或字符串标量
值:""|C代码
默认值:""

C代码中使用的符号和符号属性,以表的形式指定。您必须在表格中输入每个符号的以下属性:

  • 的名字-代码中的符号名称。

    如果符号表示c++类对象,则的名字字段作为类构造函数的调用:

    对象名Argument1Argument2,……)

  • 范围—符号的范围。这些作用域是可用的:

    • 输入-输入块。

    • 输出-输出到块。

    • 输入输出-块的输入和输出。

      使用输入输出作用域映射C代码中指针传递的输入。创建的端口输入输出范围的输入和输出端口具有相同的名称。输入输出作用域支持输入和输出端口的缓冲区重用。缓冲区重用可以优化内存使用,提高代码模拟和代码生成效率,这取决于信号大小和块布局。限制包括:

      • 一个输入输出符号不能用于开始代码初始化条件代码,或终止代码

      • 输入输出符号不支持万博1manbetxvoid *数据类型。

      • 输入输出符号不支持万博1manbetx尺寸()表达式。

    • 参数-出现在块参数掩码上的块参数。参数名由标签这个符号。

    • 持续的—持久块数据,在模拟过程中从一个时间步长保持到下一个时间步长的值。

      方法定义空指针持续的范围。一个空指针是一个指针,可以存储您创建或分配的任何类型的数据。

      使用定义的符号,可以实例化自定义代码中定义的c++类的对象持续的适用范围及用途类:类名称随着类型为了这个符号。看到使用C函数块与c++类接口

    • 常数-常量值,使用值-大小或数值表达式定义。

  • 标签—符号的标签。对于带有输入输入输出,或输出范围时,该标签显示为块上的端口名称。对于带有参数范围时,标签出现在块参数掩码上。如果范围是常数,则标签为常数表达式。不能为定义标签持续的作用域符号。

  • 类型—符号的数据类型。在下拉列表中选择数据类型或自定义数据类型。

    支持自定义代码中定义的c++类类型万博1manbetx万博1manbetx仿真软件。公共汽车万博1manbetx仿真软件枚举,万博1manbetx仿真软件。AliasType类型。进入类型如表中所示。

    自定义类型 规范类型
    c++类 类:c++类名
    万博1manbetx仿真软件。公共汽车 总线:BusTypeName
    万博1manbetx仿真软件。枚举 枚举:EnumTypeName
    万博1manbetx仿真软件。AliasType AliasTypeName

  • 大小—符号数据的大小。您可以使用大小表达式来定义输出或使用的大小-1继承大小。

  • 港口—符号的端口索引。对于一个输入输入输出,或输出的象征,港口指定与符号对应的端口块上的端口索引。对于一个参数的象征,港口指定符号在块参数掩码中出现的顺序。

编程使用

块参数:SymbolSpec
类型:SymbolSpec对象
值:SymbolSpec对象
默认值:的空数组象征对象

采样周期,以秒为单位。看到采样时间类型而且指定采样时间.如果块定义持久符号,则不能指定连续采样时间。

编程使用

块参数SampleTime
类型:字符串标量或字符向量
默认的“1”

块特征

数据类型

布尔一个|公共汽车一个|一个|枚举一个|整数一个|一个

直接引线

没有

多维信号

是的

适应信号

没有

讨论二阶导数过零检测

没有

一个实际的数据类型或功能支持取决于块实现。万博1manbetx

扩展功能

版本历史

R2020a中引入