Arduino玩家如何用ShieldBuddy开发板玩转FPU

描述

许多业余爱好者、创客和DIY爱好者都使用Arduino微机开发板来监视和控制他们的项目。于是,越来越多的专业工程师也开始将这些开发板用作评估和原型开发平台,以便加快开发速度,降低集成电路(IC)、传感器和外设评估方面的成本。如《使用Arduino BOB快速评估传感器和外设》一文所述,这些工程师所在的团队可能比较精简,而且还深受产品上市时间(TTM) 日益缩短的制约。因此,他们必须承担多个工程领域的工作,同时设法加快元器件评估并降低成本。

其中一种解决方案是将Arduino与传感器和外设分线板 (BOB) 之类的开源硬件及库和示例程序之类的开源软件结合使用。尽管有多种Arduino开发板可以满足一系列的处理和存储器要求,但是使用浮点运算器 (FPU) 却能更好地完成某些计算,从而避免减慢主处理器的速度。

在Arduino生态系统中,ShieldBuddy就已经解决了这一问题。 本文将介绍多种Arduino处理平台选项,解释为什么FPU功能对许多应用都很重要,然后介绍ShieldBuddy,这款开发板与Arduino开发板采用类似的物理封装,但具有三个独立的200MHz 32位处理器内核,并且每个内核都有各自的FPU。此外,本文还将介绍该开发板的编程模型,展示其基于Eclipse的编程环境及其对Arduino集成开发环境 (IDE) 的支持如何帮助DIY爱好者和设计人员快速入门。

适合新手和专业人士的Arduino

刚踏入Arduino领域的新手往往从Arduino Uno Rev3(图1)入手,这款开发板基于16MHz 8位ATmega328P微控制器。该开发板只有32KB的闪存(程序),2KB的SRAM,14个数字输入/输出 (I/O) 引脚和6个模拟输入引脚。其中6个数字引脚可以提供脉冲宽度调制 (PWM) 输出,必要时模拟引脚也可用作数字I/O引脚。

Arduino Uno Rev3的排针封装是连接扩展板这一庞大子板生态系统的基础,包括14个数字I/O引脚、6个模拟输入引脚,以及多个电源、接地和基准源引脚。

继Uno Rev3之后,许多用户都转用Arduino Mega 2560 Rev3开发板(图2)。这款开发板基于16MHz 8位ATmega2560微控制器。该开发板具有256KB的闪存和8KB的SRAM。此外,该板的排针封装表明它与Uno支持相同的扩展板,不过,Mega配有更多排针,因此具有54个数字I/O引脚和16个模拟输入引脚。其中15个数字引脚可以提供PWM输出;同样,必要时模拟引脚也可用作数字I/O引脚。

除了受限于8位数据路径和16MHz的时钟频率之外,Arduino Uno和Arduino Mega微控制器均不具备FPU,因而任何涉及浮点数的计算都会显著减慢这些处理器的速度。

如果用户想要更强的处理能力,则可以升级使用Arduino Due(图3)。这款开发板与Arduino Mega采用类似的物理封装,但基于Atmel/Microchip Technology SAM3X8E的84MHz 32位Arm Cortex-M3处理器。该开发板具有512KB的闪存、96KB SRAM、54个数字I/O引脚、12个模拟输入引脚,以及2个由数模转换器(DAC) 驱动的模拟输出引脚。其中,只有12个数字引脚可以提供PWM输出;同样,必要时模拟引脚也可用作数字I/O引脚。不过,遗憾的是,与Arduino Uno和Mega一样,Arduino Due的处理器也不具备FPU。

许多用户(包括业余爱好者和专业人士)都喜欢Arduino Mega和Arduino Due开发板具有较多的引脚。但是,即使是Arduino Due的84MHz 32位处理器可能也难以执行某些计算密集型任务。同样,对于需要处理大量数据的大型程序,Due配备的512KB的闪存和96KB的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位微控制器。

ShieldBuddy与Arduino Mega和Arduino Due采用类似的物理封装,可与许多应用扩展板兼容,但区别在于它配备的TC275具有三个独立的200MHz 32位内核,并且每个内核都有各自的FPU。此外,ShieldBuddy具有4MB的闪存(分别是Arduino Due的8倍、Arduino Mega的16倍),以及500KB的RAM(分别是Arduino Due的5倍、Arduino Mega的62倍)。

有一点可明显看出区别:Arduino Mega内核每微秒 (µs) 只能处理约16条8位指令;相比之下,TC275每个内核的周期时间为5ns,因而每个内核每微秒通常可执行约150至200条32位指令。由于ShieldBuddy的每个处理器内核都有各自的FPU,因此该板进行浮点运算时,几乎不会削弱性能。

使用ShieldBuddy进行开发

使用ShieldBuddy时,专业软件开发人员也许希望借助Eclipse IDE,而业余爱好者和创客可能更偏好使用为人熟知的Arduino IDE。该板可支持这两个选项。

Arduino的用户都很清楚,每个草图(程序)必须具有两个标准函数:setup()(单次运行)和loop()(多次运行)。除此之外,用户还可以创建自己的函数。

ShieldBuddy的三个内核分别称作Core 0、Core1和Core 2。在使用Arduino IDE的情况下,大多数现有草图都可以编译,以便直接用于ShieldBuddy而无需修改。setup()和loop() 函数及其调用的所有用户创建的函数经编译后,均默认在Core0上运行。

创建新程序时,用户可将这些函数命名为setup0() 和loop0() 以达到相同的效果。另外,用户也可以创建setup1() 和loop1() 函数。这些函数及其调用的所有用户创建的函数经编译后,均会自动在Core 1上运行。同理,setup2()和loop2() 函数及其调用的所有用户创建的函数经编译后,均会自动在Core2上运行。

默认情况下,各个内核独立运行,因此ShieldBuddy可以同时运行三个完全独立的程序。尽管如此,各内核间也可使用共享存储器等技术进行通信。此外,每个内核还都可以在其他内核中触发软中断。

结语

事实证明,Arduino的开源理念取得了巨大的成功,随之衍生的硬件和软件生态系统也得以发展,包含了数百种扩展板、数千个库和应用程序。

尽管早期的Arduino开发板(例如16MHz 8位ArduinoUno和Arduino Mega)具有一定的局限性,但较新的产品(例如84MHz 32位Arduino Due)功能明显就更强大。即便如此,许多用户仍需要更多的程序存储空间(闪存)、更多的数据存储空间(SRAM) 和更强的处理能力,而这些都绝非任何传统 Arduino 所能提供。

ShieldBuddy具有4MB的闪存、500KB的SRAM和三个独立的200MHz 32位处理器内核,而且每个内核都有各自的FPU,将Arduino理念提升到一个全新的层次,因而追求极致的DIY爱好者和专业工程师都对它兴趣浓厚。

编辑:金巧

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分