您可以在C代码中定义自定义结构,你可以用你的Stateflow的整合®图表中的Simulin万博1manbetxk®模型仿真和代码生成。例如,模型sf_bus_demo
使用自定义C函数写入到输出结构outbus
。通过与自定义代码共享数据,你可以增加用Stateflow支持的能力,并利用你的既有代码的优势。万博1manbetx欲了解更多信息,请参阅重用自定义代码的Stateflow图和访问总线信号通过Stateflow的结构。
在你的C代码,通过创建一个自定义的头文件中定义的结构。头文件包含的typedef
声明匹配的属性万博1manbetxSimulink.Bus
对象定义Stateflow的结构。例如,在模型sfbus_demo
,头文件counterbus.h
声明了三个自定义结构:
... typedef结构{INT输入;} SIGNALBUS;typedef结构{INT upper_saturation_limit;INT lower_saturation_limit;} LIMITBUS;typedef结构{SIGNALBUS inputsignal;LIMITBUS极限;} COUNTERBUS;...
在总线编辑器,定义万博1manbetxSimulink.Bus
对象,每个自定义结构相匹配的typedef
宣言。在里面头文件每场万博1manbetxSimulink.Bus
对象,输入包含匹配的头文件的名称的typedef
宣言。
配置你的C动作语言图表,包括自定义的C代码。
要包含模拟自定义代码,请参阅访问自定义C代码Nonlibrary图表。
要包含的代码生成自定义代码,请参阅利用型号配置参数集成外部代码(万博1manbetx编码器的Simulink)。
构建和运行模型。
当你写的是采取结构指针作为参数的自定义代码功能,通过地址传递Stateflow的结构。传递一个状态流结构或它的字段中的一个自定义函数的地址,使用&
运营商和点符号:
&outbus
提供了状态流结构的地址outbus
。
&outbus.inputsignal
提供了子结构的地址inputsignal
结构outbus
。
&outbus.inputsignal.input
提供字段的地址输入
下部结构outbus.inputsignal
。
欲了解更多信息,请参阅指数子结构和字段。
例如,模型sfbus_demo
包含自定义的C函数counterbusFcn
这需要结构指针作为参数。自定义头文件中包含此函数的声明:
的extern空隙counterbusFcn(COUNTERBUS * U1,U2 INT,COUNTERBUS * Y1,INT * Y2);
图表传递地址给状态流结构counterbus_struct
和outbus
通过使用这个函数调用:
counterbusFcn(&counterbus_struct,U2,&outbus,&Y2);
该函数读取图表输入的值U2
和局部结构counterbus_struct
。其写入图表输出Y2
和输出结构outbus
。