元器件选择须以应用为依归 8/32位MCU各擅胜场

kelly的头像
kelly 发布于:周四, 08/18/2016 - 15:45 ,关键词:

正如汽车代替了马车,电子邮件代替了普通邮件一样,32位微控制器(MCU)让8位MCU变得黯然失色。尽管未来8位MCU朝向32位MCU发展将会成为现实,但目前还没那么容易实现。事实证明8位MCU和32位MCU仍是互补的技术,在一些方面各有千秋,而在其它方面的表现却同样出色。这其中的窍门在于厘清何种应用适合哪种MCU架构。

本文比较了8位MCU和32位MCU的使用案例,可作为如何选择这两种MCU架构的指南使用。

本文大部分32位范例将关注于ARM Cortex-M装置,Cortex-M在不同MCU供货商产品组合中表现非常相似。由于8位MCU有很多种架构,所以很难对8位供货商之间进行类似的产品比较。为了进行比较,本文将使用广泛应用、易于理解的8051 8位架构。

事实上,“ARM Cortex和8051哪个比较好”不是个逻辑问题,反而像是在问“吉他和钢琴哪个好”?真正要解决的问题是“哪种MCU最能帮助解决目前面临的问题?”。

不同的任务须使用不同的工具,使用者目的是要了解“如何才能善用所拥有的工具”,包括8位和32位装置。

对不同的装置进行比较,须要对其进行测量。有很多建构工具可供选择,本文尽量选择一些认为能够进行最公平的比较,且最能代表开发人员真实体验的情境。

以下ARM数据是透过GCC+ nanoCLibrary和-03优化选项所生成。

此一比较试验并不为任何一种装置的代码优化,只是简单实现90%开发人员都会使用的常见代码,并呈现普通开发人员所见到的结果,而不是理想状态下的结果。当然,花费诸多时间、精力和财力去调整8051代码使其表现胜过ARM是可能的,反之亦然,但一开始就选择适合该项工作的最佳工具比费尽心力做优化简单多了。

8位MCU功效持续精进

在开始对架构进行比较前,要注意到并非所有的MCU都是一样,这一点非常重要。

如果将基于ARM Cortex-M0+处理器的现代MCU与30年前的8051 MCU做对比,8051 MCU在性能上当然不会胜出。幸运的是,许多供货商一直对8位处理器持续投资。

例如芯科实验室(Silicon Labs)正持续更新基于8051核心的EFM8 MCU产品线,其效能比原始的8051架构更高,而且开发过程也已实现现代化。所以在许多应用中,8位核心能够容易弥补比M0+或M3核心不利的地方,甚至在一些方面性能更佳。

开发工具也很重要。现代嵌入式韧体开发需要全功能IDE、现成的韧体库、丰富的范例、完整的评估和入门套件,以及助手应用,以简化硬件配置、数据库管理和量产编程之类的工作。当MCU有了现代化的8位核心和开发环境时,在很多情况下,这样的MCU将超越基于ARM-Cortex的类似MCU。

以系统规模选择MCU

第一个一般性原则是:ARM Cortex-M核心更适用于较大的系统规模(>64KB代码),而8051装置适用于较小的系统规模(<8KB代码)。中等规模的系统可以选择两种方式,这取决于系统要执行的任务。须要注意的是,在大多数情况下,周边组合将会发挥重要作用。如果需要三个UART、一个LCD控制器、四个频率和两个ADC,用户可能不会在8位MCU上找到所有的周边。

易用性与成本/尺寸之比较

对于中等规模的系统来说,使用任何一种架构都可以完成工作。但主要须考虑是选择ARM核心带来的易用性,还是8051装置带来的成本和物理尺寸优势。

ARM Cortex-M架构具备统一的储存模式,并在所有常见编译程序中支持完整的C99,这使得该架构非常易于写韧体。此外,还可得到一系列数据库和第三方代码。

当然,这种易用性的代价就是成本。对于高复杂性、上市时间较短的应用或缺乏经验的韧体开发人员来说,易用性是个重要因素。

比起32位MCU,8位MCU的成本颇具优势。使用者经常会发现内建2KB/512B(Flash/RAM)的小容量8位MCU,而却很难找到低于8KB/2KB的32位MCU。在不需要很多资源的系统中,储存容量小的MCU能够让系统开发人员获得显著的成本降低。因此,对成本极为敏感或仅需较小储存容量的应用,会更倾向于选择8051解决方案。

8位芯片通常也具备物理尺寸上的优势。例如Silicon Labs提供的最小32位QFN封装为4mm×4mm,而基于8051的8位芯片的QFN封装可小至2mm×2mm。

