上一期讲到线性插值法在数值近似上的应用,末尾简单提了下直接利用Matlab进行验证和代码生成。
今天接着上一讲说说具体的方法以及如何通过配置选项进行优化,从而使之适用于嵌入式芯片上运行。
准备工作
Matlab 2012b。当然有更高版本的也一样。大家可以去官网申请试用版,土豪可以直接购买。
Microsoft Visual Studio 2010。之前试过Matlab 2012b与VS2008关联,总是提示错误,缺少x86 SDK。所以建议用VS2010。
两个软件进行关联。之所以要关联,是因为C代码自动生成以后,Matlab会调用C编译器编译一次生成的代码。不过即便不关联也无所谓,你可以copy到你的嵌入式芯片IDE中进行编译。关联方法参见前面几期的内容:
如何在Matlab中与VS2010关联编译和调试C代码
模型建立
还是类似上一期的例子,假定有一款PTC温度传感器的温度与其分压得到的电压值关系如下。
我们首先利用Simulink的look up table组件进行线性插值,将数据填入对应配置窗口。类似上一讲的方式,简单验证下模型输入输出是否如设想一样。
初版代码生成
在Simulink组件中找到in和out端子,放在lookup table两端。另外,只有在solver选择了Fixed-step才能进行代码自动生成。配置方法如下,选择设置按钮,找到Solver选项:
-
Type:Fixed-step,意思为固定仿真补偿,简单的理解就是按固定的频率跑一次;
-
Solver:我一般选择ode1。通俗的来说,不同的Solver表示不同数学解法。限于篇幅就不展开了,具体可以自己百度一下。
-
Fixed-step size:0.02,单位是s,意思是每20ms跑一次仿真。参数的设置取决于你这段代码实际想在嵌入式芯片运行的频率。
然后在Code选项找到C/C++ Code,然后选择Build Model,等待完成。完成后会有窗口弹出。还可以在command窗口看生成代码历经的整个过程。
完成之后,可以在模型所在文件夹找到生成的源码。
乍一看是不是很失望?代码文件很多,而且代码行数也很多,排布有点杂乱。别急,接下来开始优化配置。
优化代码生成
优化1:创建子模块,并定义函数名和文件名
-
全选模型的所有组件,创建一个Subsystem。
-
将创建好的子系统,右击进行如下配置:
-
勾选红色框部分的内容
-
可以选择自定义的执行函数名以及生成的代码文件的文件名。
优化2:优化生成代码格式
-
选择Embedded coder模式生成代码
-
选择内联参数。不勾选的话,它会把常量也定义为一个结构,会增加代码量。
-
根据你的芯片配置你期望的硬件平台。
优化3:设置代码生成报告的内容,方便代码生成以后查看情况。
以下是生成的报告和代码文件
-
代码总体概览,如代码行数,变量个数等
-
实际生成代码。是不是比之前默认配置生成的代码简洁且清晰多了?
本期小结:本期以线性插值为例,详细讲述了如何在Simulink中进行各项操作,以生成更加适合在嵌入式芯片中运行的代码。在更高版本的Matlab中,除了上述的优化配置以外,还有许多其他方法选项进一步优化生成的代码