GNU Arm 嵌入式工具链 | arm-none-eabi-gcc 选项:Thumb (-mthumb) 和 Arm (-marm) 状态有啥区别?

Posted

技术标签:

【中文标题】GNU Arm 嵌入式工具链 | arm-none-eabi-gcc 选项:Thumb (-mthumb) 和 Arm (-marm) 状态有啥区别?【英文标题】:GNU Arm Embedded Toolchain | arm-none-eabi-gcc options: What is a difference between Thumb (-mthumb) and Arm (-marm) state?GNU Arm 嵌入式工具链 | arm-none-eabi-gcc 选项:Thumb (-mthumb) 和 Arm (-marm) 状态有什么区别? 【发布时间】:2020-12-12 07:17:44 【问题描述】:

我有一个可能微不足道的问题,但Thumb (-mthumb)Arm (-marm) state 之间有什么区别以及为什么大多数教程建议使用Thumb state?

我很好奇这到底是什么意思?跟什么有关?

最好的!

【问题讨论】:

【参考方案1】:

我建议看这两篇文章,一篇来自Arm,Instruction Set Architecture(-marm表示GCC会生成arm32/A32代码,-mthumb表示会生成thumb/T32),还有这篇研究论文, Profile Guided Selection of ARM and ThumbInstructions.

基本上,这两个指令集在可用指令集及其编码方面有所不同。因此,与使用 arm/A32 相比,使用 thumb/T32 应该获得更小更快的可执行文件。

这也是大部分教程推荐使用 thumb/T32 指令集的原因。

【讨论】:

这就是我的意思!非常感谢!我肯定会阅读这些文章。

以上是关于GNU Arm 嵌入式工具链 | arm-none-eabi-gcc 选项:Thumb (-mthumb) 和 Arm (-marm) 状态有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

STM32 Eclipse + ARM GNU 工具链错误链接器

arm交叉编译器gnueabinone-eabiarm-eabignueabihfgnueabi区别

ARM交叉编译工具链

由于在 IAR 工作台中使用 GNU ARM 工具链而导致的错误

arm交叉编译器gnueabinone-eabiarm-eabignueabihf的区别

Linux中使用交叉编译二进制分析工具链