【发布时间】:2012-03-06 18:45:47
【问题描述】:
我正在尝试为各种 ARM 处理器交叉编译一个带有内联汇编的简单程序。它包含汇编指令 QSUB,根据this document,它既是有效的 ARM 指令,又是 Thumb-2 指令。
在为 cortex-a8 构建时,这对我来说编译得很好。
当我尝试为 cortex-m3 构建时,标题中出现编译错误,但不知道为什么。我尝试使用编译器开关 -mthumb 强制使用拇指模式,然后错误变为“所选处理器不支持拇指模式”。我有点困惑,因为 cortex-m3 实际上支持拇指模式。
这是我在 codesourcery 的 gcc 中使用的编译选项:
arm-none-linux-gnueabi-gcc helloworld.c -o a.out -lm -mthumb -mcpu=cortex-m3
【问题讨论】:
-
只是一些尝试,有时 gcc 对选项顺序可能很挑剔,尝试设置 CPU 类型在设置拇指模式之前。 (
-mcpu=cortex-m3 -mthumb) 甚至可能在 helloworld.c 之前移动两者 -
thumb(不是 thumb2)是 arm 家族中最便携的。我无法从 arm 中找到具体列表,但似乎 cortex-m4 是 ARMv7E-M 而 cortex-m3 是 ARMv7-M。查看当前的 ARMv7-M ARM,它显示 QSUB 是 ARMv7E-M 特定的,并非所有 ARMv7 内核。 (旧的 armv7-m arm 确实将 QSUB 显示为简单的 ARMv7-M 指令,非常令人困惑)。请注意 Cortex-m0 和 -m1 基于 armv6 并且具有非常有限的 thumb2 指令集...
标签: c gcc arm cortex-m3 codesourcery