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

文章目录

前言

背景

问题

排查

解决

总结


前言

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

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

背景

        在一个嵌入式软件项目中,需要对一个可变数组进行数据处理。要求是原始数据相邻四个合并在一起,在这个算法中需要对原始可变数组的lengh除4后向上取整。算法的思路是,length对4整除,除不尽的加1,示例如下:

function y = fcn(u)
 
if mod(u,4) == 0
    y = floor(u/4);
else
    y = floor(u/4) + 1;
end

问题

        按照上述示例,预想不同的lengh都能除4后向上取整,但是实际运行的结果如下:

排查

        把数据处理算法的过程变量都输出来,看到求余和求商都是正确的,if分段判定也没有问题,示例如下:

function [Mod, Shg, y] = fcn(u)
 
Mod = mod(u,4);
Shg = floor(u/4);
 
if Mod == 0
    y = Shg;
else
    y = Shg + 1;
end

解决

        换一种算法实现方式,用Gain模块直接做整除向上取整,示例如下:

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

总结

        整除后四舍五入,向上取整,向下取整,这类算法在Matlab/Simulink中官方已经集成了,只要熟悉一下就能应用,不需要开发者自己再开发了,如下图所示:


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

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 08:10:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 08:10:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 08:10:04       82 阅读
  4. Python语言-面向对象

    2024-01-13 08:10:04       91 阅读

热门阅读

  1. 修改默认负载均衡策略(Ribbon)

    2024-01-13 08:10:04       57 阅读
  2. 使用spark将MongoDB数据导入hive

    2024-01-13 08:10:04       64 阅读
  3. CompletableFuture、ListenableFuture高级用列

    2024-01-13 08:10:04       42 阅读
  4. STM32 i2c从机模式中断处理参考

    2024-01-13 08:10:04       46 阅读
  5. 9个Linux网络命令

    2024-01-13 08:10:04       53 阅读
  6. 基本数据结构 | 并查集

    2024-01-13 08:10:04       63 阅读
  7. Docker-Compose编排Nginx1.25.1+PHP7.4.33+Redis7.0.11环境

    2024-01-13 08:10:04       39 阅读