MATLAB函数的处理器在环验证
本示例向您展示如何使用嵌入式Coder®支持包STMicroelectronics®STM32处理器用于MA金宝appTLAB®函数的处理器在环(PIL)验证。
本例中使用的STM32F4-Discovery板支持两个不同的PIL通信接口,即ST-LINK和S金宝apperial (USART2)。ST-LINK通信接口不需要任何额外的电缆或硬件,除了用于连接STM32F4-Discovery板到主机的USB type a转Mini-B电缆。串口通信接口需要使用USB TTL-232线缆。使用串行通信接口运行PIL仿真比使用ST-LINK运行PIL仿真快得多。我们建议尽可能使用串行接口serial (USART2)用于PIL。
对于其他发现板如STM32F746G-Discovery、STM32F769I-Discovery和STM32L475VG-Discovery支持的通信接口为Serial。金宝app
在本例中,您将学习如何从一个简单的MATLAB函数生成PIL MEX函数。运行PIL MEX函数时,从MATLAB函数生成的c代码将在意法半导体STM32F4-Discovery基于ARM Cortex-M4的微控制器。将计算结果转入MATLAB进行数值验证。在此过程中,您可以分析代码执行情况。PIL验证过程是设计周期的关键部分,可以确保部署代码的行为与设计相匹配。
先决条件
如果您是嵌入式编码器的新手,请访问嵌入式编码器产品页面以获得概述和教程。
如果您不熟悉从MATLAB代码生成代码,我们建议您完成从MATLAB代码生成C代码.
如果您使用的是ST-Link/V2,请按照章节中描述的步骤安装ST-Link/V2 USB驱动程序为STMicroelectronics STM32板安装驱动程序.
所需的硬件
STMicroelectronics STM32F4-Discovery板
USB type A转Mini-B电缆,用于ST-LINK
USB TTL-232电缆- TTL-232R 3.3V,用于串行通信
请注意:此示例使用FTDI朋友USB TTL-232R 3.3V适配器。
任务1 -创建一个新的文件夹和复制相关文件
下面的代码将在当前工作文件夹中创建一个文件夹。新文件夹将只包含与此示例相关的文件。如果不希望影响当前文件夹(或者不能在此文件夹中生成文件),则应该更改工作文件夹。
codertarget.stm32f4discovery.demo_setup(“simple_addition”);
在本例中,我们使用simple_addition.m函数,该函数只添加两个输入并返回结果。要查看这个函数的内容:
类型simple_addition
的% # codegen
该函数中的指令表明MATLAB代码是用于代码生成的。
任务2 -从命令行生成PIL MEX函数
以下步骤提供了生成代码的命令和MATLAB函数库,以在STM32F4-Discovery板上进行验证。
步骤1:创建一个编码器。EmbeddedCodeConfig
对象生成代码并创建MATLAB函数库simple_addition
.
Config = code . Config (“自由”,“是”,真正的);
步骤2:为PIL配置对象。
配置。VerificationMode =“公益诉讼”;
步骤3:指定要在其上验证生成代码的硬件。
配置。硬件= code . Hardware (“STM32F4-Discovery”);
步骤4:选择PIL通信接口。
选择“ST-LINK”
作为PIL通信接口,步骤如下:
config.Hardware.PILInterface =“ST-LINK”;
选择“连环(USART2)”
作为PIL通信接口,步骤如下。
config.Hardware.PILInterface =“连环(USART2)”;config.Hardware.PILCOMPort =“COM28”;
设置PILCOMPort
的步骤2至4代码验证和验证与PIL和监视和调优找到COM口进行串口通信。
请注意:其他探索板块,
选择“Serial”作为PIL通信接口。
设置PIL通信的波特率为
config.Hardware.PILBaudRate = 115200;
步骤5:将堆栈大小限制为合理的大小,例如512字节,因为默认大小比硬件上可用的内存大得多。
配置。StackUsageMax = 512;
步骤6:可以启用详细生成以在命令行上查看生成日志。
配置。Verbose = 1;
第七步:类的库代码simple_addition
MATLAB函数和PIL接口。
Inp =单(零(1,30));codegen (“配置”配置,“参数”{输入,输入},“simple_addition”);
在上述命令中,可使
声明MATLAB函数“simple_addition”的输入参数的数据类型和大小。的codegen
命令将代码生成到以下文件夹中
codegen\lib\simple_add -独立的代码
simple_addition
.codegen\lib\simple_addition\pil -用于pil的接口代码
simple_addition
.
此外,这个步骤创建simple_addition_pil
在当前文件夹中的PIL MEX功能。这允许您测试MATLAB代码和PIL MEX函数,并比较两者之间的结果。
任务3 -运行PIL MEX函数
运行PIL MEX函数,将其行为与原始MATLAB函数的行为进行比较,并检查运行时错误。
U1 =单(兰特(1,30));U2 =单曲(兰特(1,30));Y = simple_addition_pil(u1,u2);
使用以下命令终止PIL执行。
清晰的simple_addition_pil;
任务4 -验证生成的代码
为了验证生成代码的数值精度,将MATLAB结果与PIL MEX函数的结果进行比较:
Norm (y - simple_add (u1,u2))
任务5 -概要文件生成的代码
若要启用代码执行分析,请设置CodeExecutionProfiling
的编码器。EmbeddedCodeConfig
编码器配置对象真正的
在生成MATLAB函数代码之前步骤7任务2。
配置。CodeExecutionProfiling = true;
启用概要分析时,生成的代码将使用定时信息进行检测。当PIL MEX函数从内存中清除时,分析结果将传输到MATLAB。
要积累分析结果,在循环中运行simple_addition函数100次:
对于k=1:100, y = simple_addition_pil(u1,u2);结束
在清除PIL MEX函数后,可以获得分析结果:
明确simple_addition_pil
调出分析报告:
ProfileResultsWithoutCRL = getCoderExecutionProfile('simple_add ');报告(ProfileResultsWithoutCRL)
任务6 -使用“ARM Cortex-M”代码替换库(CRL)
要利用针对ARM Cortex-M处理器的优化CRL,请分配CodeReplacementLibrary
图书馆ARM Cortex-M (CMSIS)
并重新构建PIL MEX功能步骤7任务2:
配置。CodeReplacementLibrary = 'ARM Cortex-M (CMSIS)';
在循环中运行simple_addition函数100次来累积分析结果:
对于k=1:100, y = simple_addition_pil(u1,u2);结束
在清除PIL MEX函数后,可以获得分析结果:
明确simple_addition_pil
调出分析报告:
ProfileResultsWithCRL = getCoderExecutionProfile('simple_add ');报告(ProfileResultsWithCRL)
将分析结果与中获得的结果进行比较任务5.
其他可以尝试的事情
在STM32F746G-Discovery, STM32F769I-Discovery和STM32L475VG-Discovery板上运行示例,使用PIL对MATLAB函数进行代码验证。