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

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结归纳


前言

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

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

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

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

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

背景介绍

        在一个嵌入式软件项目中,需要将一组16位的数据,按照高低字节拆分成8位的。思路是使用Simulink中的Extract Bits模块构建一个字节分割子系统,把每个数据分割开,示例如下;

问题描述

        按照上述示例,拿一个16位数据验证时,没有什么问题。但是拿一组16位数据进行字节分割时,全部的高字节被放在一起,全部的低字节被放在了一起,示例如下:

分析排查

        把全部信号的Dimensions打出来,看到数据处理的过程不是逐个数据求高低字节。而是先把数组的高字节求出来,然后再把全部的低字节求出来,最后把两部分合并的一起,示例如下:

        

解决方案

        一、先用Selector模块把要处理的数据分成单个元素,然后再逐个调用上述字节分割的子系统,分割之后再把所有字节合并起来,示例如下:

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

        二、上述方案在处理少量数据时没有任何问题,但是当数据量增加需要手动编辑大量模块,应用起来非常吃力。

        于是考虑引入一个for循环,改用字节掩码和数移位的方式来处理上述数据,示例如下:

function y = fcn(u)temp = uint8(zeros(200,1));k = 1;
for i=1:1:length(u)temp(k) = bitshift(bitand(u(i), hex2dec('FF00')),-8);k = k+1;temp(k) = bitand(u(i), hex2dec('00FF'));k = k+1;
endy = temp(1:length(u)*2);

        重新运行程序,功能符合要求,也没有新的问题出现,Bug优化完工,示例如下:

总结归纳

        Simulink中单个的模块本身是可以处理数组或者矩阵这样的数据的,但是组合起来的模块在处理数组和矩阵时会出现一定的逻辑问题,类似上述示例展示,需要开发者自己加以甄别。


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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arduino开发实例-DRV8833电机驱动器控制直流电机

DRV8833电机驱动器控制直流电机 文章目录 DRV8833电机驱动器控制直流电机1、DRV8833电机驱动器介绍2、硬件接线图3、代码实现DRV8833 使用 MOSFET,而不是 BJT。 MOSFET 的压降几乎可以忽略不计,这意味着几乎所有来自电源的电压都会传递到电机。 这就是为什么 DRV8833 不仅比基…

寒假思维训练day15 牛客练习赛121

牛客练习赛ABCD题解,更新一个题解作为今天的任务收尾。 寒假思维训练day15 摘要: Part1:B题,B-You Brought Me A Gentle Breeze on the Field_牛客练习赛121 (nowcoder.com) Part2: C题,C-氧气少年的水滴 2_牛客练…

职言圈 | 小伙年薪95w,女朋友父母却爱搭不理,如今上岸国家电网,人不到,叔叔阿姨吃饭都不动筷子...

在职场中,每个人都经历着不同的起伏和挑战。有时候,我们会面临着职业生涯上的起伏,但正是这些经历让我们成长,让我们更加坚韧。 就像这位网友一样,他在过去的一年里经历了美团L8的职位和年薪95W,却面临着女…

Sentinel解密:SlotChain中的SLot大揭秘

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Sentinel解密:SlotChain中的SLot大揭秘 前言SlotChain简介:Sentinel的第一道防线入场仪式:SlotChain中的初始化SlotSlotChain的执行流程:从规则解析到流…

数据可视化练习

文章目录 试题示例 试题示例 绘制下图所示的表格 根据下表的数据,将班级名称一列作为x轴的刻度标签,将男生和女生两列的数据作为刻度标签对应的数值,使用bar()函数绘制下图所示的柱形图。 方式一 import numpy as np import matplotlib.p…

Kotlin快速入门系列3

