[Matlab]利用Simulink进行模型设计和代码自动生成

上一期讲到线性插值法在数值近似上的应用,末尾简单提了下直接利用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中,除了上述的优化配置以外,还有许多其他方法选项进一步优化生成的代码,有兴趣的话可以参考前面几期的内容:[Matlab]Matlab 2017 深圳站主题演讲资料分享。本期就这样啦。觉得不错的话,欢迎扫码关注本公众号。

 

  • 8
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值