新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 8位还是32位,微处理器怎么选?

8位还是32位,微处理器怎么选?

作者:时间:2018-07-24来源:网络收藏

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

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

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

架构细节之考量

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

影响延时因素

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

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

试验者做了个简单的实验,实验中的中断是透过I/O引脚触发的。该中断对引脚发出一些讯号,并根据引发中断的引脚更新标志,之后再量测其部分参数的变化。

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

8051核心的基本功能是控制代码,其中对于变数的存取是分散的,并且使用了许多控制逻辑(If、Case等)。8051核心在处理元资料时也是非常有效的,而ARM Cortex-M核心擅长资料处理和元运算。此外,元资料通道使得ARM MCU复制大的资料更加有效,因为它每次可以移动四个位元组,而8051每次仅能够移动一个位元组。因此,那些主要把资料从一个地方移到另一个地方(例如UART到CRC或者到USB)的资料流处理应用更适合选择基于ARM处理器的系统。

来做个简单的实验。试验者编译以下两种架构的函数(公式1),变数大小为uint8_t、uint16_t和uint32_t。

随着资料量的增加,8051核心需要越来越多的代码来完成这项工作,最终超过了ARM函数的大小。在16位元的情况下,代码大小几乎类似,在执行速度上稍优于32位元核心,因为相同代码通常需要更少周期。还有一点很重要:只有采用最佳化的ARM编译代码时,这种比较才有效。未最佳化的代码需要花费几倍长的时间。

这并不意味着有大量资料移动或32位元运算的应用不应该选择8051核心完成。

在许多情况下,其它方面的考量将超过ARM核心的效率优势,或者说这种优势是无关紧要的。举例来说,考虑使用UART到SPI桥接器时,该应用花费大部分时间在周边之间复制资料,而ARM核心会更高效地完成该任务。然而,这也是一个非常小的应用,可能放入到一个仅有2KB储存容量的晶片就足够了。

尽管8051核心效率较低,但它仍然有足够的处理能力去处理该应用中的高资料速率。对于ARM装置来说,可用的额外周期可能处于空闲回圈或“等待中断”(WFI),等待下一个可用的资料到来。在这种情况下,8051核心仍然最有意义,因为额外的CPU周期是微不足道的,而较小的Flash封装会节约成本。如果使用者要利用额外的周期去做些有意义的工作,那么额外的效率将是至关重要的,且效率越高越可能越有利于ARM核心。这个例子说明,清楚被开发系统所关注的环境中的各种架构优势是何等重要,而作出这个最佳的决定是简单但却重要的一步。

指标为8051特殊优势

8051装置不像ARM装置般统一的储存映射,而是对存取码(Flash)、IDATA(内部RAM)和XDATA(外部RAM)有不同的指令。为了产生高效的代码,8051代码的指标会说明它指向什么空间。然而,在某些情况下,使用通用指标,可以指向任何空间,但是这种类型的指标是低效的存取。例如,将指标指向缓冲区并将该缓冲区资料输出到UART的函数。如果指标是XDATA指标,那么XDATA阵列能被发送到UART,但在代码空间中的阵列,首先需要被复制到XDATA。通用指标能同时指向代码和XDATA空间,但速度较慢,并且需要更多的代码来存取。

专用区域指标在大多情况下能发挥作用,但是通用指标在编写使用情况未知的可重用代码时非常灵活。如果这种情况在应用中很常见,那么8051就失去了其效率优势。

仔细评估了解MCU使用优势

本文已经多次注意到,运算倾向于选择ARM,而控制倾向于选择8051,但没有应用仅仅着眼于计算或控制,该怎样才能定义各种应用,并计算出它的合适范围呢?

本文考量一个由10%的32位元计算、25%的控制代码和65%的一般代码构成的假定应用时,其不能明确的归成8或32位元类别。这个应用也更注重代码空间而不是执行速度,因为其并不需要所有可用的运算效能,并且必须为成本进行最佳化。

成本比应用速度更为重要的事实在一般代码情形下将为8051核心带来些微优势。此外,8051核心在控制代码中有中间等级的优势。ARM核心在32位元计算方面占上风,但是这并非是很多应用所重视的。考量到所有这些因素,这个特殊的应用选择8051核心更加合适。

如果做一个细微的改变,假设该应用更关心执行速度而非成本,那么通用代码不会倾向于哪种架构,并且ARM核心在计算代码中全面占有优势。在这种情况下,虽然有比计算更多的控制代码,但是最后结果将相当均衡。显然,在这个过程中有很多的评估,但是分解应用,然后评估每一元件的技术将能确保使用者了解,在哪种情况下哪种架构有更显着的优势。



关键词: 8位 32位 微处理器

评论


相关推荐

技术专区

关闭