小编提到过随着嵌入式平台和框架之间的相互学习和融合,Arduino爱好者的工具箱里的工具也越来越多了,比如时下最流行的支持Arduino IDE开发的“四剑客”:

Arduino UNO R3

UNO作为Arduino官方的标准开发板,血统当然最纯正,各种资源也最丰富。奈何这位“正宫太子”资质确实平平,一颗ATMega328P 8位AVR的心,这几年让人觉得有点“力不从心”了。

STM32F103C8T6 BluePill核心板

我们提到过这块外号叫“BluePill(蓝色药丸)”的STM32F103C8T6核心板,蓝色药丸兄可谓出身世家,STM32家族庞大,兄弟众多,各个领域都有涉及。虽然作为家族小弟,这位仁兄有着32位的ARM心,72MHZ的主频,要身材有身材要模样有模样,还不骄不躁,价格亲民。10块钱不香么,您还要啥自行车?

ESP8266和ESP32两兄弟

这两兄弟可谓是两匹土著黑马,完全没有显赫的家世,纯凭自己骨骼奇异、天赋异禀,借着物联网的大潮顺势而起,备受众人喜爱。在左邻右舍你一勺我一碗的给养下,什么C/C++、Lua、MicroPython、JS、mRuby、BASIC...什么功夫都会点。兄弟特点也很直白,小弟ESP8266只钻研WiFi门,然后就是头铁价格低,不服就肝。大哥ESP32双核心,左手练WiFI,右手练蓝牙,弟弟会的大哥我也全会,价格也很亲民。

那有人可能会问,这“四剑客”里如果分个高下,谁的性能最牛呢?

把四块开发板的参数列张表的话:

纯从参数上判断的话,很多硬件参数是高下立判的,比如说如果我们要比较四块开发板的处理能力最快,那从主频上看,应该是ESP32最猛,毕竟是双核,ESP8266应该比STM32F103稍快,最后才是8位的UNO R3。

理论上应该是这样的,但实际上是这样的么?如果是,那到底快多少呢?今天我们就来实践一下。

判断快的方法其实很简单:大家在同一时间间隔里处理同样的工作,谁的干的活越多谁就越快,或者大家干等量的工作,谁用的时间最少谁就越快。接下去我们就设计几种工作进行比较。

素数运算

素数又称质数,指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。不废话,上代码:


