研发日记,Matlab/Simulink避坑指南(九)——可变数组应用Bug

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结归纳


前言

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

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

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

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

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

背景介绍

        最近在一个项目中,使用Simulink写一段嵌入式代码,功能是求几个电压信号的方差。乍一看感觉挺简单,想着直接用一个MATALAB Function 函数var(x,1)就能搞定了,但是就这么一个小应用让我倒腾了几个小时。下面就来分享一下这一小段个人经历。

        一开始代码调试的时候很顺利,我定义了一个固定Size的数组x,外部赋了几个固定电压值,用生成的代码求出来的方差也是对的。代码大概是下面这个样子:

function Variance = fcn(Voltage)
x = zeros(1,100);
for i=1:1:100
	x(i) = Voltage(i);
end
Variance = var(x,1);

问题描述

        但是问题就在于var(x,1)这个函数求方差的算法是基于数组Size的,数组的Size在初始化的时候就定死了是100,但是我的应用中电压值的个数是动态变化的。于是我就把代码改成了下面这样:

function Variance = fcn(Voltage,N)
x = zeros(1,N);
for i=1:1:N
	x(i) = Voltage(i);
end
Variance = var(x,1);

        但是这样生成代码的时候,一直报下面这个错误。

分析排查

        Diagnostic Viewer里边的大概意思是说编译器定义x数组的时候,N的值是可变的,当前的工程配置不支持这样的用法。

解决方案

        我在代码生成的配置里边勾上了下面这个选型,打开了可变数组应用。如下图所示:

        再次编译就不报上面的错误了。但是报一个新的错误,Diagnostic Viewer里边的提示大概意思是说生成的代码Memory太大了。于是我才想到,可变数组也就意味这动态内存,当数组的Size未知的时候,编译器有可能分配了一个很大的Size。记得当时查资料好像是说默认用64KB,这样的数组确实大了。

        于是我就在数组定义前面,给N加了一个限定范围,代码改出来是下面这个样子:

function Variance = fcn(Voltage,N)
assert(N<=100);
x = zeros(1,N);
for i=1:1:N
   x(i) = Voltage(i);
end
Variance = var(x,1);

        到此为止,这个求方差的应用就算是能用起来了。

总结归纳

        那么这个代码调试过程,以及后来几天调用这段代码,发现的问题可以积累下来这么几条小经验以供自己将来使用,也给广大网友参考:

        1、函数var(x,1)求方差的算法,直接依赖于数组x的Size;

        2、嵌入式代码中Memory有限,一般不使用动态数组,如果使用了也不能承载太大的动态内存;

        3、可变数组在使用时,除了限定最大范围,而且N初始化时不能使用0或1这样比较小的数,否则后面的数组还是无法使用,还是会编译报错;


        版权声明:原创文章,转载请注明出处与链接,违者必究!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/355481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年算法OOA-CNN-BiLSTM-ATTENTION回归预测(matlab)

OOA-CNN-BiLSTM-Attention鲸鱼算法优化卷积-长短期记忆神经网络结合注意力机制的数据回归预测 Matlab语言。 鱼鹰优化算法&#xff08;Osprey optimization algorithm&#xff0c;OOA&#xff09;由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出&#xff0c;其模拟鱼鹰的捕…

星环科技基于第五代英特尔®至强®可扩展处理器的分布式向量数据库解决方案重磅发布

12月15日&#xff0c;2023 英特尔新品发布会暨 AI 技术创新派对上&#xff0c;星环科技基于第五代英特尔至强可扩展处理器的Transwarp Hippo分布式向量数据库解决方案重磅发布。该方案利用第五代英特尔至强可扩展处理器带来的强大算力&#xff0c;实现了约 2 倍的代际性能提升&…

DELL R740 两个raid10安装centos7.9

DELL R740 两个raid10安装centos7.9 服务器硬件配置&#xff1a; DELL R740&#xff1a;R740/4214R (12C,100W,2.4GHz)*2/128G(32G DDR4 RDIMM)*4 /600G SAS 10K *41.2T SAS 转速10K*4/H750 &#xff08;8G 缓存&#xff09;/750W *2/iDRAC9 要求&#xff1a;600G*4&#xf…

nginx部署前端(vue)项目及配置修改

目录 一、前端应用打包 二、部署前端应用 1、上传前端文件夹 2、修改nginx配置文件 3、重启nginx 三、查看效果 nginx安装参考&#xff1a;linux安装nginx-CSDN博客 一、前端应用打包 打包命令 npm run build 打包成功如下&#xff0c;会在项目路径下生成dist文件夹 二…

备战蓝桥杯---二分(基础)

何为二分&#xff1f;形象的说&#xff0c;就是单调函数求零点。 我们先对二分查找简单的分析一下&#xff08;主要是模板及易错点&#xff09; 1.找>x的第一个位置&#xff1a; 2.找<x的第一个位置&#xff1a; …

【Javaweb】【C00157】基于SSM的宠物护理预定系统(论文+PPT)

