2012-03-06 24 views
2

我试图跨=使用内嵌程序集编译各种ARM处理器的简单程序。它包含汇编指令QSUB,该指令根据this document是有效的ARM和Thumb-2指令。错误:目标CPU不支持ARM模式

这为编译皮质a8时罚款。

当我尝试构建cortex-m3并且无法找出原因时,我在标题中出现编译错误。我试图用编译器开关-mthumb强制执行拇指模式,然后错误更改为“选定的处理器不支持拇指模式”。我有点困惑,因为cortex-m3确实支持拇指模式。

下面是我使用的是CodeSourcery的GCC编译选项:

arm-none-linux-gnueabi-gcc helloworld.c -o a.out -lm -mthumb -mcpu=cortex-m3 
+3

只是要尝试,有时gcc可能会挑选选项顺序,尝试设置CPU类型_before_设置拇指模式。 ('-mcpu = cortex-m3 -mthumb')可能会在helloworld.c – 2012-03-06 18:54:24

+1

拇指(而不是thumb2)之前移动,这是整个手臂系列中最便携的。我无法从手臂找到一个具体的列表,但似乎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指令集... – 2012-03-07 04:07:31

回答

4

QSUB没有在ARM的"Cortex-M3 Devices Generic User Guide" (Document DUI0552A)提及。

此外,TI的"Cortex-M3/M4F Instruction Set, TECHNICAL USER'S MANUAL"表示QSUB在Cortex-M3上不受支持。

我认为你只是将不得不相信GCC告诉你......

+0

谢谢你,我也是独立发现的。我想我必须找到另一种方法去处理链接页面中的饱和操作 – 2012-03-06 19:52:14

+2

@BrandonYates:“对于ARMv7-M架构,它们只能在ARMv7E-M实现中使用”。 ARMv7E-M在Cortex-M4中实现(M3只是ARMv7-M)。也许看看CMSIS-DSP库是否满足你的需求;它支持M3和M4。 – 2012-03-07 13:18:12