//素数运算实验long start       = 0;long max_seconds = 30;long i           = 2; // Start at 2long found       = 0; // Number of primes we've foundlong lastPrime   = 0;
void setup() {  Serial.begin(57600);while (!Serial) { }Serial.println("Prime calculation starting.");start = millis();}
void loop() {  int prime = is_prime(i); // Check if the number we're on is primeif (prime == 1) {    //Serial.print(i);    //Serial.println(" is prime ");    lastPrime = i;    found++;  }int running_seconds = (millis() - start) / 1000;if (max_seconds > 0 && (running_seconds >= max_seconds)) {    Serial.print("\nFound ");    Serial.print(found);    Serial.print(" primes in ");    Serial.print(max_seconds);    Serial.println(" seconds");    Serial.print("Highest prime found was: ");    Serial.println(lastPrime);    delay(60000);i     = 2;    found = 0;    start = millis();  }i++;}
int is_prime(long num) {  // Only have to check for divisible for the sqrt(number)  int upper = sqrt(num);// Check if the number is evenly divisible (start at 2 going up)  for (long cnum = 2; cnum <= upper; cnum++) {    long mod = num % cnum; // Remainderif (mod == 0) {      return 0;    } // If the remainer is 0 it's evenly divisible  }return 1; // If you get this far it's prime}

这段代码的作用就是让单片机在30秒的时间内找尽可能多的素数,然后输出找到的素数数目和最大的素数。这里考验的是单片机纯整数运算的能力。

我们让四剑客都运行一遍相同的程序。结果如下:

这里让小编比较惊讶的是STM32F103竟然秒掉了ESP8266,理论被打脸?当然ESP32大哥遥遥领先,默认还只用了一个核。

浮点运算

所谓的浮点运算,简单地理解就是小数的加减乘除运算。因为单片机里处理的都是整数,小数就要用类似科学计数法的方式来表示。小数计算比整数复杂多了,有些单片机比如ESP32内置了单独的浮点计算器。

测试代码如下,即输出10万次浮点运算的耗时:

//浮点运算实验#pragma GCC optimize ("-O0") //disable the optimizerfloat tt, aa = 12345.8;long loops = 100000;
void setup() {  Serial.begin(115200);  while (!Serial) { }  Serial.println("Floating point calculation starting.");}
void loop() {  long start = millis();  for (long i = 0; i < loops; i++) {    tt = 5000.0 * aa / i;  }  Serial.println(millis() - start); //milliseconds毫秒  Serial.println("=====");  delay(2000);}

测试结果如下:

I/O速度测试

最后,我们要来进行比较的是输入和输出的速度比较。比如pinMode,digitalWrite还有digitalRead这几个函数的运行速度。

//I/O速度测试实验#pragma GCC optimize ("-O0") //disable the optimizerint tt = 0;long loops = 100000;
#if defined(ARDUINO_ARCH_AVR) //Arduino#define testPin 2#else#if defined(ARDUINO_ARCH_ESP8266) //ESP8266#define testPin D2#else#if defined(ARDUINO_ARCH_ESP32) //ESP32#define testPin 2#else#define testPin A0 //STM32
#endif#endif#endif
void setup() {  Serial.begin(115200);  while (!Serial) { }  Serial.println("I/O speed test starting.");}
void loop() {  long start = millis();  for (long i = 0; i < loops; i++) {    pinMode(testPin, OUTPUT);    digitalWrite(testPin, LOW);    digitalWrite(testPin, HIGH);        pinMode(testPin, INPUT);    digitalRead(testPin);    if (digitalRead(testPin)) {      tt = 150 * 1234;    } else {      tt = 554 % 12;    }  }  Serial.println(millis() - start); //milliseconds毫秒  Serial.println("=====");  delay(2000);}

测试结果如下:

总结

首先我们得承认三组实验还可以做的更加严谨,比如像开发板的不同设计、编译器设置、SDK的类型和版本等都会影响速度;还有对比结果可以更详细,比如整数运算和浮点运算都可以分加减乘除、digitalRead和digitalWrite、analogRead和analogWrite都应该分开测速...等等。

但通过上面的三组实验粗略比较,相信大家已经对“四剑客”的“谁最快”、“快多少”有了大致的了解。但“快”并不是我们选择的唯一标准,最快的并不是最好的,适合你项目的才是最好的。

比如你的项目需要WiFi不需要蓝牙,而且对于性能并没有太高的要求,那就选NodeMCU/ESP8266;比如你的项目不需要无线连接,需要比较好的性价比,那就选STM32F103C8T6核心板,如果不会设置各种库和环境、简单能上手就行,那就乖乖选Arduin UNO R3吧。

如果你不想选择,“四剑客”全都要,那欢迎光临我们的小店,四种开发板全有售。

创客常用开发板“四剑客”对比,谁最“快”?相关推荐

  1. arduino编译器_Arduino开发板“四剑客”里,谁最“快”?

    在<都2020年了,还有必要学Arduino吗>一文中,小编提到过随着嵌入式平台和框架之间的相互学习和融合,Arduino爱好者的工具箱里的工具也越来越多了,比如时下最流行的支持Ardui ...

  2. 兼容arduino的linux开发板,Arduino的各种常用开发板

    Arduino开发板大全,来看看你玩过哪些? 昨天认识了Arduino,今天来看看Arduino的各种常用开发板. 它有各种型号的,如Arduino Uno.Arduino Leonardo.Ardu ...

  3. 【华为云技术分享】盘点物联网常用开发板

    摘要:本文主要介绍物联网中目前较为常用的几款开发板,简单介绍一下各自的特点,希望对你有所帮助. 1 引言 众所周知开发板是物联网架构中的感知层智能设备,这类设备通常有芯片.通信模组.以及操作系统组成. ...

  4. 【华为云技术分享】物联网常用开发板

    摘要:本文主要介绍物联网中目前较为常用的几款开发板,简单介绍一下各自的特点,希望对你有所帮助. 1 引言 众所周知开发板是物联网架构中的感知层智能设备,这类设备通常有芯片.通信模组.以及操作系统组成. ...

  5. Arduino 开发板介绍及对比

    一.UNO/UNO r3 Arduino / Genuino Uno是基于ATmega328P的单片机开发板.它有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入脚,16 MHz晶振 ...

  6. 地平线 旭日X3 SDB开发板 (四) yolov3自训练模型板上运行流程记录

    文章目录 一.准备工作 二.检查模型 三.板上运行 四.参考 一.准备工作 onnx 1.5 Opset version 10 自己训练的darknet模型 yolov3 darknet 转 onnx ...

  7. arduino 鸿蒙,Arduino 开发板介绍及对比(上)

    一.UNO/UNO r3 Arduino / Genuino Uno是基于ATmega328P的单片机开发板.它有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入脚,16 MHz晶振 ...

  8. 移植安装ModBus到ARM开发板

    1.libmodbus官网 2.下载 二.交叉编译 1.解压 2.创建安装目录 3.进入解压的目录 4.配置编译选项 5.编译 6.安装 7.生成动态链接库 三.移植到ARM开发板 1.复制文件到AR ...

  9. 联盛德 HLK-W806 (五): W801开发板上手报告

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

最新文章

  1. 浏览器插件:一款解决谷歌浏览器吃内存神器插件,你值得试一试!
  2. 如何使用JavaScript中的工厂函数构建可靠的对象
  3. 《Netkiller Spring Cloud 手札》Spring boot 2.0 mongoTemplate 操作范例
  4. MySQL 指定过滤条件
  5. 拼包函数及网络封包的异常处理
  6. idea tomcat启动乱码问题
  7. 三菱melsec-a系列plc的指令与编程_三菱Q系列PLC定时器、计数器结构化编程基础
  8. 接第三方图片滑动验证极验
  9. 个人对傅里叶分析的理解与整理(持续整理中)
  10. 每天一个小技巧(新建桌面)
  11. 三维重建——D2HC-RMVSNet网络详解
  12. 计算电路门数和nand2的面积
  13. Report WebCore crash to the ErrorReportUtils at:Fri Jul 24 09:59:08 格林尼治标准时间+0800 2015
  14. .NET Framework 4 安装未成功 一般信任关系失败
  15. python爬虫系列之下载在线文档Excel(石墨)
  16. _tsplitpath_s(分解路径)
  17. Netty服务如何写出数据
  18. 律师要用到什么计算机技巧,【执业技巧】律师如何优雅地使用苹果电脑?这7款工具很有用...
  19. 腾讯视频投屏显示无法连接服务器,腾讯视频投屏不能快进
  20. 英语的各种 n. adj. vt. vi. 等词性解释

热门文章

  1. jquery 表单重置通用方法
  2. MSN空间上的以往技术贴整理
  3. Linux下服务器模型 【转载】
  4. 使用超图在网页上浏览地形
  5. VS2012调试ReactOS源码环境搭建4 - 生成ReactOS镜像和VS解决方案成功
  6. SQL having 子句示例 - 使用Sqlite演示
  7. 超图空间数据模型概要1
  8. 各种Oracle常见操作
  9. 前端性能调优之Yahoo--23条
  10. 00029_引用数据类型