研发日记,Matlab/Simulink避坑指南(八)——else if分支结构Bug

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结归纳


前言

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

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

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

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

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

背景介绍

在一个嵌入式软件项目中,需要对一个信号进行分段处理。思路是使用Simulink中的Matlab Funcyion模块,采用else if的结构进行处理,示例如下:

R 复制代码
function y = fcn(u)

if u < 0
    y = -int16(u);
    
else if u < 10
    y = 10*int16(u);
    
else if u < 20
    y = 20*int16(u);
    
else if u < 30        
    y = 30*int16(u);
    
else if u < 40        
    y = 40*int16(u);
    
else        
    y = int16(u);
    
end        
end
end
end
end

问题描述

按照上述示例,程序运行功能都是正常的,但是代码中一直有标红的警告,示例如下:

分析排查

看警告的提示信息,意思是代码的排版有问题,按照提示对代码进行修改,示例如下:

这样标红的警告消失,说明前面确实是代码排版问题。看上面的if else结构,Matlab认可的是这种逐层嵌套的框架,而不是C语言中惯用的else if并列分支框架。

解决方案

如果采用上述逐层嵌套的结构,需要经常调整前后if和end的对齐问题,而且这种庞杂的框架难免会增加代码出现逻辑错误的可能性。于是我们查阅Matlab官方关于if else的文档,找到了类似C语言中并列的分支结构(elseif是一个专用的关键词,中间没有空格分隔),示例如下:

按照上述语法对我们的算法进行调整,示例如下:

这样没有出现标红的警告,也没有引入新的问题,程序运行起来功能也符合要求, Bug修复完工。

总结归纳

Matlab中的else if并列分支结构,与C语言中的有一个细微区别。C语言中是else if作为一个关键词充当一个语法结构,但是在Matlab中如果中间有空格会被认为是两个关键词,按照两个语法结构被对待。所以在Matlab中要实现和C语言中一样的效果,就要去掉else和if之间的空格。这是两种编程语言在不同使用环境中的一点差别,需要开发者自己留意。


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

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

相关推荐
chhttty7 小时前
《Simulink嵌入式开发实战》新书上市
matlab·simulink
Deep-w10 小时前
【MATLAB】基于离散 LQR 的车辆横向轨迹跟踪控制方法研究
开发语言·算法·matlab
ghie909011 小时前
基于 MATLAB 的序贯蒙特卡洛概率假设密度多目标跟踪实现
开发语言·matlab·目标跟踪
Evand J12 小时前
【MATLAB例程】自适应渐消扩展卡尔曼滤波(AFEKF)三维雷达目标跟踪|效果已调优,附下载链接和运行结果,代码直接运行即可
开发语言·算法·matlab·目标跟踪·卡尔曼滤波·自适应滤波·代码定制
RickyWasYoung15 小时前
【Matlab】科研绘图配色-极简版
开发语言·matlab
可编程芯片开发2 天前
基于SMC滑模控制器的永磁同步电机SVPWM矢量控制系统simulink建模与仿真
simulink·svpwm·smc·永磁同步电机·矢量控制·滑模控制器
简简单单做算法2 天前
基于DNA算法的遥感图像加解密matlab仿真
计算机视觉·matlab·dna算法·遥感图像加解密
Naiva2 天前
【数学+MATLAB实验室】第一阶段_函数和图像(一次、二次、指数、对数、正弦、余弦、平移、缩放、叠加)
开发语言·matlab
简简单单做算法2 天前
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真
matlab·混沌序列·logistic-map·数字信息加解密
简简单单做算法2 天前
基于混沌加密的遥感图像加密算法matlab仿真
图像处理·计算机视觉·matlab·混沌加密·遥感图像加密