加速你的MATLAB开发(4): 自动生成C/C++代码
博主问myc, 你觉得MATLAB最牛逼的Toolbox是啥?myc回答
就是各种Coder Toolbox啊。土豪的选择,绝对值回售价。
作为MATLAB杀手级的应用,MATLAB Coder,Simulink Coder, Embedded Coder, HDL Coder可以将很多MATLAB程序,Simulink模型直接转化成C/C++代码。
有报道显示东风汽车用Embedded Coder为他们的新一代电动客车的电池管理系统生成了10万行代码,实现了100%的代码自动生成。
波音给X-40A无人航天飞机的导航及控制系统编的代码也是由Simulink Coder自动生成的

(此处停顿3秒,应有广告费入账
总之,用了Coder工具箱,腰不酸了,腿不痛了,C/C++也忘得差不多了……
博主等myc一口气说了这么多之后问
能让我看看这么神奇的工具怎么用么。。
这里用R2016a来做例子,首先你得确保你的电脑上有支持的编译器,从R2015b起还支持MinGW哟。
接下来就是让MATLAB定位你的编译器了,我们在mac上用Xcode做例子
>>mex -setup
MEX 配置为使用 'Xcode with Clang' 以进行 C 语言编译。
>>mex -setup C++
MEX 配置为使用 'Xcode Clang++' 以进行 C++ 语言编译。
好啦,开始生成代码吧!鉴于我们的实习生myc是鼠标点点族,他打开了MATLAB Coder App
好炫酷的App,好像一开始需要我们输入一个想转化成C/C++代码的M文件,那我们来将上次编写的代码转化为C++代码。我们对原代码稍作修改,给两个输入
function alpha = best(points1,points2)
M1 = rand(3);
M2 = rand(3);
alpha = zeros(2,size(points1,2));
a1 = M1 points1;
a2 = M2 points2;
for i = 1:size(points1,2);
A = [a1(:,i),-a2(:,i)];
y = rand(3,1);
AtA = A' * A;
if rcond(AtA) < eps('double')
alpha(:,i) = 0;
else
alpha(:,i) = A y;
end
end
end%End of best
在App中输入best后回车进入下一步
这一步你可以加入其他的entry-point function, 我们这个简单的例子就只有一个.点击右下角Next。
这一步App将检测你的代码是否可以被转化为C/C++,如果有任何问题,App还会给出修改建议。
我们的程序用到的都是MATLAB比较基本的功能,都支持代码生成,点击下一步继续。
这一步我们要做的是给出输入的数据类型,因为不同于MATLAB, C/C++需要在编译时知道数据的类型和大小。我们可以给出一个调用best函数的例子。然后双击下方points1和points2来定义数据类型
我们可以直接选择double,或者选择Define by Example。这里我们选择Double,然后定义数据大小。
如果你知道数据的上限,比如最多只有100个点,那么可以用:100来表示。这里我们不知道数据有多少,所以用:inf来表示
两个输入都定义完成后,点击下一步进行Run-time校验。
校验通过后,就可以生成代码啦
你可以选择你的目标硬件,并生成平台兼容的代码
这里我们只选择默认的MATLAB Host,在MATLAB里面编译和运行代码。
同样的你可以生成各种库或是和你自己写的C/C++编译我们选择直接生成源代码。点击Generate然后开始玩吧
完成~
接下来你可以验证生成的代码是否正确,然后把代码打包后发给别人编译,也可以和已有的代码进行混编,或是上传到硬件里进行编译。
很多人觉得MATLAB生成C/C++代码的作用只是来给自己MATLAB代码提速,如果只是这种目的话那简直是用高射炮打蚊子了。利用Coder生成千千万万行符合标准且没有Bug的C/C++代码才是正确的打开方式。
鉴于MATLAB/Simulink在汽车行业中的广泛应用[1],很有可能在你的车上就跑着由Coder自动生成的代码。
myc说到这,想起了当年面试的时候和面试官说的话
给我一个Coder,我可以用MATLAB在五分钟内写一个跑在Raspberry Pi上的人脸识别系统
大概就是这样~
[1]:MathWorks User Stories Listed by Product
查看评论 回复
"加速你的MATLAB开发(4): 自动生成C/C++代码"的相关文章
- 上一篇:C++头文件的包含顺序研究
- 下一篇:C++语言开发视频教程大集锦下载