【问题标题】:Error: Target CPU does not support ARM mode错误:目标 CPU 不支持 ARM 模式
【发布时间】: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


【解决方案1】:

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

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

我认为你只需要相信 GCC 告诉你的话......

【讨论】:

  • 谢谢,我也是独立发现的。我想我必须找到另一种方法来进行饱和度算术
  • @BrandonYates 来自链接页面:“对于 ARMv7-M 架构,它们仅在 ARMv7E-M 实现中可用”。 ARMv7E-M 在 Cortex-M4 中实现(M3 只是 ARMv7-M)。也许看看 CMSIS-DSP 库是否满足您的需求;它同时支持 M3 和 M4。
【解决方案2】:

根据 TIcortex-a8 的最佳 gcc 标志是

-march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -ffast-math -mfloat-abi=softfp

http://processors.wiki.ti.com/index.php/Cortex-A8

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 2018-08-18
    • 2019-12-11
    • 2012-11-09
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多