Gcc 仅编译thumb1

Gcc 仅编译thumb1,gcc,compiler-construction,arm,thumb,Gcc,Compiler Construction,Arm,Thumb,我如何告诉gcc编译成仅Thumb1指令 每个人都知道helloworld.c: #include <stdio.h> main() { printf("Hello world"); } #包括 main(){ printf(“你好世界”); } 这是我的命令行: user@debian-armel:~$gcc-mcpu=cortex-m3-mthumb helloworld.c&&objdump-d a.out 瞧,大多数指令都是32位宽的,而不是我预期的

我如何告诉gcc编译成仅Thumb1指令

每个人都知道helloworld.c:

#include <stdio.h>  
main() {  
 printf("Hello world");  
}  
#包括
main(){
printf(“你好世界”);
}  
这是我的命令行:

user@debian-armel:~$gcc-mcpu=cortex-m3-mthumb helloworld.c&&objdump-d a.out

瞧,大多数指令都是32位宽的,而不是我预期的16位


那么,我做错了什么?Cortex-M3支持Thumb-2,因此编译器可以自由生成32位版本。以下其中一项应满足您的需要:

-march=ARMv5 -mthumb
-march=ARMv4T -mthumb
-march=ARMv6-M
-mcpu=Cortex-M0

不,Cortex-M0和Cortex-M0+不支持Thumb-2,除了BL和一些系统指令(MSR、MRS、DSB、DMB、ISB)。看。是的,我知道它支持一个子集,但它仍然支持它,这意味着gcc仍然可以发出那些Thumb-2指令如果你不指定-march和only-mthumb,你将得到没有Thumb-2扩展的Thumb指令。如果需要,请指定没有thumb2扩展的ARMv5或ARMv4T gcc-mthumb-c myprog.c-o myprog.o是否
-mthumb
将生成Thumb-1或Thumb-2 INSN取决于编译器的构建方式,例如在我的ARM编译器中,默认ISA是ARMv7-A,因此
-mthumb
单独生成32位Thumb模式INSN。另一方面,
-march=armv4t-mthumb
将非常可靠地做正确的事情。