2012-03-06 25 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