新闻中心

EEPW首页 > 模拟技术 > 业界动态 > 探索IoT应用中对于8位、32位MCU的选择

探索IoT应用中对于8位、32位MCU的选择

作者:Josh Norem时间:2016-05-26来源:电子产品世界收藏

  在embedded world大会展示产品期间,我曾非常愉快的与一位思虑敏捷的人士进行了交谈。当我向他介绍我们最新推出的EFM8 MCU时,他打断我并问:“可我为什么还要使用8位MCU呢?”这不是我第一次听到这样的问题,当然,也不会是最后一次。

本文引用地址:http://www.eepw.com.cn/article/201605/291787.htm

  人们会很自然想到,正如汽车替代了马拉车、电子邮件替代了普通邮件一样,32位设备让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和8051)时,我感觉就像在互联网论坛上发出“《星际迷航》比《星球大战》好看”的帖子一样,事情很快就能火起来。

  事实上“ARM Cortex和8051哪个更好”并不是个逻辑问题。就像是在问,“吉他和钢琴哪个更好”一样。真正要解决的问题是“哪种MCU能帮我最好的解决当下面临的问题?”。不同的任务需要使用不同的工具,我们的目的是要了解“如何才能最好的运用我们所拥有的工具”,包括8位和32位设备。几乎可以肯定的说,那些简单回答“ARM更好”或“8051更好”的人各有其目的,正在试图销售某种商品。

  对不同的设备进行比较,需要对其进行测量。有很多构建工具可供选择,我尽力选择一些场景,我认为其能够进行最公平的比较,且最能代表开发人员的真实体验。以下ARM数据是通过GCC + nanoCLibrary和-03优化选项所生成的。

  我并不想为任何一种设备优化代码。我只是简单的实现90%开发人员都会使用的最显而易见的“常规”代码。我更感兴趣的是普通开发人员所见到的结果,而不是理想状态下的结果。当然,花费诸多时间、精力和财力去调整8051代码使其表现比ARM更好是可能的(反之亦然),但一开始就选择适合该项工作的最佳工具却更为简易。

  并非所有的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。

  一般性取舍

  在深入探讨内核架构和其它技术细节之前,我要和大家讲一个故事,在我读大学的时候,记得有一次考试,我太在意考取好分数和比其他同学先完成考题,以至于没有注意到在试卷的正反面都印有试题。不用说,我的确是第一个完成考卷的人,但却是我不愿再想起的一次经历。如果一个应用需要的只是256KB的闪存或0.25美元的批量定价,那么分析复杂的MCU特性和功能是没有意义的。这些需求足以说明何种MCU架构才是最佳选择。

  系统规模

  第一个一般性原则是,ARM Cortex-M内核更适用于较大的系统规模(> 64KB代码),而8051设备适用于较小的系统规模(< 8KB代码)。中等规模的系统可以选择两种方式,这取决于系统要执行的任务。有必要注意一点,在大多数情况下,外设组合将会发挥重要作用。如果需要3个UART、1个LCD控制器、4个时钟和2个ADC,你可能并不会在8位MCU上找到所有这些外设。

  易用性vs.成本和尺寸

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

  ARM Cortex-M架构具有统一的存储模式,并且在所有常见编译器中支持完整的C99,这使得这种架构非常易于写固件。此外,还可得到一系列库和第三方代码。当然,这种易用性的代价就是成本。对于高复杂性、上市时间较短的应用或缺乏经验的固件开发人员来说,易用性是个重要因素。

  尽管8位与32位部件相比有些成本上的优势,但真正的区别就在于成本级别。大家经常会发现具有2KB/512B(Flash/RAM)的小容量8位器件,而却很少见低于8KB/2KB的32位器件。在不需要很多资源的系统中,该范围的存储容量能够让系统开发人员获得显著降低成本的解决方案。因此,对成本极为敏感或仅需较小存储容量的应用会更倾向于选择8051解决方案。

  通常,8位器件也具有物理尺寸上的优势。例如:Silicon Labs提供的最小的32位QFN封装为4mm×4mm,而基于8051的8位器件的QFN封装可小至2mm×2mm。芯片级封装(CSP)的8位和32位架构之间的差异较小,但却使成本增加,且组装较难。对于空间严格受限的应用来说,通常需要选择8051设备来满足限制要求。

  通用代码和RAM效率

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

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

  ARM架构在Flash/RAM尺寸较小时的两个主要缺点是:代码空间效率和RAM使用的可预测性。

  首要也是最明显的问题是通用代码空间效率。8051内核使用1字节、2字节或3字节指令,而ARM内核使用2字节或4字节指令。通常情况下,8051指令更小,但这一优势因实际上花费许多时间而受到削弱,ARM内核比8051在一条指令下能做更多工作。32位运算就是这样一个示例。实践起来,指令宽度是能在8051上产生适度的更密集代码。

  代码空间效率

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

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

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

  举个简单的例子,我创建了以下程序。然后测量funcB内部的栈深度,发现M0+内核的栈用了48个字节,而8051内核的栈仅用了16个字节。当然,8051内核还静态分配了8个字节的RAM,总共用了24个字节。在较大的系统中,这个差异显得微不足道,但是在仅有256字节ARM的系统中,这就变得很重要。

  架构细节

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


上一页 1 2 下一页

关键词: Silicon Labs IoT

评论


相关推荐

技术专区

关闭