芯片级封装(CSP)的8位和32位架构之间的差异较小,但却使成本增加,且组装较难。对于空间严格受限的应用来说,通常须要选择8051装置来满足限制要求。

通用代码/RAM效率易影响MCU成本

8051 MCU成本较低的主要原因之一是其使用Flash和RAM的效率通常比ARM Cortex-M核心更高,这允许系统采用更少资源实现。系统越大,这种影响就越小。

然而,这种8位储存资源的优势并不总是如此,这一点很重要。在某些情况下,ARM核心会像8051核心一样高效或比其更高效。例如32位运算在ARM MCU上仅需要一条指令,而在8051 MCU上则需要多条8位指令。显然,这种代码在ARM架构上有更高的执行效率。

ARM架构在Flash/RAM尺寸较小时的两个主要缺点是代码空间效率和RAM使用的可预测性。首要也是最明显的问题是通用代码空间效率。8051核心使用1字节、2字节或3字节指令,而ARM核心使用2字节或4字节指令。

通常情况下,8051指令更小,但这一优势因实际上花费许多时间而受到削弱,ARM核心比8051在一条指令下能做更多工作。32位运算就是这样一个范例。以实践来说,指令宽度是能在8051上产生适度的更密集代码。

代码空间效率

在含有分布式存取变量的系统中,ARM架构的加载/储存架构通常比指令宽度更为重要。试想讯号量的实现,一个变量需要在代码周围的多个不同位置进行减量(分配)或者增量(释放)。ARM核心必须将变量加载到缓存器,对其进行操作并重新储存,这需要三条指令。另一方面,8051核心可以直接在内存位置上进行操作,且仅需一条指令。随着每次对变量完成工作量的增大,由加载/储存而产生的消耗就变得微不足道。但对于每次仅完成一点工作的情况来说,加载/储存能产生重要影响,让8051获得明显的效率优势。

尽管讯号量在嵌入式软件中并非常见结构,但简单的计数器和标志却广泛应用于控制导向的应用中并发挥相同的作用。许多常见的MCU代码都属于这一类型。

另一个原因是ARM处理器比8051核心具有更多的自由使用堆栈。通常情况下,8051装置针对每次函数调用仅在堆栈上储存返回地址(2字节),透过通常分配给堆栈的静态变量处理大量的任务。在某些情况下,这会产生问题,因为这会造成函数默认不可重入。然而,这也意味着必须保留的堆栈空间很小,且完全可预测,这在RAM容量有限的MCU中至关重要。

举个简单的例子,试验者设计了以下程序,然后测量funcB内部的堆栈深度(图1),发现M0+核心的堆栈用了四十八个字节,而8051核心的堆栈仅用了十六个字节。当然,8051核心还静态分配了八个字节的RAM,总共用了二十四个字节。在较大的系统中,这个差异显得微不足道,但是在仅有256字节的ARM的系统中,这就变得很重要。

图1 测量funcB内部堆栈程序示意图。

架构细节之考虑

假设有基于ARM和基于8051的MCU各一个,配有所需的周边,那么对于较大的系统或需要重点考虑易用性的应用来说,ARM装置是更好的选择。如果首要考虑的是低成本/小尺寸,那么8051装置将是更好的选择。本文以下对于每种架构更擅长的应用进行更详细的分析,同时也划分出一般原则。

影响延时因素

两种架构的中断和函数调用延时存在很大差异,8051比ARM Cortex-M核心更快。

此外,高阶周边总线(APB)配备的周边也会影响延时,这是因为数据必须透过APB和AMBA高性能总线(AHB)传输。最后,当使用高频核心频率时,许多基于Cortex-M的MCU需要分配APB频率,这也增加了周边延时。

试验者做了个简单的实验,实验中的中断是透过I/O引脚触发的。该中断对引脚发出一些讯号,并根据引发中断的引脚更新标志,之后再量测其部分参数的变化。图2为此次32位Cortex-M与8051对照实验的程序代码与参数比较。

图2 测试程序代码与所得结果参数

8051核心在中断服务程序(ISR)进入和退出时显示出优势。但是,随着中断服务程序(ISR)越来越大和运行时间的增加,这些延迟将变得微不足道。和既有原则一致,系统越大,8051的优势越小。此外,如果中断服务程序(ISR)涉及到大量数据迁移或大于8位的整数数据运算,中断服务程序(ISR)运行时间的优势将转向ARM核心。例如,一个采用新样本更新16位或32位转动平均(Rolling Average)的ADC ISR可能在ARM装置上执行的更快。

文章来源 : 新电子

围观 502