在我的项目中,我负责将一些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的经验,所以任何帮助都会有很大的帮助。
谢谢!
答案 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);
}
}
如果您对上述代码有疑问,请与我们联系。