概述
2837xd 代码生成——StateFlow(4)
- 16 Chart调试
- 16.1 设置断点类型:
- 16.2 断点管理:
- 17 Watch Data
- 18 调用Work Space变量
- 19 StateFlow 调用c代码
- 20 2837d使用Chart进行构建模型搭建实例
16 Chart调试
在Animation中可以进行设置调试过程的转移速度。
16.1 设置断点类型:
1)chart只能打上进入时的断点:
打上断点后,左下角会有相应的标识。
2)State打断点,有三种类型:I、进入State II、在State中 III、退出State
打上断点后,State2左下角会出现相应的标识,点击能够看到断点类型:
3)同样的操作,转移也可以打入断点:
4)在Model Explorer中可以为事件打上断点:
16.2 断点管理:
点击任意一个断点,在出现的对话框中点击Breakpoints List进入断点管理。这个断点管理是不局限于某个模型的,若你打开了多个模型,则多个模型的断点都会在断点管理上显示。
断点管理界面如上,这里使用的官方例程(Command Window输入sf_car即可进入)。断点管理的界面上Condition含义是:当满足条件时,断点才会生效。这跟在C中打断点一样,我们有时候会希望在循环时,第多少次循环进入断点。Hits是记录进入断点的次数。
断点可以较快的定位Chart的错误之处。
17 Watch Data
在信号线上,右键可以选择加入Watch Data Window:
选择完毕之后,会弹出Watch Data Window的窗口。后面的DEBUG即可。
18 调用Work Space变量
调用的基本语言格式是
y=ml.x; //x需要在Work Space中已经进行定义;
注意:需要将chart的动作语言设置成为 C语言动作(Matlab语言不行)
其他操作同常规进行:
这里可以快速定义模型的回调函数,进行定义,免除手动定义(回调函数具体内容请自行查阅Simulink说明):
ml语句也可以进行重载:
y=ml('sin(%f)',u); //u是Work Space的变量,这里的sin函数可以替换成任何Matlab的内建函数
y=ml.my_sin(u); //my_sin是自己编写的matlb函数文件
19 StateFlow 调用c代码
分别编写好.c和.h文件放置在同一目录下:
然后进入 Configuration Parameters中进行相关的设置:
然后在Chart中进行调用即可。这里因为引入的是C语言文件,所以动作语言必须选择C语言。
20 2837d使用Chart进行构建模型搭建实例
这里搭建一个实时的计时器模块,其分为初始化模块和XINT模块和计数器模块。
1)变量这里使用的是Data Store Memory模块,在属性里面可以设置变量的类型。
2)初始化模块。初始化KEY作为外部中断使用,本来想用LED灯指示初始化过程,但是失败了。原因是:生成的代码将GPIO的两条指令放置在了step函数进行运行。现在想到的是,直接在初始化模块里面加入点亮和熄灭的函数。因为初始化模块加入的代码总是放置在初始化函数的最后面。打个比方:如果生成的代码使用到了GPIO0作为I/O使用,那么一定会在初始化模块中进行初始化。在初始化代码里面可以直接使用位操作给GPIO端口赋值就可以操作。但是后面的步长注意一定要使用到GPIO0。(这样才能保证被初始化)。
3)外部中断函数模块,这里两个中断函数功能一致。都是在中断函数中,将(0-1循环)的数值存入变量(XINT1、XINT2)中。如果上一次执行XINT函数,存储的是0,那么下一次执行就会存储1.这样就产生了一个脉冲的上升沿。对应的可以产生下降沿。这个边沿信号就可以作为Chart的事件。
4)Chart模块实现了计数的功能,可以由XINT1、XINT2分别启动和复位计数。这里的TIC事件是一个随着步长产生0、1序列,如果步长设置为0.01,那么当执行100次TIC事件。可以认为经过了1秒。经过60s就将min指定为+1。注意因为ccs使用c代码驱动,所以这里的chart动作语言必须选用c语言。
5)实验结果。这里直接开启SCI_A进入仿真模式,然后按下按键进入Running:
最后
以上就是积极茉莉为你收集整理的2837xd 代码生成——StateFlow(4)的全部内容,希望文章能够帮你解决2837xd 代码生成——StateFlow(4)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复