Coremark的移植官方已经有文档了, 而且论坛已经有不少人已经发贴了. 这里只是简单说说移植要注意的几点,并且把我移植的工程传上来以供参考.
本人使用的Keil MDK 5.23, ARMCC 5.06 Build 422, 得分为880左右,试过了很多种优化选项, 还是没有能够达到官方的1000多分, 用IAR的话, 本人电脑的版本太低, 不想去搞**什么的了.
这也算个参考吧.
先看我的得分:
- CoreMark For STM32F722 Nucleo Board [url=home.php?mod=space&uid=72445]@[/url] 216 MHz, 18:30:40
- 2K performance run parameters for coremark.
- CoreMark Size : 666
- Total ticks : 12516
- Total time (secs): 12.516000
- Iterations/Sec : 878.875040
- Iterations : 11000
- Compiler version : ARMCC 5060422
- Compiler flags : --c99 -c --cpu Cortex-M7.fp.sp -D__MICROLIB -g -O3 -Otime --apcs=interwork --split_sections
- Memory location : STACK
- seedcrc : 0xe9f5
- [0]crclist : 0xe714
- [0]crcmatrix : 0x1fd7
- [0]crcstate : 0x8e3a
- [0]crcfinal : 0x33ff
- Correct operation validated. See readme.txt for run and reporting rules.
- CoreMark 1.0 : 878.875040 / ARMCC 5060422 --c99 -c --cpu Cortex-M7.fp.sp -D__MICROLIB -g -O3 -Otime --apcs=interwork --split_sections / STACK
- End of Bechmark.
这是官方声称的MDK516得分,但是没有公布编译选项,让人有点摸不着头脑:
如果ST官方没有大忽攸的话, 那么MDK5应该也能达到1082左右分数才对, 可惜本人没有试验成功, 论坛上也没有见过人用MDK到这个分数, 成为一个千古悬案.
说说移植要注意的几点:
1.生成的main函数不用了, 要么改名要么直接删除main.c
2.原来的初始化函数移动到
void portable_init(core_portable *p, int *argc, char *argv[])
中
3.最后免得跑飞,这个函数也改改:
- void portable_fini(core_portable *p)
- {
- p->portable_id=0;
-
- ee_printf("End of Bechmark.\n");
- while(1)
- {
- __NOP();
- }
- }
4. AXI与ITCM接口性能差别不大
5. 如果AXI,Cache对性能影响较大,要开启,很多人跑500多分很可能是这原因
- SCB_EnableICache();
- SCB_EnableDCache();
6.如果是CubeMX生成的工程, 时间宏改成这样即可:
|