研发日记,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工程,可以到笔者的主页查找和下载。

相关推荐
ytttr87342 分钟前
MATLAB SIFT图像配准实现
算法·机器学习·matlab
南宫萧幕1 小时前
HEV能量管理控制算法实战:从MPC/RL理论基础到Simulink闭环建模
算法·matlab·汽车·控制·pid
IT猿手1 小时前
SCI一区:章鱼优化算法(Octopus Optimization Algorithm, OOA)求解23个测试函数,出图丰富,提供完整MATLAB代码
开发语言·算法·matlab
leo__5202 小时前
单载波中继系统资源分配算法MATLAB仿真程序
算法·matlab·unity
南宫萧幕4 小时前
Python与Simulink联合仿真:基于DQN的HEV能量管理策略建模与全链路排雷实战
开发语言·人工智能·python·算法·机器学习·matlab·控制
yongui478347 小时前
基于卷积神经网络(CNN)的盲源分离MATLAB实现
人工智能·matlab·cnn
listhi5207 小时前
基于SVM和决策树的孤岛检测MATLAB实现
决策树·支持向量机·matlab
Evand J7 小时前
【MATLAB例程】多传感器协同DOA目标跟踪与EKF滤波,输出动态目标轨迹、轨迹误差对比分析
开发语言·matlab·目标跟踪·滤波·定位·导航
简简单单做算法17 小时前
基于Qlearning强化学习和Parzen窗的图像分割算法matlab仿真
matlab·图像分割·强化学习·qlearning·parzen窗
fengfuyao9851 天前
MATLAB实现自适应动态规划(ADP)方法
matlab·动态规划·代理模式