目录
前言
我想要对手头的一些支持ArduinoIDE的板子进行测试,那么方法思考了几个,之前编写PC平台的测试软件的时候,我使用的方法是文本比对,其实我没有很理解C#的一些算法内涵,所以具体是按照整数浮点或者其他什么,我没有很清楚。
这次想比对不同型号MCU的处理性能,所以找一个公共的比较多人认可的算法平台想来应该会比较靠谱一点
CoreMark是一个用于嵌入式的开源评测程序,180Mhz的STM32可以跑600分,这一篇中,我将说明如何获取CoreMark并尝试进行移植,使用CoreMark来测试你手头的嵌入式设备的性能
使用流程
1、获取与修改
源代码下载的位置以前是要注册然后·才行,多亏了Github现在直接在网站上就可以进行下载。https://www.github.com/eembc/coremark
下载后复制这些文件
还有两个portme在simple里面,一并复制并且放在一个文件夹的下面
新建文件,命名为core_main.ino,这样可以使用到IDE的一些特性,将原先的core_main.c中的所有代码都复制进来
下文开始文件名将省略core_前缀
点击portme.c,void portable_init(core_portable *p, int *argc, char *argv[])这一个函数是首先运行的,类似void setup()
void portable_init(core_portable *p, int *argc, char *argv[])
{
if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) {
ee_printf("ERROR! Please define ee_ptr_int to a type that holds a pointer!\n");
}
if (sizeof(ee_u32) != 4) {
ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n");
}
p->portable_id=1;
}
在coremark.h中先修改串口打印输出的函数,把#define ee_printf 修改为#define ee_printf Serial.println //printf
在portme.c中,start_time/ stop_time/ get_time这几个函数是用于计算时间用的,修改一下
(上面这个事情我先搁置了,因为发现已经有人完成了)
在一Github项目里我找到了移植到Arduino IDE的版本,和我的方法不一样的是这位老哥他是新建了一个文件来调用CoreMark的执行函数
https://github.com/PaulStoffregen/CoreMark
下载后可以看到这样的文件
2.测试结果
我先对STM32F103C8T6进行了测试,完成测试的时间是12秒左右
然后是降频48Mhz的STM32F103C8T6,15.47秒跑完测试
再然后是STM32G071这个是主打低功耗的,性能就更差一点了
这个必须使用MEGA以上的板子才能跑得动,不然就会像下面这样子,因为内存溢出MCU一直自动复位,这是我烧到Arduino UNO上面的效果
那位开源的哥们,还有给一个列表是许多现有MCU跑的一个结果,按照性价比来说果然还是我们的ESP32有着最好的性能。