您现在的位置: 主页 > 嵌入式软件 > C/C++ > 加速你的MATLAB开发(4): 自动生成C/C++代码
本文所属标签:
为本文创立个标签吧:

加速你的MATLAB开发(4): 自动生成C/C++代码

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-09-04 

博主问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然后开始玩吧

xkcd: Compiling

完成~

接下来你可以验证生成的代码是否正确,然后把代码打包后发给别人编译,也可以和已有的代码进行混编,或是上传到硬件里进行编译。

很多人觉得MATLAB生成C/C++代码的作用只是来给自己MATLAB代码提速,如果只是这种目的话那简直是用高射炮打蚊子了。利用Coder生成千千万万行符合标准且没有Bug的C/C++代码才是正确的打开方式。

鉴于MATLAB/Simulink在汽车行业中的广泛应用[1],很有可能在你的车上就跑着由Coder自动生成的代码。

myc说到这,想起了当年面试的时候和面试官说的话

给我一个Coder,我可以用MATLAB在五分钟内写一个跑在Raspberry Pi上的人脸识别系统

大概就是这样~

[1]:MathWorks User Stories Listed by Product



              查看评论 回复



嵌入式交流网主页 > 嵌入式软件 > C/C++ > 加速你的MATLAB开发(4): 自动生成C/C++代码
 进行 代码 我们

"加速你的MATLAB开发(4): 自动生成C/C++代码"的相关文章

网站地图

围观()