基于SSM的宠物护理预定系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物护理预订系统 本系统分为前台系统模块、后台管理员模块以及后台会员用户模块 其中前台系统模块&#xff1a;当游客打开系统的网址后&…

apt-get install时遇错误404

目录 1 问题 2 解决 3 编译源码时其他安装命令 1 问题 执行 sudo apt-get install libglib2.0-dev 或者其他安装命令时出现如下类似错误 http://security.debian.org/debian-security stretch/updates/main amd64 poppler-utils amd64 0.48.0-2deb9u4 404 Not Found [IP: …

四步搞定国赛!快速入门大小模型融合的AI产品开发

前不久&#xff0c;2024中国大学生服务外包创新创业大赛正式启动&#xff01;作为中国高等教育学会“全国普通高校学科竞赛排行榜”竞赛&#xff0c;飞桨赛道已经吸引了超过200位选手报名参赛。 本文旨在助力“A01-基于文心大模型智能阅卷平台设计”赛道选手&#xff0c;更快地…

【备战蓝桥杯】——循环结构

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-bFHV3Dz5xMe6d3NB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

SpringBoot整合EasyCaptcha图形验证码

简介 EasyCaptcha&#xff1a;https://github.com/ele-admin/EasyCaptcha Java图形验证码&#xff0c;支持gif、中文、算术等类型&#xff0c;可用于Java Web、JavaSE等项目。 添加依赖 <dependency><groupId>com.github.whvcse</groupId><artifactId…

Arm AArch64 alignment(对齐)

数据和指令必须与合适的边界保持对齐(alignment)。访问是否对齐会影响ARM核的性能&#xff0c;并且在将代码从早期的体系结构移植到ARMv8-A时可能会出现可移植性问题。出于性能原因&#xff0c;或者在移植代码时&#xff0c;都值得去注意下对齐问题。本文将讲述了ARMv8-A AArch…

【AJAX】简单学习记录

文章目录 一、Ajax是什么&#xff1f;二、AJAX工作原理&#xff1a;三、如何实现ajax请求四、同步交互与异步交互总结发送请求有哪些方式/标签&#xff1a;Ajax实现方式&#xff1a; 一、Ajax是什么&#xff1f; AJAX Asynchronous JavaScript and XML&#xff08;异步的 Java…

【竞技宝】LOL:Burdol剑魔打如入无人之境 LGD让一追二击败UP

北京时间2024年1月28日&#xff0c;英雄联盟LPL2024春季赛在昨天迎来第一周第六个比赛日&#xff0c;本日第二场比赛由LGD对阵UP。本场比赛双方前两局互相翻盘各取一胜&#xff0c;决胜局Burdol的剑魔后期团战能扛能打如入无人之境&#xff0c;最终LGD让一追二击败UP。以下是本…

docker 部署xxl-job

docker 部署xxl-job XXL-JOB github地址 https://github.com/xuxueli/xxl-job XXL-JOB 文档地址 https://www.xuxueli.com/xxl-job/ XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品…

算法设计与分析实验:堆排序与分治

目录 一、合并K个升序链表 1.1 采用堆排序的思路 1.2 采用优先队列的思路 1.3 采用分治的思路及具体测试 二、数据流中的中位数 ​编辑2.1 具体思路 2.2 代码实现 2.3 测试结果 三、数组中的第k个最大元素 3.1 采用分治思路 3.2 采用最小堆 四、 最小K个数 4.1 采用…

MySQL知识点总结(二)——explain执行计划、SQL优化

MySQL知识点总结&#xff08;二&#xff09;——explain执行计划、SQL优化 explain执行计划typepossible_keyskeysextra SQL优化SQL优化的流程SQL优化技巧范围查询优化排序优化分组查询优化distinct优化分页查询优化join关联查询优化排序分页 关联查询分组 关联查询 排序in与…

基于FFT + CNN - BiGRU-Attention 时域、频域特征注意力融合的电能质量扰动识别模型

目录 往期精彩内容&#xff1a; 引言 1 快速傅里叶变换FFT原理介绍 第一步&#xff0c;导入部分数据&#xff0c;扰动信号可视化 第二步&#xff0c;扰动信号经过FFT可视化 2 电能质量扰动数据的预处理 2.1 导入数据 第一步&#xff0c;按照公式模型生成单一信号 2.2 …

【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )

一、Gradle 空白项目构建示例演示 在任意一个空白目录 , 创建 build.gradle 构建脚本 , 该脚本是 Gradle 构建的入口 ; 在顶级目录和每个子工程 , 都要有单独的 build.gradle 构建脚本 ; 在 上述 build.gradle 构建脚本中添加如下代码 : println "Hello Gradle !"…

【IM】如何保证消息可用性(一)

目录 1. 基本概念1.1 长连接 和 短连接1.2 PUSH模式和PULL模式 2. 背景介绍2.1 理解端到端的思想 3. 方案选型3.1 技术挑战3.2 技术目标 1. 基本概念 在讲解消息可用性之前&#xff0c;需要理解几个通信领域的基本概念。 1.1 长连接 和 短连接 什么是长连接&#xff0c;短连接…
最新文章