首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Simulink代码生成: MinMax模块及其代码

  • 23-09-22 01:02
  • 4388
  • 8534
blog.csdn.net

本文研究MinMax模块的用法和该模块生成的代码,同时指出该模块使用时的一个注意点。

文章目录

  • 1 Simulink中的MinMax模块
  • 2 MinMax模块建模
  • 3 MinMax模块的代码
  • 4 MinMax模块的bug
    • 4.1 bug复现
    • 4.2 bug模型的代码
  • 5 总结

1 Simulink中的MinMax模块

在Simulink中,MinMax通常有多个输入信号,然后输出其中最大的或者最小的那个值。
在这里插入图片描述
在该模块的配置界面可以配置输入信号的数量,以及输出的是最大值还是最小值。

2 MinMax模块建模

通过一个简单的模型,可以直观地理解MinMax模块的用法。

1)新建一个Simulink模型,拖入一个MinMax模块。双击该模块,配置输入port数量为2,模式选为Max。
在这里插入图片描述
2)输入加上2个const常量,数值分别为5和10,输出加上display模块用于观测结果。运行模型仿真可以看到,输出了两个数中较大的10。
在这里插入图片描述

3 MinMax模块的代码

MinMax模块的用法很简单,但是在生成代码的时候就有一些问题。

把上一章节的模型的输入输出换成Inport和Outport,配置好Embedded Coder。

1)当不做任何配置的时候,模型的两个输入是double类型。

在这里插入图片描述
生成的代码直接调用了一个中的内置函数fmax做了个比较。
在这里插入图片描述
如果是两个single浮点数输入,那么代码中就是float类型,代码中就会用 fmaxf这个内置函数。

如果MinMax的配置为min,生成的代码中则会实用fmax和fminf函数。

2)当两个输入都是整形数,例如都是uint8,代码会有所不同。因为整型数没有fmax函数,所以会用一个if语句来判断哪个输入比较大,再赋值给输出。
在这里插入图片描述

4 MinMax模块的bug

博主在工作中,用Matlab2018a的时候就发现了MinMax这个常用模块的一个bug,所以记录于此,希望博友们能避开这个坑点。

4.1 bug复现

复现这个bug的办法是,用Matlab2018a建模,将输入的两个常数设为uint8(1)和int8(5),将MinMax模块配置为min,输出数据类型改为继承内部规则。
在这里插入图片描述
然后再仿真模型,正常情况下,输入1和5,那么应该输出其中较小的1才对。但是仿真后的结果是输出了0,并且类型是个定点数。
在这里插入图片描述
再修改一下输入,设为uint8(3)和int8(7),输出的却是2.
在这里插入图片描述
博主试了很多次,只要是输入是奇数,并且分别为无符号整型和有符号整型时,输出就会不正常,会比预期的数值少了1.

4.2 bug模型的代码

将模型的输入端口配置成无符号整型和有符号整型,如下图。
在这里插入图片描述
然后Ctrl + B生成代码。
在这里插入图片描述
代码中用了一个临时变量tmp,然后再给输出参数赋值之前把tmp右移一位。说实话这段代码的操作博主也并没有看懂,如果有博友明白的希望指点一二。但是博主认为,仿真的时候都有问题,不管代码啥样子,那肯定是不能拿去编译的。

解决这个bug的最好办法应该是把MinMax的输入保持一致,如果不一致的话,用Data Type Conversion转成一致的类型再去使用。

5 总结

MinMax模块本身很简单,正常情况下的代码也很容易。在使用的时候只要注意到博主说的这个bug即可。

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/107772183"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top