关于使用Stateflow调用外部C代码的教程介绍

无论是simulink仿真,还是对模型做代码生成,已有c代码的调用都是我们经常会遇到的情形:
如何调用现有的外部c代码?
很多人首先想到的是s-function。的确,s-function提供了一种途径,可以让我们把c函数封装成simulink模块在simulink环境下运行。另外还有一种方式,叫做legacy code tool,说白了也是s-function,只是matlab提供了这样的接口便于用于实现s-function封装。这两种做法都不是我要介绍的。
我想跟大家说的是更方便的方法:
使用stateflow调用外部c代码。
假设有两个文件,myfile.c和myfile.h。其中myfile.c中定义了一个全局函数和全局变量,如下:
#include myfile.h
double x;
double myfun(double a, double b)
{
return a +b;
}
myfile.h文件是对全局函数myfun()和全局变量x的声明。
假如我已经为chart定义了两个输入input1和input2,一个输出output,那么stateflow里你就可以像下面这样使用这个函数和变量:
除此,你不仅可以使用flowchart去调用外部c代码,你也可以在状态机里调用外部代码,如下图:
当然,如果要做到上述直接调用c代码,需要做如下几点设置:
把stateflow的动作语言(action language)设置为c;
打开如下界面进行如图示的配置
以上是针对新版本matlab的界面。
对于老版本的matlab,在simulation target下面,还有一层custom code,作用和新版本是一样的。
这里我们有三个地方可以设置,insert custom c code in generated,这下面的几个栏,都是把右侧编辑框里的文本信息插入到stateflow生成的source file、header file以及initialize function和terminate function里面。
说到这里很多人可能会迷糊了,stateflow要生成代码?没错,stateflow的运行不同于simulink模块,simulink模块可以事先定义好各种行为或者动作,而stateflow chart里面的设计可能千差万别,没法事先定义chart的行为,所以在运行stateflow chart的时候,首先需要把这个chart转成s-function格式的c代码,然后编译成动态链接库文件(matlab里面扩展名是mexw32或者mexw64,32或者64取决于matlab的位数),而这个插入代码就发生在从chart转成c代码的过程中。比如,按照上图的设置,在生成的c代码的头文件中会有一行代码 #include “myfile.h”。
另外,additional build information里面,需要指定路径,在include directories里面给出要编译的c文件的路径,如果c文件和模型在同一路径下,也可以不指定;在source files里面,给出要编译的c文件myfile.c。这部分内容,是告诉编译器和链接器需要编译的c文件在什么路径下以及需要编译哪些自动生成的文件之外的c文件。
说到底,对于现有c代码的调用,无论是自己编写s-function,还是使用legacy code tool创建s-function模块,或者使用stateflow,最终的实现方式都是s-function(动态链接库)相比之下,使用stateflow会更便利、更直观一些。

基于指纹识别专用芯片FCHIP2的功能特性及应用方案
小米6配置信息总汇 来看看是否值得为发烧剁手
差分信号0和1是什么?差分信号怎么区分正负?
C8051单片机在交流变频调速系统中的应用(收集)
华为中国合作伙伴大会2023 | “华为数据通信”与“华为网络安全技术与实践”系列书籍重磅发布
关于使用Stateflow调用外部C代码的教程介绍
昆仑芯新品R100正式发布,强大算力赋能边缘推理场景
瑞萨电子推全新精密温度传感器TS5111,适用于DDR5存储模块
Linux的TCP连接数量最大不能超过65535?
太阳能电池的工作原理是什么?
做芯片设计的都用什么操作系统呢?
电磁阀的工作原理以及电磁阀的种类
Nexperia推出的超微型MOSFET占位面积减小36%,且具备低导通电阻RDS(on)
咖啡智能改变未来出行方式
Spot Mini跳芭蕾,你见过吗?
电脑硬件基础篇电源(电源工作原理及作用_特性参数及型号和位置)
通往碳中和之路该如何走?欢迎阅读最新一期恩智浦《可持续发展故事》
Freescale推出i.MX35系列应用处理器的产品研发套
方案分享:如何解决汽车虚拟仪表盘设计
游戏显示器的未来