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

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结


前言

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

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

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

背景介绍

        在一个嵌入式软件项目中,需要对一个Matlab Function中的数组进行转置处理,要求是把一个行向量转换成列向量,思路是直接使用transpose(),示例如下:

function y = fcn(u)


y = zeros(1,10);

y(end) = u;


y = transpose(y);

问题描述

        按照上述示例,预想应该没有什么问题,但是编译的时候却出现了报错,示例如下:

分析排查

        编译器提醒是transpose()函数这一行有问题,先把这行屏蔽掉,示例如下:

        这样编译没有报错,说明就是transpose()函数的用法不对。查找transpose()的help说明,没有得到相关的解释,示例如下:

解决方案

        一、在数组定义的地方直接改成列向量,示例如下:

        编译后还是报错,说明这种方法不行。

        二、另起一个Matlab Function来进行transpose()转置处理,示例如下:

        再次编译,没有报错,功能也符合要求。这个解决方案可以。

        三、使用一个中间变量来桥接transpose()的输入和输出,示例如下:

        这次编译也没有报错,这个解决方案也可以。

总结

        综上所述,transpose()函数的用法不同于,其他加减乘除数学运算或者一般的数学函数,这一点目前还没有查到官方的解析说明,需要开发者自己留意,这个函数的输入和输出不能是同一个变量。


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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Cssust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值