关于数据类型强制转换的分析和应用

描述

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输出为整形。生成代码,会看到比较有意思的错误提示。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分