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

描述

C代码中经常会写到数据类型强制转换的语句,那么,

在Simulink模型里如何表达?

又如何配置,才能生成强制数据类型转换代码?

点击末尾的 “阅读原文” 下载本文的案例模型

数据类型转换

要得到:

y1 = (double)u1;

怎么做:

Simulink模型里有三种建模元素:Simulink框图、Stateflow流程图以及MATLAB Function模块里的m脚本。

在Simulink框图模型里使用Data Type Conversion模块来实现强制数据类型转换;在后两种则使用强制类型转换语句:out1 = double(in1)。

实例三

1. 建一个简单的Simulink模型

fc8df366163b67eda5425db65b23442e.png

双击上图中Data Type Conversion模块设置输出数据类型为double。MATLAB Function以及Chart里的内容如下图:

c6c5e2fc6fb622ff4371463222120ab6.png

2. 代码生成基本配置

求解器:定步长—离散求解器

系统目标文件:ert.tlc

3. 新建数据对象

打开Model Explorer,点击菜单的Add,在Base Workspace里定义输入输出信号的数据对象,如图设置输入为single类型,输出为dobule类型:

e9c84655486ab8ceca46aa883b144eee.png

4. 信号关联

在信号线上右键,将信号与Base Workspace的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。因为这里的信号略多,所以可以使用命令的方式来实现:

e77dd3597c9c898ab3cdf9af62a1d42d.png

此时,第一张模型截图中信号名前方的蓝色小叉子就会出现。

5. 生成代码

Ctrl+B,生成代码。

如前面所设置的,输入为real32,输出为real类型:

9a5f7e8cab3dceb7046859810803b090.png

但此时从上图可以看到,由于是single转double,隐式转换,并没有想要的显示转换的代码。

在代码配置页面里,配置代码风格,Casting modes为Standards,符合MISRA的风格:Generate code that casts data types to conform to MISRA standards

0ba6789eaf2c64d46f99960d9c786a5e.png

再次生成代码,得到如图:

f74b7f168e76812a17b5422f6a02cb2d.png

总结

所以说,在Simulink框图模型里使用Data Type Conversion模块来实现强制数据类型转换;在后两种则使用强制类型转换语句:out1 = double(in1)。

Tips:可以使用Model Advisor ,来检查模型的配置,以便生成的代码符合MISRA C的风格。

其它:保持y1信号名不变,数据类型设置为整形,并相应的设置Data Type Convers输出为整形。生成代码,会看到比较有意思的错误提示。

打开APP阅读更多精彩内容

点击阅读全文

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值