Kotlin条件、循环控制 IF条件控制 与Java类似,一个if语句可包含布尔表达式和一条或多条语句。 fun compare(a:Int,b:Int) : Int{//常规传统用法var max aif (b>a) max breturn max//使用elsevar mMax : Intif(a>b){mMax a}else{mMax b}return mMax//使…

Unity中URP下额外灯的距离衰减

文章目录 前言一、额外灯的距离衰减二、DistanceAttenuation函数的传入参数1、distanceSqr2、distanceAndSpotAttenuation3、_AdditionalLightsAttenuation4、GetPunctualLightDistanceAttenuation函数三、DistanceAttenuation函数的程序体 前言 在上一篇文章中,我…

一个新的springboot-vue项目如何启动起来

一个新的springboot-vue项目如何启动起来 1.导入mysql 打开yml文件修改数据库密码 名称 用户名 2.打开pom.xml配置maven依赖 尽量换成自己使用过的版本号,或者打开中央仓库搜索相关内容版本号:https://central.sonatype.com/ 注解为黄色 说明工程…

《合成孔径雷达成像算法与实现》Figure5.17

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …

@JsonIgnore的使用及相关问题的解决

目录 1 前言 2 对比及其使用方法 3 遇到的相关问题及解决方法 1 前言 在我们编写的后端项目中,有时候可能需要将某个实体类以JSON格式传送给前端,但是其中可能有部分内容我们并不想传送,这时候我们选择将这部分内容变成Null,这…

Flutter 点击空白处关闭软键盘,点击非TextField 关闭软键盘的方法

1:点击空白处(非控件上)关闭软键盘。 此方法有个问题,就是点击非空白区域,不会关闭软键盘,比如点击旁边的其他按钮,则软键盘还在。只适合点击空白处关闭软键盘 在 main.dart 入口 build 中增加 builder: (context, ch…

一文速通Python添加、修改和删除字典元素

添加、修改和删除字典元素是 Python 中使用字典时常见的操作。字典是一种无序、可变的数据结构,用于存储键值对。在 Python 中,对字典元素进行添加、修改和删除操作可以帮助我们动态地管理数据,方便地根据需求对字典进行更新和维护。 一、添…

图文解析交流慢充原理和握手协议以及OBC工作原理

1.接口定义 2.硬件连接原理 2.obc工作原理 OBC里面包括单片机1和单片机2,DSP。 有的厂家方案只有一个单片机,CC/CP部分直接用DSP实现。交流桩的ARM控制K1、K2,S1。单片机1控制K3。单片机2控制S2。DSP控制K4。BMS控制PDU里面的K5&#x…

使用Opencv-python库读取图像、本地视频和摄像头实时数据

使用Opencv-python库读取图像、本地视频和摄像头实时数据 Python中使用OpenCV读取图像、本地视频和摄像头数据很简单, 首先需要安装Python,然后安装Opencv-python库 pip install opencv-python然后在PyCharm或者VScode等IDE中输入对应的Python代码 一…

Maven讲解

介绍 Maven是一个流行的构建工具和项目管理工具,它主要用于Java项目的构建、依赖管理和项目报告生成。Maven通过提供一致的项目结构、自动化的构建过程和强大的依赖管理,简化了项目的开发和维护过程。 下面是一些Maven的主要特点和用途: 项…

Transformer and Pretrain Language Models3-6

Pretrain Language Models预训练语言模型 content: language modeling(语言模型知识) pre-trained langue models(PLMs)(预训练的模型整体的一个分类) fine-tuning approaches GPT and BERT(…

【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用

文章目录 📄前言一. 阻塞队列初了解🍆1. 什么是阻塞队列?🍅2. 为什么使用阻塞队列?🥦3. Java标准库中阻塞队列的实现 二. 阻塞队列的模拟实现🍚1. 实现普通队列🍥2. 实现队列的阻塞功…

立创EDA学习:设计收尾工作

布线整理 ShiftM,关闭铺铜显示 调整结束后再使用快捷键”ShiftM“打开铺铜 过孔 在空白区域加上一些GND过孔,连接顶层与底层的铺铜。放置好”过孔“后,隐藏铺铜,观察刚才放置的过孔有没有妨碍到其他器件 调整铺铜 先打开铺铜区&…

《Vue3 基础知识》 Vue2+ElementUI 自动转 Vue3+ElementPlus(GoGoCode)

前言 GoGoCode 一个基于 AST 的 JavaScript/Typescript/HTML 代码转换工具。 AST abstract syntax code 抽象语法树。 实现 第一步:安装 GoGoCode 插件 全局安装最新的 gogocode-cli 即可 npm i gogocode-cli -g查看版本 gogocode-cli -V相关插件说明 插件描述…

【多态】10分钟大白话讲解Java中的多态

1.多态的概念 多态(polymorphism)本来是生物学里的概念,表示地球上的生物在形态和状态方面的多样性。 而在java的面向对象中,多态通俗点说就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生不同的状态。也就是说…