什么是相当于这个MATLAB代码的C ++?

时间:2017-08-07 23:01:58

标签: c++ matlab serial-communication

在我的项目中,我负责将一些MATLAB代码迁移到C ++。以下代码是指从计算机到微控制器的串行通信。函数CreatePackage生成一个包,然后使用MATLAB的 fwrite(串行)函数将其发送到微控制器。

function package = CreatePackage(V)
for ii = 1:size(V,2)
    if V(ii) > 100
        V(ii) = 100;
    elseif V(ii) < -100
        V(ii) = -100;
    end
end

vel = zeros(1, 6);
for ii = 1:size(V,2)
    if V(ii) > 0
        vel(ii) = uint8(V(ii));
    else
        vel(ii) = uint8(128 + abs(V(ii)));
    end
end

package = ['BD' 16+[6, vel(1:6)], 'P' 10 13]+0;

然后,发送包裹:

function SendPackage(S, Package)

for ii = 1:length(S)
    fwrite(S(ii), Package);
end

如何在C ++中创建一个数组/向量来表示上面MATLAB代码中使用的package变量?

我没有使用MATLAB的经验,所以任何帮助都会有很大的帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

package变量在MATLAB代码中被流式传输为12个无符号8位整数,因此我将在C ++中使用char[12]数组。您可以在平台上仔细检查sizeof(char),以确保char只有1个字节。

是的,MATLAB默认数据类型是double,但这并不意味着您的向量V未填充整数值。您必须查看此数据或设备的规格才能弄清楚这一点。

无论输入的值是什么,您都将输出范围设置/剪切为[-100,100],然后将它们偏移到字节范围[0,255]。

如果您对MATLAB知之甚少,可以利用C ++中的知识并将C作为临时使用。 MATLAB的fwrite功能与C的功能对齐,您可以使用#include<cstdio.h>预处理器指令将这些函数包含在C ++中。

以下是一个示例解决方案:

#include <cstdio.h>    // fwrite 
#include <algorithm>  // min, max
...

void makeAndSendPackage(int * a6x1array, FILE * fHandles, int numHandles){

   char packageBuffer[13] = {'B','D',24,0,0,0,0,0,0,'P','\n','\r',0};

   for(int i=0;i<6;i++){
       int tmp = a6x1array[i];
       packageBuffer[i+3] = tmp<0: abs(max(-100,tmp))+144 ? min(100,tmp)+16;
   }

   for(int i=0;i<6;i++){
       fwrite(fHandles[i],"%s",packageBuffer);
   }

}

如果您对上述代码有疑问,请与我们联系。