matlab安装后用集成处理器,使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序...

使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序

文档编号TN_AAAA_A0

关键字Matlab, Simulink, Cortex-M, 基于模型设计, Model-Based-Design

摘要本技术笔记对使用Matlab+Simulink开发Cortex-M系列嵌入式处理器应用程序进行说明Mars4zhu

目 录

1 总述 1

2 ARM Cortex-M处理器的Ecoder支持包学习 1

2.1 ARM Cortex-M处理器的Ecoder支持包范例学习 1

2.1.1 arm_cortex_m_gettingstarted范例学习 1

2.1.2 arm_cortex_m_pil_block范例学习 3

2.1.3 arm_cortex_m_model_pil_block范例学习 4

2.1.4 arm_cortex_m_top_model_pil范例学习 4

2.2 ECoder的ARM Cortex-M处理器Simulink模型库 5

2.2.1 TODO: Hardware Interrupt的模型模块的使用。 5

2.3 开发一个目标处理器/目标开发板 5

3 ARM Cortex-M处理器的DSP System Toolbox支持包学习 6

3.1 TODO 6

4 版本历史(Revision History) 7

插图索引

图 11 安装好的Matlab的嵌入式处理器支持包 1

图 21   arm_cortex_m_gettingstarted范例的模型、设置、编译和运行 2

图 22   arm_cortex_m_pil_block范例模型的PIL子系统编译与复制 3

图 23   arm_cortex_m_pil_block范例模型编译与运行 3

图 24   arm_cortex_m_model_pil_block范例模型编译与运行 4

图 25  arm_cortex_m_top_model_pil范例模型编译与运行 5

图 26  arm_cortex_m_top_model_pil范例运行后生成的wrapper封装和代码覆盖运行结果 5

图 27   ecoder for arm_cortex_m 的Simulink模型库 5

表格索引

错误!未找到目录项。

1 总述Matlab为嵌入式处理器应用程序的开发提供了强大的功能,包括Embedded Coder代码生成、Simulink模型转换,Processor-In-the-Loop(PIL)处理器闭环开发等。同时提供了硬件支持包Embedded Coder Support Package for ARM Cortex-M Processors以及DSP System Toolbox Support Package for ARM Cortex-M Processors,并根据流行的开发板提供了对STM32-Discovery、FRDM-K64F以及QEMU模拟器等的硬件支持包。

09d261aaf21f66d4711a75a3b334fb05

图11安装好的Matlab的嵌入式处理器支持包

本文主要通过Matlab相应的支持包提供的范例,学习基于Matlab+Simulink开发Cortex-M系列嵌入式处理器的应用程序的开发流程,记录学习笔记

2 ARM Cortex-M处理器的Ecoder支持包学习Embedded Coder Support Package for ARM Cortex-M Processors提供了多个范例来演示学习如何使用Matlab+Simulink来开发ARM Cortex-M嵌入式处理器的应用程序。

2.1 ARM Cortex-M处理器的Ecoder支持包范例学习2.1.1 [b]arm_cortex_m_gettingstarted范例学习[/b] 该范例建立一个最简单的Simulink模型,然后完成针对ARM Cortex-M处理器开发的设置,生成代码,最后运行在QEMU模拟器中。

使用Simulink打开arm_cortex_m_gettingstarted范例,设置后编译并运行。

f40dc099ebaa17a481382f893499aae7

图21arm_cortex_m_gettingstarted范例的模型、设置、编译和运行

模型生成的代码如下:

/* Model step function */

void arm_cortex_m_gettingstarted_step(void)

{

/* Outport: '/Out1' incorporates:

*  Constant: '/Constant'

*  Gain: '/Gain'

*/

arm_cortex_m_gettingstarted_Y.Out1 = arm_cortex_m_gettingstarted_P.Gain_Gain *

arm_cortex_m_gettingstarted_P.Constant_Value;

}

/* Model initialize function */

void arm_cortex_m_gettingstarted_initialize(void)

{

/* Registration code */

/* initialize error status */

rtmSetErrorStatus(arm_cortex_m_gettingstarted_M, (NULL));

/* external outputs */

arm_cortex_m_gettingstarted_Y.Out1 = 0.0;

}

/* Model terminate function */

void arm_cortex_m_gettingstarted_terminate(void)

{

/* (no terminate code required) */

}

停止使用QEMU仿真运行Matlab模型命令为:codertarget.arm_cortex_m.stopQemu

2.1.2 [b]arm_cortex_m_pil_block范例学习[/b] arm_cortex_m_pil_block范例模型演示了如何使用PIL,即通过PC软件仿真和硬件处理器仿真进行两者的闭环控制,可以直接对比PC仿真与硬件处理器仿真的差别。

该范例首先需要编译PIL子系统,并将编译后的生成的PIL模块复制到原模型中然后进行PIL仿真。

6ce5af4800448082435b1a0b59ffc114

图22arm_cortex_m_pil_block范例模型的PIL子系统编译与复制

9273152c66f1a552377d9ba6a0a52ec4

图23arm_cortex_m_pil_block范例模型编译与运行

从图中可以看出PC仿真和PIL仿真的数值误差为0,说明了PIL仿真的正确性。

2.1.3 [b]arm_cortex_m_model_pil_block范例学习[/b] arm_cortex_m_model_pil_block范例使用单个模块的子系统设置为PIL方式并分别运行仿真的方式,无需额外生成PIL模块并复制。

6ef6549bb9dab796886e9a4bd2fd4fe5

