C代码中经常会写到数据类型强制转换的语句,那么,
在Simulink模型里如何表达?
又如何配置,才能生成强制数据类型转换代码?
点击末尾的 “阅读原文” 下载本文的案例模型
数据类型转换
要得到:
y1 = (double)u1;
怎么做:
Simulink模型里有三种建模元素:Simulink框图、Stateflow流程图以及MATLAB Function模块里的m脚本。
在Simulink框图模型里使用Data Type Conversion模块来实现强制数据类型转换;在后两种则使用强制类型转换语句:out1 = double(in1)。
实例三
1. 建一个简单的Simulink模型
双击上图中Data Type Conversion模块设置输出数据类型为double。MATLAB Function以及Chart里的内容如下图:
2. 代码生成基本配置
求解器:定步长—离散求解器
系统目标文件:ert.tlc
3. 新建数据对象
打开Model Explorer,点击菜单的Add,在Base Workspace里定义输入输出信号的数据对象,如图设置输入为single类型,输出为dobule类型:
4. 信号关联
在信号线上右键,将信号与Base Workspace的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。因为这里的信号略多,所以可以使用命令的方式来实现:
此时,第一张模型截图中信号名前方的蓝色小叉子就会出现。
5. 生成代码
Ctrl+B,生成代码。
如前面所设置的,输入为real32,输出为real类型:
但此时从上图可以看到,由于是single转double,隐式转换,并没有想要的显示转换的代码。
在代码配置页面里,配置代码风格,Casting modes为Standards,符合MISRA的风格:Generate code that casts data types to conform to MISRA standards
再次生成代码,得到如图:
总结
所以说,在Simulink框图模型里使用Data Type Conversion模块来实现强制数据类型转换;在后两种则使用强制类型转换语句:out1 = double(in1)。
Tips:可以使用Model Advisor ,来检查模型的配置,以便生成的代码符合MISRA C的风格。
其它:保持y1信号名不变,数据类型设置为整形,并相应的设置Data Type Convers输出为整形。生成代码,会看到比较有意思的错误提示。
全部0条评论
快来发表一下你的评论吧 !