请选择 进入手机版 | 继续访问电脑版
查看: 1872|回复: 1

【MiCOKit3165开发套件试用体验】2、圆周率计算

[复制链接]

24

主题

88

帖子

480

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
480
发表于 2018-9-4 17:09:06 | 显示全部楼层 |阅读模式
*本文作者徐珂靖

今天我们要测试一下MiCOKit3165的计算性能。

这次使用的编译器是MiCoder IDE

说到性能测试,大家最先想到的一定是素数计算和圆周率计算吧。

下面,有请我们大名鼎鼎的pi同学登场(此处应该有掌声)

pi是我做评测时常用的测试代码,曾经在各种平台上跑过。比如这个超链接里介绍友善之臂NanoPiNeo上跑圆周率计算测试:浮点性能测试帖子

我们的pi同学为了参加这次测评,做了兼容处理,把一些不必要的函数去掉了,甚至把手表都丢了。老搭档microtime同学已经哭晕在厕所
曾经,它的样子是这样的
#include "sys/time.h"#include "unistd.h"#include #include #include #define MICRO_IN_SEC 1000000.00double microtime();int main(){     printf("\t--------pi--------\n");    double s=1;    double pi=0;    double i=1.0;    double n=1.0;    double dt_err;    double dt;    double p;     double start_time,end_time;    start_time = microtime();    dt_err=microtime()-start_time;    start_time = microtime();    while(fabs(i)>=1e-9){        pi+=i;        n=n+2;        s=-s;         i=s/n;    }    pi=4*pi;    dt=microtime()-start_time-dt_err;    p=dt;    p=atan(p);    p=p*2/3.1415926;    p=100-(p*50);    printf("\tpi = %.9lf\n",pi);    printf("\tpoint = %.7lf\n",p);    printf("time = %lf s\n",dt);    return 0;}double microtime(){        int tv_sec,tv_usec;        double time;        struct timeval tv;        struct timezone tz;        gettimeofday(&tv,&tz);        return tv.tv_sec+tv.tv_usec/MICRO_IN_SEC;}
现在,它的样子是下面这样的。我们发现Pi同学为了参加这个测试确实做了很多改变,跑分之余还学会抽空点个灯了。
#include "mico.h"#include "math.h"#define os_helloworld_log(format, ...)  custom_log("helloworld", format, ##__VA_ARGS__)int application_start(void){        mico_system_init(mico_system_context_init(0));        double s = 1;        double pi = 0;        double i = 1.0;        double n = 1.0;        MicoGpioOutputTrigger(MICO_SYS_LED);        mico_thread_sleep(1);        MicoGpioOutputTrigger(MICO_SYS_LED);        os_helloworld_log("------PI------\n");        while (fabs(i) >= 1e-6) {                pi += i;                n = n + 2;                s = -s;                i = s / n;        }        pi = 4 * pi;        os_helloworld_log("PI = %.6lf\n", pi);        while (1)        {                MicoGpioOutputTrigger(MICO_SYS_LED);                os_helloworld_log("Hello HIT\n", pi);                mico_thread_sleep(1);        }}
我们的pi同学前几天刚在各种ARM Cortex-A和x86-64平台跑过,有些意犹未尽,这把打算在MiCOKit3165上也跑跑。
  
如果你想知道它在arm平台上的跑分,可以去ickey论坛的友善之臂nano pi板块一睹它的风采。

当然,我们MiCOKit3165同学也是ARM平台,属于Cortex-M4,核心是stm32F411RE。
看过我前一篇评测的同学应该知道,我所使用的编程器是ST-Link V2
所以,我要新建一个编译命令,让它使用ST-Link V2把程序下载到板子上。
命令是:
helloworld@MK3165 total download JTAG=stlink-v2
如下图所示,添加stlink的make命令

双击那个命令就开始编译了。最后,当命令行显示如下字符就是下载完毕了。

然后,把串口接上。你可以用板载usb转串口,也可以用板载ttl串口,供电可以在ttl口供,也可以从usb口供,然后电脑端的串口调试器又有好多种可以选择。。。。。这一步就八仙过海各显神通吧,方法非常多,灵活使用,不要拘泥于形式。
串口输出如下
[2][Platform: mico_platform_common.c:  98] Platform initialised, build by GNUC[677][BME280_USER: bme280_user.c: 480] BME280_ERROR: no i2c device found![704][RTOS: mico_rtos_common.c:  82] Started FreeRTOS v7.1.0[1303][SYSTEM: system_misc.c: 222] Free memory 75368 bytes[1309][SYSTEM: system_misc.c: 228] Kernel version: 31621002.050[1315][SYSTEM: system_misc.c: 231] MiCO version: 3.0.0[1320][SYSTEM: system_misc.c: 233] Wi-Fi driver version wl0: Nov  7 2014 16:03:45 version 5.90.230.12 FWI, mac D0:BA:E4:18:70:AA[1333][SYSTEM: config_server.c: 148] Config Server established at port: 8000, fd: 1[2532][helloworld: helloworld.c:  54] ------PI------[7739][helloworld: helloworld.c:  62] PI = 3.141591
截图如下

我们可以发现,当把圆周率精确到小数点后6位时,MiCOKit3165需要大约5秒才能把结果算出来

那么其他平台有多快呢,我们对照一下。
下图是全志H3,时间0.05955秒

同样的算法,MiCOKit3165需要5秒, H3只要0.06秒,有将近80倍的差距。
MiCOKit3165已经哭晕过去了,他表示这个测试不公平,拿它短板跟别人长项比,它的专业领域在小数据量的实时计算和IO控制。

我们给 MiCOKit3165一个表现机会,下一篇评测文章将要测试一下它的实时IO控制性能。我们非常期待它的表现。

最后,感谢庆科和云汉提供的这次评测机会,我会在接下来的文章里多发一点干货,与大伙儿一起学习和分享该开发板的相关知识。

回复

使用道具 举报

1

主题

26

帖子

183

积分

注册会员

Rank: 2

积分
183
QQ
发表于 2018-9-11 15:17:28 | 显示全部楼层
赞!







                                                (小手一抖,经验到手,为了升级,到处游走,纯属路过,不要介意,高抬贵手,立马飘走...)
理论上,理论和实践是没有差异的。但实践中,是有的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表