主要内容

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验证过程是设计周期的关键部分,可以确保部署代码的行为与设计相匹配。

先决条件

所需的硬件

  • 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_additionMATLAB函数和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函数进行代码验证。