当前位置: 首页 > news >正文

研发日记,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.lryc.cn/news/291204.html

相关文章:

  • (M)unity受伤反弹以及死亡动画
  • 【Java】Springboot入门
  • 专业138总分420+中国科学技术大学843信号与系统考研经验中科大电子信息通信
  • 携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX
  • Android中C++层fstream用法详解
  • git clone常见问题一览及解决方法
  • ​ArcGIS Pro 如何批量删除字段
  • OG Trade在ZKX揭幕:一家基于Starknet的游戏化永续合约交易所
  • ubuntu 22.04 安装redis并设置远程连接
  • MemcachedRedis构建缓存服务器
  • Python编辑开发 --- pycharm pro 中文
  • Linux的 .bashrc 有什么作用?
  • .ui文件相关
  • 【DOCKER】docker 安装sonarque
  • 解决IDEA报错端口被占用的问题
  • IDEA:git 回滚本地提交-git 选择 Reset Current Branch to
  • Docker核心教程
  • React通用后台模板
  • 【Axure教程0基础入门】00Axure9汉化版下载、安装、汉化、注册+01制作线框图
  • day38_MySQL
  • element ui组件 el-date-picker设置default-time的默认时间
  • ###C语言程序设计-----C语言学习(8)## 斐波那契数列问题,素数问题,人数分配问题。
  • 蓝桥杯 第 1 场 小白入门赛
  • 飞天使-linux操作的一些技巧与知识点5-expect与docker便捷命令
  • 编曲学习:和声音程 调式体系 唱名法 调式调性
  • 【大数据】Flink 架构(四):状态管理
  • 执行rpm安装命令的时候抛出异常:rpmdb BDB0113 Thread/process
  • Android 在WebView中加载H5传递图片
  • 图的学习
  • 空间数据分析入门POI与莫兰指数基础知识笔记