借助 ShieldBuddy 应对计算密集型项目难题
投稿人:DigiKey 北美编辑
2020-07-08
许多业余爱好者、创客和 DIY 爱好者都使用 Arduino 微机开发板来监视和控制他们的项目。于是,越来越多的专业工程师也开始将这些开发板用作评估和原型开发平台,以便加快开发速度,降低集成电路 (IC)、传感器和外设评估方面的成本。如《使用 Arduino BOB 快速评估传感器和外设》一文所述,这些工程师所在的团队可能比较精简,而且还深受产品上市时间 (TTM) 日益缩短的制约。因此,他们必须承担多个工程领域的工作,同时设法加快元器件评估并降低成本。
其中一种解决方案是将 Arduino 与传感器和外设分线板 (BOB) 之类的开源硬件及库和示例程序之类的开源软件结合使用。尽管有多种 Arduino 开发板可以满足一系列的处理和存储器要求,但是使用浮点运算器 (FPU) 却能更好地完成某些计算,从而避免减慢主处理器的速度。在 Arduino 生态系统中,ShieldBuddy 就已经解决了这一问题。
本文将介绍多种 Arduino 处理平台选项,解释为什么 FPU 功能对许多应用都很重要,然后介绍 ShieldBuddy,这款开发板与 Arduino 开发板采用类似的物理封装,但具有三个独立的 200 MHz 32 位处理器内核,并且每个内核都有各自的 FPU。此外,本文还将介绍该开发板的编程模型,展示其基于 Eclipse 的编程环境及其对 Arduino 集成开发环境 (IDE) 的支持如何帮助 DIY 爱好者和设计人员快速入门。
适合新手和专业人士的 Arduino
刚踏入 Arduino 领域的新手往往从 Arduino Uno Rev3(图 1)入手,这款开发板基于 16 MHz 8 位 ATmega328P 微控制器。该开发板只有 32 KB 的闪存(程序),2 KB 的 SRAM,14 个数字输入/输出 (I/O) 引脚和 6 个模拟输入引脚。其中 6 个数字引脚可以提供脉冲宽度调制 (PWM) 输出,必要时模拟引脚也可用作数字 I/O 引脚。
图 1:Arduino Uno Rev3 开发板基于 16 MHz 8 位 ATmega328P 微控制器。(图片来源:Arduino.cc)
Arduino Uno Rev3 的排针封装是连接扩展板这一庞大子板生态系统的基础,包括 14 个数字 I/O 引脚、6 个模拟输入引脚,以及多个电源、接地和基准源引脚。
继 Uno Rev3 之后,许多用户都转用 Arduino Mega 2560 Rev3 开发板(图 2)。这款开发板基于 16 MHz 8 位 ATmega2560 微控制器。该开发板具有 256 KB 的闪存和 8 KB 的 SRAM。此外,该板的排针封装表明它与 Uno 支持相同的扩展板,不过,Mega 配有更多排针,因此具有 54 个数字 I/O 引脚和 16 个模拟输入引脚。其中 15 个数字引脚可以提供 PWM 输出;同样,必要时模拟引脚也可用作数字 I/O 引脚。
图 2:Arduino Mega 2560 Rev3 开发板基于 16 MHz 8 位 ATmega2560 微控制器。该板的排针封装表明它与 Arduino Uno 支持相同的扩展板,不过,它配有更多排针,因此共有 54 个数字 I/O 引脚和 16 个模拟输入引脚。(图片来源:Arduino)
除了受限于 8 位数据路径和 16 MHz 的时钟频率之外,Arduino Uno 和 Arduino Mega 微控制器均不具备 FPU,因而任何涉及浮点数的计算都会显著减慢这些处理器的速度。
如果用户想要更强的处理能力,则可以升级使用 Arduino Due(图 3)。这款开发板与 Arduino Mega 采用类似的物理封装,但基于 Atmel/Microchip Technology SAM3X8E 的 84 MHz 32 位 Arm® Cortex®-M3 处理器。该开发板具有 512 KB 的闪存、96 KB 的 SRAM、54 个数字 I/O 引脚、12 个模拟输入引脚,以及 2 个由数模转换器 (DAC) 驱动的模拟输出引脚。其中,只有 12 个数字引脚可以提供 PWM 输出;同样,必要时模拟引脚也可用作数字 I/O 引脚。不过,遗憾的是,与 Arduino Uno 和 Mega 一样,Arduino Due 的处理器也不具备 FPU。
图 3:Arduino Due 开发板基于 Atmel SAM3X8E 的 84 MHz 32 位 Arm Cortex-M3 处理器,排针封装与 Arduino Mega 相同。(图片来源:Arduino.cc)
许多用户(包括业余爱好者和专业人士)都喜欢 Arduino Mega 和 Arduino Due 开发板具有较多的引脚。但是,即使是 Arduino Due 的 84 MHz 32 位处理器可能也难以执行某些计算密集型任务。同样,对于需要处理大量数据的大型程序,Due 配备的 512 KB 的闪存和 96 KB 的 SRAM 仍显不足。
尽管如今的微控制器能处理的数据量越来越大,但是从提高效率和降低延迟方面考虑,使用 FPU 可以更好地完成某些计算。
什么是 FPU?为什么需要它?
要讨论 FPU 为何有用,首先要说说计算机处理数字的原理。在计算机中,最简单的数字表示法是整型(整数),而且使用整型数进行计算,运算成本较低。不过,整型数本质上范围有限,因而无法表示较大的动态范围。
对于工程师和科学家而言,这是个问题,因为他们常常需要在同一计算中使用极大和极小的数值。例如,物理学家可能需要同时使用光速 (300,000,000) 和牛顿引力常数 (0.00000000006674) 来进行计算。同样,在数字信号处理 (DSP) 等任务以及人工智能 (AI) 和机器学习 (ML) 应用中,工程师则要使用较大动态范围的数值。
在这种情况下,解决方案就是使用浮点数表示法,即小数点的位置可根据数值的各个数字“浮动”,从而实现更高的数字“分辨率”。但问题在于,尽管 32 位浮点数所占内存与 32 位整型定点数相同,使用浮点数进行计算却需要更多的计算资源。
如果处理器必须使用标准定点硬件进行浮点运算,那么必定会极大地影响该处理器的性能。在这种情况下,解决方案就是为处理器配备特殊的 FPU,即可在很短的时钟周期内完成复杂的浮点运算。
这正是 ShieldBuddy 的用武之地。
ShieldBuddy 为 Arduino 生态系统引入 FPU 和高性能
目前,一款相对较新的兼容 Arduino 的开发板是 Infineon Technologies 的 KITAURIXTC275ARDSBTOBO1,即 ShieldBuddy(图 4)。这款嵌入式评估板主要面向 Infineon 的 TC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore 32 位微控制器。
图 4:ShieldBuddy TC275 配备板载 Infineon TC275 32 位多核处理器,且与 Arduino Mega 和 Arduino Due 采用相同的封装,因而可与市面上供应的许多应用扩展板兼容。 (图片来源:Hitex.com)
ShieldBuddy 与 Arduino Mega 和 Arduino Due 采用类似的物理封装,可与许多应用扩展板兼容,但区别在于它配备的 TC275 具有三个独立的 200 MHz 32 位内核,并且每个内核都有各自的 FPU。此外,ShieldBuddy 具有 4 MB 的闪存(分别是 Arduino Due 的 8 倍、Arduino Mega 的 16 倍),以及 500 KB 的 RAM(分别是 Arduino Due 的 5 倍、Arduino Mega 的 62 倍)。
有一点可明显看出区别:Arduino Mega 内核每微秒 (µs) 只能处理约 16 条 8 位指令;相比之下,TC275 每个内核的周期时间为 5 ns,因而每个内核每微秒通常可执行约 150 至 200 条 32 位指令。由于 ShieldBuddy 的每个处理器内核都有各自的 FPU,因此该板进行浮点运算时,几乎不会削弱性能。
使用 ShieldBuddy 进行开发
使用 ShieldBuddy 时,专业软件开发人员也许希望借助 Eclipse IDE,而业余爱好者和创客可能更偏好使用为人熟知的 Arduino IDE。该板可支持这两个选项。
Arduino 的用户都很清楚,每个草图(程序)必须具有两个标准函数:setup()(单次运行)和 loop()(多次运行)。除此之外,用户还可以创建自己的函数。
ShieldBuddy 的三个内核分别称作 Core 0、Core 1 和 Core 2。在使用 Arduino IDE 的情况下,大多数现有草图都可以编译,以便直接用于 ShieldBuddy 而无需修改。setup() 和 loop() 函数及其调用的所有用户创建的函数经编译后,均默认在 Core 0 上运行。
创建新程序时,用户可将这些函数命名为 setup0() 和 loop0() 以达到相同的效果。另外,用户也可以创建 setup1() 和 loop1() 函数。这些函数及其调用的所有用户创建的函数经编译后,均会自动在 Core 1 上运行。同理,setup2() 和 loop2() 函数及其调用的所有用户创建的函数经编译后,均会自动在 Core 2 上运行。
默认情况下,各个内核独立运行,因此 ShieldBuddy 可以同时运行三个完全独立的程序。尽管如此,各内核间也可使用共享存储器等技术进行通信。此外,每个内核还都可以在其他内核中触发软中断。
结语
事实证明,Arduino 的开源理念取得了巨大的成功,随之衍生的硬件和软件生态系统也得以发展,包含了数百种扩展板、数千个库和应用程序。
尽管早期的 Arduino 开发板(例如 16 MHz 8 位 Arduino Uno 和 Arduino Mega)具有一定的局限性,但较新的产品(例如 84 MHz 32 位 Arduino Due)功能明显就更强大。即便如此,许多用户仍需要更多的程序存储空间(闪存)、更多的数据存储空间 (SRAM) 和更强的处理能力,而这些都绝非任何传统 Arduino 所能提供。
ShieldBuddy 具有 4 MB 的闪存、500 KB 的 SRAM 和三个独立的 200 MHz 32 位处理器内核,而且每个内核都有各自的 FPU,将 Arduino 理念提升到一个全新的层次,因而追求极致的 DIY 爱好者和专业工程师都对它兴趣浓厚。
推荐阅读:
免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。