当使用默认的代码生成时,在生成的代码中,我们会发现对于一些数学函数,比如sin 、cos都是调用的标准数学库math.h里的函数。而这个数学库是针对通用定点MCU的,执行效率会比较低。那么怎么生成那些带有浮点运算单元和专用数学库的MCU的嵌入式C代码呢?比如stm32F4中M4f内核系列的MCU。Simulink是通过硬件支持包的形式,来支持其专用代码的生成。那么怎么设置呢。

1、Matlab 2018b版本硬件支持包的安装

通过matlab——>附加功能——>获取硬件支持包。搜索ARM,选择Embedded Coder Support Package for ARM Cortex-M Processors 进行安装。如下:
在这里插入图片描述

2、生成专用C代码的设置

simulink模型默认的数据类型是double,因为带浮点运算单元的Stm32F4是单精度的浮点运算单元,所以先把模型设置成单精度。然后进行代码生成环境的设置。如下:
在这里插入图片描述
在这里插入图片描述
对比下设置前后生产代码的差异:

设置前:
在这里插入图片描述
设置后:
在这里插入图片描述
这样就生成了带有浮点运算单元ARM数学库的专用C代码。其数学库函数的执行效率更高,充分发挥MCU性能。

3、Matlab 2022b版本硬件支持包的安装

当我们按2018b版本那样获取硬件支持包的时候,会提示“续订您的软件维护服务”,进入不了硬件支持包的下载安装界面。因为检测到安装的Matlab不是正版,当然这个可以买个正版授权,或者在某宝上买个教育账号。那么这样是不是安装不了硬件支持包呢,这里我们通过另一种离线的方式安装硬件支持包。

3.1、先到官网下载离线硬件支持包

下载链接:Support Software Downloader - MATLAB & Simulink

3.2、选择matlab版本,下载需要的硬件支持包

双击解压下载的文件,然后登录账号,选择matlab的版本,下载需要的硬件支持包;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:1、下载的路径不要去改它,默认就行;
2、硬件支持包很容易下载失败。如果下载失败,切换不同的网络信号,可以用电脑连接手机
发射的4G/5G热点试下。或者翻墙试下。(我在公司下载时一直提示失败,在家下载一次
就成功了);文末提供了2022b版本的硬件支持包 Embedded Coder Support Package
for ARM Cortex-M Processors 的下载链接

3.3、离线安装硬件支持包

下载完后的支持包默认在以下路径 C:\Users\mengqi\Downloads\MathWorks\SupportPackages\R2022b
然后找到matlab安装目录下的下面这个可执行文件,我的路径是:C:\R2022b\bin\win64

在这里插入图片描述
然后把他拷贝到默认的离线支持包下载的路径下,也就是上面的C:\Users\mengqi\Downloads\MathWorks\SupportPackages\R2022b 路径下。
然后双击这可执行文件,就可以离线安装支持包了。

3.4、检测硬件支持包是否安装成功

可以在下面的窗口中,查找是否有 ARM Cortex-M库的存在,如果有说明安装成功了。

在这里插入图片描述

但是当我们用上面的模型,在2022b版本的环境下,生成的代码是下面这个样子的,发现并没有替代sin和cos函数,还是使用标准库中的sinf 和cosf函数。

在这里插入图片描述
在这里插入图片描述

其实这里需要设置下sin cos 模块属性的逼近方式,如下图:

在这里插入图片描述

这样就可以生成替代库中的sin cos代码了,如下图:

在这里插入图片描述
在这里插入图片描述

参考模型:https://download.csdn.net/download/wanrenqi/38527855

模型中使用的是matlab 2018b版本,硬件支持包如果不能在线下载,可以下载下面的离线安装包。里面带有离线支持包的安装说明。
Matlab2018b版本的硬件支持包 Embedded Coder Support Package for ARM Cortex-M Processors

2022b版本的硬件支持包 Embedded Coder Support Package for ARM Cortex-M Processors 的下载链接:2022b版本的硬件支持包 Embedded Coder Support Package for ARM Cortex-M Processors

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