图24arm_cortex_m_model_pil_block范例模型编译与运行

2.1.4 [b]arm_cortex_m_top_model_pil范例学习[/b] arm_cortex_m_top_model_pil范例演示了在顶层模型中设置PIL仿真模式的方式。该仿真方式将整个模型生成一个wrapper封装并编译运行。

e65e83803b339b9f0c6dffee8857581b

图25arm_cortex_m_top_model_pil范例模型编译与运行

fc74d5ed956f318b747071dec4199658

图26arm_cortex_m_top_model_pil范例运行后生成的wrapper封装和代码覆盖运行结果

2.2 ECoder的ARM Cortex-M处理器Simulink模型库在Simulink的模型库中,选中EmBedded Coder Support Package for ARM Cortex-M Processors可以查看ecoder的ARM Cortex-M处理器模型库,包含一个即Hardware Interrupt的模型模块,在Simulink中插入该模块,则可以实现ARM Cortex-M处理器的各种中断中执行后续的代码。

其设置界面如下:

05fa0f1dc6d4a106688c2878407b024e

图27ecoder for arm_cortex_m 的Simulink模型库

2.2.1 [b]TODO: Hardware Interrupt的模型模块的使用。[/b]

2.3 开发一个目标处理器/目标开发板TODO:

3 ARM Cortex-M处理器的DSP System Toolbox支持包学习DSP System Toolbox Support Package for ARM Cortex-M Processors主要是采用CMSIS里面的DSPLib中的DSP函数对Matlab默认生成的DSP函数进行替换,可以充分利用ARM Cortex-M处理器内建的DSP硬件对运算进行加速,挺高效率和性能。

3.1 范例学习3.1.1 [b]ex_fircmsis_tut范例学习[/b] ex_fircmsis_tut范例采用FIR滤波器对生成的数据和人为叠加的噪声信号进行滤波,通过演示对比FIR滤波器在PC上和在ARM Cortex-M处理器上的执行结果对比,显示了通过调用ARM Cortex-M的DSPLib库函数进行运算的结果。

该范例首先在设置中实现Code Replacement Library中采用ARM Cortex-M (CMSISI)来进行函数替换,然后生成对应的代码。

0cdea5dcd79d2f3cdf34f45ab32dec62

图26ex_fircmsis_tut范例代码替换库设置与代码替换生成报告

最后采用跟arm_cortex_m_pil_block范例相同的方式进行PC与PIL联合仿真对比,结果如下。

其中设置的时候应该取消Generate Code Only选项,并且设置Create PIL Block。

89b89699caa96d188833efcbfcb79db0

图26ex_fircmsis_tut范例编译和运行结果

3.1.2 [b]ex_fircmsis_tut_q15范例学习[/b] 在Gain模块中将输出修改为fixdt(1, 16, 15)类型,即ARM-CMSIS-DSP中的q15类型,这样对应生成的函数则是相应的q15类型的函数。

eafc339a19a074cf0ee7ae8b608cfcdf

图26ex_fircmsis_tut_q15范例Gain模块设置和代码生成函数替代结果

运行结果相同,不再赘述。

3.1.3 [b]ex_fircmsis_tut_mlfun范例学习[/b] ex_fircmsis_tut_mlfun范例为使用代码替换库将Matlab语句中的dsp.FIRFilter系统对象替换为CMSIS中对应的DSPLib库函数。

与前节不同的是,该范例中的FIR滤波器是一个调用Matlab函数的模块,该函数为:

function y = firfun(u)

%#codegen

persistent firfilter;

if isempty(firfilter)

firfilter = dsp.FIRFilter('Numerator', fir1(63,1/3));

end

y = step(firfilter, u);

end

后续设置和编译运行及结果与前节相同。

0b06260bb73986d9528f5d4fbabc0ad1

图26ex_fircmsis_tut_mlfun范例代码生成和编译运行结果

3.1.4 [b]ex_fircmsis_tut_ml范例学习[/b] Ex_fircmsis_tut_ml范例采用将Matlab函数代码转化为包含调用CMSIS-DSPLib库函数的C代码。

function y1 = ex_fircmsis_tut_ml(u1)

% Copyright 2013-2016 The MathWorks, Inc.

%#codegen

persistent firfilter;

if isempty(firfilter)

firfilter = dsp.FIRFilter('Numerator', fir1(63, 0.33));

end

y1 = firfilter(u1);

end

通过创建一个coder的配置,完成coder设置后,调用codegen生成代码并编译成lib库文件。

cfgEx = coder.config('lib');

cfgEx.CodeReplacementLibrary = 'ARM Cortex-M';

cfgEx.HardwareImplementation.ProdHWDeviceType = 'ARM Compatible->ARM Cortex';

cfgEx.GenCodeOnly = true;

tempdirObj = dstarmexample.dstTempdir('ex_fircmsis_tut_ml_workflow');

dstarmsrc = which('ex_fircmsis_tut_ml');

dstarmtmpdir = tempdirObj.tempDir;

type(fullfile(dstarmsrc))

copyfile(dstarmsrc, dstarmtmpdir, 'f');

cc8eccf4e65c3089592076d30eb6539f

图26ex_fircmsis_tut_生成的C代码及其CMSIS函数替代结果

3.1.5 [b]TODO:生成的代码形成的lib库与外部应用层app的调用集成[/b]

4 版本历史(Revision History)版本号发布时间内容[b]

A02017-05-07初次编写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值