ARM Cortex-M 用什么指令集?
扫描二维码
随时随地手机看文章
引言
笔者接触嵌入式领域软件开发已近五年,几乎用的都是 ARM Cortex M 内核系列的微控制器。在这五年期间,感谢C语言编译器的存在,让我不用接触汇编即可进行开发,但是彷佛也错过了一些风景,没有领域到编译器之美和CPU之美,所以决定周末无聊的休息时间通过寻找资料、动手实验、得出结论的方法来探索 ARM CPU 架构的美妙,以及C语言编译器的奥秘。(因为我个人实在是不赞同学校中微机原理类课程的教学方法)。- ARM探索之旅 | 一、带你认识ARM Cortex-M阵营
一、Arm指令集架构
ARM指令集架构简称为ISA,支持三种指令集:A64、A32、T32。- A64指令集在 Armv8-A 中,用于支持64位架构
- A32指令集在 Armv6 和 Armv7架构中,称为ARM指令集
- T32指令集在 Armv6 和 Armv7架构中,称为Thumb指令集
A32 Instruction Set
A32指令集,在 armv8 之前的架构中也被称为 「ARM 指令集,指令长度固定32位,4字节对齐」。T32 Instruction Set
T32指令集,在 armv8 之前的架构中被称为 Thumb 指令集。最初,ARM 指令集的长度固定为 32 位,为了改善用户代码的代码密度,「Thumb 指令集被设计为 16 位指令集」,开发者可以同时使用ARM指令集和Thumb指令集来降低代码大小。但这是两套指令集,两个运行状态,需要在ARM状态和Thumb状态之间来回切换,非常麻烦。随着时间的推移和Thumb-2技术的引入,「作为Thumb指令集的补充,ARM指令集的大部分功能都被纳入到了Thumb指令,Thumb指令集演化为16位和32位混合长度指令集,称为Thumb-2指令集」。Thumb-2指令集的诞生,使得编译器可以在单个指令集中平衡性能和代码的大小,提供了极好的代码密度,最小化系统内存大小和成本。二、Arm架构扩展
ARM还提供了一系列的架构扩展用于满足下一代处理器的需求,这些扩展为ARM处理器提供了一些新的功能。DSP扩展
DSP for Cortex-M 为 ARM Cortex-M 处理器提供了高性能的「信号处理能力」,用于声音、音频、传感器中枢、机器学习等场景, 不需要额外的 DSP 设备即可完成信号处理的工作。带有 DSP 扩展的处理器包括Cortex-M4、Cortex-M7、Cortex-M33、Cortex-M35P、Cortex-M55处理器。DSP扩展指令在 Thumb 指令集和可选的浮点运算单元的基础上添加,使得在为Cortex-M处理器添加数字信号处理的同时,保持了原有Cortex-M编程模型的易用性。SIMD指令
这些带有DSP扩展的 Cortex-M 处理器,还提供了 「SIMD 指令」来操作8位或者16位的整数。SIMD表示单指令多数据,在所有寄存器仍是32位的基础上,「SIMD指令可以同时操作2个16 bit 的值或者4个8 bit 的值」。工作于8位或16位数据的指令对于处理诸如视频数据或者音频数据的时候非常有用,因为这些数据不需要32位的宽度,SIMD指令提供了并行处理这些数据的能力。浮点单元
ARM浮点单元技术为「半精度、单精度和双精度的浮点运算」提供了高性能和高效率的硬件支持。Arm浮点单元使用完整的软件库支持,完全兼容IEEE-754标准,特别适用于对浮点计算精度要求比较高的应用场景。浮点数据类型的应用场景如下:- 汽车控制程序
- 3D图形
- 工业控制系统
- 运动控制系统