8位还是32位,微处理器怎么选?
储存资源的优势并不总是如此,这一点很重要。在某些情况下,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内部的堆叠深度,发现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)涉及到大量资料移转或大于8位元的整数资料运算,中断服务程式(ISR)执行时间的优势将转向ARM核心。例如,一个采用新样本更新16位元或32位元转动平均(Rolling Average)的ADC ISR可能在ARM装置上执行的更快。
8051核心的基本功能是控制代码,其中对于变数的存取是分散的,并且使用了许多控制逻辑(If、Case等)。8051核心在处理8位元资料时也是非常有效的,而ARM Cortex-M核心擅长资料处理和32位元运算。此外,32位元资料通道使得ARM MCU复制大的资料更加有效,因为它每次可以移动四个位元组,而8051每次仅能够移动一个位元组。因此,那些主要把资料从一个地方移到另一个地方(例如UART到CRC或者到USB)的资料流处理应用更适合选择基于ARM处理器的系统。
来做个简单的实验。试验者编译以下两种架构的函数(公式1),变数大小为uint8_t、uint16_t和uint32_t。
随着资料量的增加,8051核心需要越来越多的代码来完成这项工作,最终超过了ARM函数的大校在16位元的情况下,代码大小几乎类似,在执行速度上稍优于32位元核心,因为相同代码通常需要更少周期。还有一点
- 用8位微处理器实现数字低通滤波器设计(05-15)
- 如何构造嵌入式Linux系统(05-23)
- 基于嵌入式Linux的便携式RFID信息采集与处理系统(07-01)
- SPARC微处理器综述(05-29)
- Motorola32位嵌入式微处理器MPC860的开发应用(06-02)
- 基于ARM和uClinux的家庭网关系统(09-14)