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

文章目录

前言

背景

问题

排查

解决

总结


前言

        见《研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug》

背景

        在一个嵌入式软件项目中,需要对温度传感器采集的数据进行处理。传感器温度范围是-20到180℃,原始数据是uint8型,数值范用0到200。

        数据运算关系非常明确,数据范围变化也不大,所以采用了比较简单的处理方法,直接偏移-20,并把数据类型改成int8型,示例如下:

研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug_第1张图片

问题

        按照上述示例,预想温度信号在-20到180℃之间都能正常工作,但是实际运行的结果如下:

研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug_第2张图片

排查

        把数据处理算法的输入输出都打上Scope,看到两者之间并没有一直保持偏移-20的关系,示例如下:

研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug_第3张图片

研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug_第4张图片

        进一步看分段的临界点是127℃,示例如下:

研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug_第5张图片

        以程序员这个值的敏感度,一下就意识到是数据类型的问题。回过头来看信号类型是int8型,马上就知道是数据类型溢出了,因为int8型的可用范围是-128到127。

解决

        调整信号的数据类型为int16型,扩大可用范围,示例如下:

研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug_第6张图片

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

研发日记,Matlab/Simulink避坑指南(二)——非对称数据溢出Bug_第7张图片

总结

        数据范用的Size不变,使用的数据位数不变,这个只在对称性运算中成立。

        例如,上述例子的偏移量如果是-128,那么输出值是沿0点上下对称的,仍然使用int8就没有问题。


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

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

你可能感兴趣的:(Matlab/Simulink,Matlab,Simulink,数据处理,数据类型,溢出,Bug优化)