一、前言
之前的文章中我仅通过rt-thread系统配置未改动源码的情况下,就在RP2350芯片上跑起了系统和测试。CPU性能测试能完美完成,但用MemoryPerf工具的默认配置去测试SRAM性能还不能精确完成,误差会有些大。本文说明如何优化RP2350芯片的SRAM性能测试。
二、测试源码修改
2.1 MemoryPerf工具修改
MemoryPerf工具测试的目标是测试cpu对内存的连续读写性能。
MemoryPerf的默认配置是给大块内存(比如1MB)读写性能测试准备的,对整个内存块的单次读测试或者写测试的重复次数是200次,所以,对1MB内存进行测试会产生200MB的数据量。MCU对这种量级的数据读写耗时一般以秒计,从系统获得的计时值与实际耗时之间的误差可以忽略,测试运行结果会很精确。但用默认的200次重复计数测量小块内存时,比如4KB的内存块,只测试800KB的数据量,MCU实际完成时间是毫秒级的,而从系统获得的计时值是10毫秒的整数倍,会造成从系统获得的计时值与实际耗时之间的误差比较大,测试运行结果不精确。
所以,对于小内存块测试需要增大测试重复次数值,但该值无法通过menuconfig配置,只能修改源码。
测试重复次数值由工程的packages/MemoryPerf-latest/src/mem_pef.c文件里的ITERATIONS宏定义,默认值是200,我改成了20000。这样小块内存性能测试就能比较精确。
2.2 rt-thread修改
从上面的RP2350芯片系统总线连接图可以看出,芯片的520KB SRAM其实分了3大块:
- 4x64KB的SRAM0-3:地址0x20000000~0x2003FFFF
- 4x64KB的SRAM4-7:地址0x20040000~0x2007FFFF
- 2x4KB的SRAM8-9:地址0x20080000~0x20081FFF
据此,我修改了rt-thread内存配置,在工程的board/board.h文件中,把PICO_SRAM_SIZE宏从520改成256。
这样就把RP2350芯片520KB SRAM内存的前256KB(即SRAM0-3)给rt-thread系统使用,剩下SRAM的可以进行内存测试。这样,系统内存和测试内存在逻辑上和物理上完全独立,互不干扰。
三、测试及结果
将修改的代码编译下载到pico2兼容板上后,先运行了SRAM4-7的4KB、16KB、32KB块测试。
4KB测试结果:
16KB测试结果:
32KB测试结果:
可以看出RP2350片上arm核对SRAM 4KB及以上数据块的内存读写性能基本相同。arm核32bit写性能达到了近400MBps,32bit读性能达到了240MBps。
下面是SRAM8-9的4KB块测试。
结果与SRAM4-7一致。