用C调用C库函数图表
Stateflow®图表在仿真软件金宝app®模型有一个动作语言属性定义的语法状态和转换操作。一个图标左下角的图画布显示图表的动作语言。
MATLAB®作为动作语言。
C作为动作语言。
调用C库函数
你可以叫这个子集的C数学库函数:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*的Stateflow |
|||||
* *你也可以调用C数学库替换为特定于应用程序的实现这个功能的子集。有关更多信息,请参见置换的数学库函数与应用程序的实现。 |
当您调用这些函数,应用双精度,除非所有输入参数显式单精度。当发生类型不匹配时,预期的输入参数的类型替换原来的参数。例如,如果您调用罪
函数与一个整数参数,一个输入参数的类型的浮点数双
替换原来的论点。
请注意
因为C库函数的输入参数是第一个把浮点数,函数调用的参数类型int64
或uint64
可能导致丧失精度。
如果你调用其他上面未列出的C库函数,包括适当的# include……
声明模拟目标面板的配置参数。
abs的函数调用
解释Stateflow腹肌
功能超出了标准C版本包括所有类型的整数和浮点参数如下:
如果
x
是一个整数类型的吗int32
或int64
,标准的C函数腹肌
适用于x
,或abs (x)
。如果
x
是一个整数类型的吗int16
或int8
标准C腹肌
适用于的函数x
作为一个整数类型的int32
,或abs ((int32) x)
。如果
x
是一个浮点数类型的吗双
,标准的C函数晶圆厂
适用于x
,或晶圆厂(x)
。如果
x
是一个浮点数类型的吗单
,标准的C函数晶圆厂
适用于一个
的x
作为一个双
,或晶圆厂((双)x)
。如果
x
定点数,标准的C函数晶圆厂
适用于定点数的双
,或晶圆厂((双)Vx)
,在那里Vx
的实际价值x
。
如果你想使用腹肌
严格意义上的功能标准C,其参数或返回值的整数类型。看到类型转换操作。
请注意
如果你声明x
在自定义代码,标准C腹肌
函数在所有情况下都适用。关于自定义代码插入图表的说明,请参阅重用定制代码Stateflow图表。
调用min和max函数
你可以叫最小值
和马克斯
通过发出以下宏自动生成的代码的顶部。
#定义最小值(x1, x2) ((x1) > (x2) ?(x2): (x1) # define马克斯(x1, x2) ((x1) > (x2) ?(x1): (x2))
允许兼容用户图形函数命名min ()
或max ()
,生成的代码使用了一个支离破碎的名字下面的形式:<前缀> _min
。然而,如果你出口min ()
或max ()
图形函数模型中其他图表,这些函数的名字不再能发出与支离破碎的名字在生成的代码和冲突发生。为了避免这种冲突,重命名min ()
和max ()
图形化功能。
置换的数学库函数与应用程序的实现
您可以配置更改代码的代码生成器生成等数学库函数代码满足应用需求。要做到这一点,你配置代码生成器应用代码替换库(CRL)代码生成。如果你有一个嵌入式编码器®许可证,您可以开发和应用自定义代码替换库。
关于替换代码的更多信息,使用代码替换MathWorks的库®提供,请参阅什么是代码替换?(金宝app仿真软件编码器)和代码替换库(金宝app仿真软件编码器)。开发自定义代码替换库的信息,请参阅代码替换定制是什么?(嵌入式编码)代码你可以取代从仿真软件模型金宝app(嵌入式编码)。
调用自定义C代码的功能
您可以指定自定义代码函数用于C图仿真和C代码生成。
为模拟指定自定义的C函数
为模拟指定自定义C函数:
打开模型配置参数对话框。
选择模拟目标。
指定您的自定义C文件中描述访问自定义C代码Nonlibrary图表。
指定自定义代码生成的C函数
指定自定义代码生成的C函数:
打开模型配置参数对话框。
选择代码生成>自定义代码。
指定您的自定义C文件中描述所有图表整合外部代码(金宝app仿真软件编码器)。
指南中调用自定义的C函数图
定义一个函数通过它的名称,任何参数在括号中,和一个可选的分号。
将参数传递给用户编写的函数使用单引号。例如,
func(字符串)
。一个动作可以嵌套函数调用。
一个动作可以调用函数返回标量值的类型
双
对于任何类型的MATLAB函数和在C编写函数的情况下)。
指南编写自定义C函数访问输入向量
使用
运算符
函数来确定一个输入向量的长度。例如,您的自定义函数可以包含一个For循环使用
运算符
如下:(我= 0;我< sizeof(输入);我+ +){……}
如果您的自定义函数使用多次输入向量长度的值,包括一个输入函数指定了输入向量的长度。
例如,您可以使用
input_length
第二个输入总和
函数如下:int和(双*输入,双input_length)
你的
总和
函数可以包含一个for循环遍历输入向量的所有元素:(我= 0;我< input_length;我+ +){……}
函数调用在过渡行动
函数调用的示例格式使用过渡动作符号出现在下列图表。
一个函数调用fcn1
发生在__arg1
,最长
,长度
如果以下事实:
S1
是活跃的。事件
e
发生。条件
c
是真的。过渡的目的地
S2
是有效的。
从过渡作用S2
来S3
显示了一个函数调用嵌套在另一个函数调用。
函数调用在国家行动
函数调用的示例格式使用状态动作符号出现在下列图表。
图表执行发生如下:
当默认进入
S1
发生时,S1
变得活跃。的
条目
行动,一个函数调用fcn1
使用指定参数,执行。5秒之后的仿真时间,
S1
变得不活跃,S2
变得活跃。的
在
行动,一个函数调用fcn2
使用指定参数,执行。仿真时间10秒后,
S2
变得不活跃,S1
再次变得活跃。模拟步骤2到5重复,直到结束。
通过引用传递参数
Stateflow动作可以通过引用传递参数到一个用户编写的函数,而不是价值。特别是,一个动作可以传递一个指针指向一个值而不是价值本身。例如,一个操作可以包含以下电话:
f (x);
在哪里f
是一个自定义代码的C函数,期望一个指针x
作为参数。
如果x
是一个数据项的名称中定义Stateflow层次结构,应用以下规则:
不使用指针传递数据项输入从一个仿真软件模型。金宝app
如果你需要通过一个输入项的引用,例如,一个数组,将项目分配给当地的数据项,通过当地的项目参考。
如果
x
是一个模型金宝app输出数据项以外的数据类型吗双
,表属性在仿真软件使用强数据类型I / O金宝app必须在(看到了吗指定属性Stateflow图表)。如果数据类型的
x
是布尔
,你必须关掉编码器的选择使用bitsets存储状态配置。如果
x
是一个数组的第一个索引属性设置为0(看到了吗设置数据属性),那么您必须调用函数,如下所示。f (& (x [0]));
这通过一个指向第一个元素的指针
x
的函数。如果
x
是一个数组的第一个索引属性设置为一个非零的数量(例如,1),该函数必须在以下方式:f (& (x [1]))
;这通过一个指向第一个元素的指针
x
的函数。