文章目录
前言
背景介绍
问题描述
分析排查
解决方案
总结
前言
见《研发日记,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工程,可以到笔者的主页查找和下载。