ST在发布每一款STM32时都会标出它的CoreMark跑分,这是一个测试单核CPU性能的跑分程序,有源码,支持多种平台(在Windows,Linux下都可以编译执行)。
在跑操作系统的情况下STM32F750的CoreMark得分会是多少呢?出于好奇本人试着交叉编译出了可以在uClinux系统下执行的coremark程序。
具体的操作如下:
1. 在Linux宿主机(或虚拟机)上下载CoreMark源码,https://github.com/eembc/coremark
2. 解压并进入coremark目录:cd coremark-master/
3. 修改coremark/linux/core_porme.mak文件
# Use this flag to define compiler to use
#CC = gcc
CC = arm-uclinuxeabi-gcc
#CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -I. -DFLAGS_STR=\"$(FLAGS_STR)\"
CFLAGS = $(PORT_CFLAGS) -I$(PORT_DIR) -I. -DFLAGS_STR=\"$(FLAGS_STR)\" -mcpu=cortex-m3 -mthumb -static
4. 编译 make PORT_DIR=linux, 成功后会在coremark目录生成一个名为coremark.exe的可执行文件(exe扩展名是脚本里写死的,不必在意,自己重命名一下就可以)
5. 把上一步生成的可执行文件拷贝到STM32F750板子上(拷贝的方法随意,nfs,tftp,scp,U盘,sd卡,甚至串口传送都可以)
6. 添加可执行属性并执行, 然后静待十几秒钟就可以看到测试结果了
/tmp # chmod +x coremark
/tmp # ./coremark
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 17089
Total time (secs): 17.089000
Iterations/Sec : 643.688923
Iterations : 11000
Compiler version : GCC4.4.1
Compiler flags : -O2 -DPERFORMANCE_RUN=1 -lrt
Memory location : Please put data memory location here
(e.g. code in flash, data on heap etc)
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x33ff
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 643.688923 / GCC4.4.1 -O2 -DPERFORMANCE_RUN=1 -lrt / Heap
最后可以看到coremark实测得分为643,这和ST官方的1082 coremark还是有很大不同的(裸奔,只跑coremark)。
考虑到uClinux是一个多任务的操作系统,这个得分还是比较合理,而且有实际意义的。随着编译器的更新和优化这个成绩还有提升的空间
下面是STM32F750 uClinux跑分时后台运行的任务:
/tmp # ps
PID USER VSZ STAT COMMAND
1 root 420 S init
2 root 0 SW [kthreadd]
3 root 0 SW [ksoftirqd/0]
4 root 0 SW [kworker/0:0]
5 root 0 SW< [kworker/0:0H]
6 root 0 SW [kworker/u2:0]
7 root 0 SW< [khelper]
8 root 0 SW [kdevtmpfs]
9 root 0 SW< [writeback]
10 root 0 SW< [crypto]
11 root 0 SW< [bioset]
12 root 0 SW< [kblockd]
13 root 0 SW< [cfg80211]
14 root 0 RW [kworker/0:1]
15 root 0 SW< [rpciod]
16 root 0 SW [kswapd0]
17 root 0 SW [fsnotify_mark]
18 root 0 SW< [nfsiod]
40 root 0 SW [irq/60-stm32-qu]
41 root 0 SW [spi4]
42 root 0 SW< [dwc2]
43 root 0 SW [irq/64-40012c00]
44 root 0 SW [kworker/u2:1]
45 root 0 SW< [krfcommd]
46 root 0 SW< [deferwq]
71 root 316 S /usr/sbin/dropbear
79 root 0 SWN [jffs2_gcd_mtd3]
80 root 464 S -/bin/hush
96 root 428 R ps
/tmp #