完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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模拟器等的硬件支持包。
本文主要通过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 arm_cortex_m_gettingstarted范例学习 该范例建立一个最简单的Simulink模型,然后完成针对ARM Cortex-M处理器开发的设置,生成代码,最后运行在QEMU模拟器中。 使用Simulink打开arm_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 arm_cortex_m_pil_block范例学习 arm_cortex_m_pil_block范例模型演示了如何使用PIL,即通过PC软件仿真和硬件处理器仿真进行两者的闭环控制,可以直接对比PC仿真与硬件处理器仿真的差别。 该范例首先需要编译PIL子系统,并将编译后的生成的PIL模块复制到原模型中然后进行PIL仿真。 从图中可以看出PC仿真和PIL仿真的数值误差为0,说明了PIL仿真的正确性。 2.1.3 arm_cortex_m_model_pil_block范例学习 arm_cortex_m_model_pil_block范例使用单个模块的子系统设置为PIL方式并分别运行仿真的方式,无需额外生成PIL模块并复制。 2.1.4 arm_cortex_m_top_model_pil范例学习 arm_cortex_m_top_model_pil范例演示了在顶层模型中设置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处理器的各种中断中执行后续的代码。 其设置界面如下: 2.2.1 TODO: Hardware Interrupt的模型模块的使用。 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 ex_fircmsis_tut范例学习 ex_fircmsis_tut范例采用FIR滤波器对生成的数据和人为叠加的噪声信号进行滤波,通过演示对比FIR滤波器在PC上和在ARM Cortex-M处理器上的执行结果对比,显示了通过调用ARM Cortex-M的DSPLib库函数进行运算的结果。 该范例首先在设置中实现Code Replacement Library中采用ARM Cortex-M (CMSISI)来进行函数替换,然后生成对应的代码。 最后采用跟arm_cortex_m_pil_block范例相同的方式进行PC与PIL联合仿真对比,结果如下。 其中设置的时候应该取消Generate Code Only选项,并且设置Create PIL Block。 3.1.2 ex_fircmsis_tut_q15范例学习 在Gain模块中将输出修改为fixdt(1, 16, 15)类型,即ARM-CMSIS-DSP中的q15类型,这样对应生成的函数则是相应的q15类型的函数。 运行结果相同,不再赘述。 3.1.3 ex_fircmsis_tut_mlfun范例学习 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 后续设置和编译运行及结果与前节相同。 3.1.4 ex_fircmsis_tut_ml范例学习 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’); 3.1.5 TODO:生成的代码形成的lib库与外部应用层app的调用集成 4 版本历史(Revision History)版本号发布时间内容。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:15 , Processed in 0.934178 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号