研发日记,Matlab/Simulink避坑指南(七)——数据溢出钳位Bug

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结归纳


前言

        见《研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug

        见《研发日记,Matlab/Simulink避坑指南(三)——向上取整Bug

        见《研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug

        见《研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug

        见《研发日记,Matlab/Simulink避坑指南(六)——字节分割Bug

背景介绍

        在一个嵌入式软件项目中,需要将一个有符号数转换成无符号数,并把超出范围的值钳位在合理范围内。思路是使用Simulink中的Data Type Conversion模块和Saturation模块来处理,示例如下:

问题描述

        按照上述示例,预想应该可以正常运行,但是实际运行时溢出部分的数据还是出现了异常,示例如下:

分析排查

        把过程信号全部打上Scope,看到在第一个Data Type Conversion环节就出现了问题,负数转换成无符号数时变成了一些极大值,示例如下:

解决方案

        调整数据处理的顺序,先使用Saturation模块把数值限定在合理范围内,然后再用Data Type Conversion转换成无符号数,示例如下:

        重新运行程序,问题不再出现,Bug修复完工,示例如下:

总结归纳

        Simulink中的Data Type Conversion在转换数据类型时,只是改变了数据的白表达方式或解析方式,并没有改编数据本身的二进制内容。转换数据时除了需要考虑数据溢出的钳位,更要留意钳位的先后顺序。


        版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!

        上述例程使用的Demo工程,可以到笔者的主页查找和下载。

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Cssust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值