Cortex-M系列处理器对比

ARM发展至今,已经设计了9代处理器构架,每一代架构又设计了不同的处理器核心。
下表并没有把全部的处理器核心列举出来,只做为参考。

从第6代开始,ARM11以后的处理器命名方式改为3个系列:

Cortex-A:面向性能密集型系统的应用处理器内核
Cortex-R:面向实时应用的高性能内核
Cortex-M:面向各类嵌入式应用的微控制器内核

目前市面上主流的微控制器主要还是Cortex-M0,M3,M4和M7。
Cortex-M33,M35等新一代微控制器内核应该还要几年才会普及开来。 


目前所有Cortex-M内核的ARM官方提供的功能对比如下:

官方提供的表内容很多,但是有一些参数并没有出现在这个表里面。
因此我自己整理了一个我们平常比较关心的几个参数:

架构

DMIPS

FPU

硬件除法

中断数

中断优先级

Cortex-M0

ARMv6-M

0.87/MHz

32

4

Cortex-M0+

ARMv6-M

0.95/MHz

32

4

Cortex-M3

ARMv7-M

1.25/MHz

240

256

Cortex-M4

ARMv7-M

1.25/MHz

单精度

240

256

Cortex-M7

ARMv7-M

2.14/MHz

双精度

240

256

Cortex-M3和Cortex-M4基本上只有FPU的区别,其实M4还多了一些DSP扩展指令。
Cortex-M7性能爆表,DMIPS跑分已经超过了Cortex-A8。

虽然它们之间存在这么多差异,但是向上兼容性却做的很好。
Cortex-M0向上兼容M3,M3向上兼容M4,M4向上兼容M7。
这种兼容是二进制级别的兼容,也就是说用Cortex-M0编译出来的代码,可以直接在M3运行。
只不过由于指令集的原因,不能发挥M3全部的性能。

为什么这么说呢?
因为Cortex-M0只支持Thumb基础指令集,大量16位指令,和少数几条32位指令。
其中大部分16位指令只能访问R0 - R7寄存器,比如LDR/STR。
要访问R8-R12只能使用MOV指令。

而Cortex-M3则支持Thumb2扩展指令,包含了大量的32位指令,运行效率可以极大提升。
比如LDRD指令,可以一次性读取64位数据到2个寄存器。

此外由于架构的原因,Cortex-M0不支持非4字节对齐的32位整数访问,而Cortex-M3则可以。


核心寄存器差异 

Cortex-M0比后续产品,少了FAULTMASK和BASEPRI寄存器。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值