嵌入式中的stateflow入门

准备:安装matlab,以2015b为例

一、启动stateflow

打开matlab,命令行中输入sfnew,回车

嵌入式中的stateflow入门

二、点击如下,可以选择想使用的控件,拖拽到工作界面即可

 

嵌入式中的stateflow入门

三、进入chart,右键可以添加输入、输出、局部变量等,注意下面的线上也命名

嵌入式中的stateflow入门

四、更新输入port的属性,以及信号线的属性,选择响应的类型即可

嵌入式中的stateflow入门

输入线的属性选择imported,这样生成代码提供声明

嵌入式中的stateflow入门

输出线的属性选择exported,这样生成代码提供定义

嵌入式中的stateflow入门

输出port不用变化,auto就行

五、对chart的工作环境进行设置,进入chart,右键如下图标:选择properties,进行如下设置

嵌入式中的stateflow入门

 

嵌入式中的stateflow入门

六、可以进行适当的逻辑设置,[]表示条件,{}表示结果,多个条件换行用…

满足条件就执行响应的下面的{}内容,1和2表示先判断哪个

右侧表示可以选择的控件

嵌入式中的stateflow入门

七、可以嵌套chart,如下

下面1,2,3表示4个条件可以由Idle跳到Deal,也有1,2两个条件从Deal跳到Idle。

说明:

1、after(10,tick)表示延迟10个周期(周期一般是MCU设定的,10ms任务、2ms任务等)

2、hasChangedTo(speedIn,200)表示speedIn变成200

3、hasChangedFrom(speedIn,200)表示speedIn上个值是200

4、A表示默认状态(必加,给程序一个初始状态)

Idle中的en、du、ex说明:

en:表示第一次进入Idle执行

du:表示在Idle状态中每个周期执行一次,deal图中的连接到框上含义相同

ex:表示退出Idle状态执行一次

嵌入式中的stateflow入门

 

嵌入式中的stateflow入门

八、生成代码设置

嵌入式中的stateflow入门

 

嵌入式中的stateflow入门

 

嵌入式中的stateflow入门

 

嵌入式中的stateflow入门

 

嵌入式中的stateflow入门

九、生成代码,点击如下,如没错误,即可生成代码

嵌入式中的stateflow入门

十、代码解析

下面speedOut为定义,函数LEDTest_step就可以放在10ms任务等,周期调用。

speedIn会在LEDTest.h中定义声明

 

嵌入式中的stateflow入门

 

嵌入式中的stateflow入门