3

尝试使用为 ARM Cortex-M4 编译一些代码时出现以下错误

gcc -mcpu=cortex-m4 arm.c  

`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
arm.c:1: error: bad value (cortex-m4) for -mtune= switch

我在关注GCC 4.7.1 ARM options。不确定我是否遗漏了一些关键选项。任何将 GCC 用于 ARM 的启动程序也将非常有帮助。

4

3 回答 3

4

正如starblue 在评论中暗示的那样,该错误是因为您使用的是为编译 x86 CPU 而构建的本机编译器,而不是用于编译到 ARM 的交叉编译器。

GCC 在任何给定的编译器二进制文件中仅支持单一通用架构类型——因此,尽管 GCC 的同一个副本可以为 32 位和 64 位 x86 机器编译,但您不能同时编译到 x86 和 ARM GCC 的副本——你需要一个 ARM 特定的 GCC。

(正如 auselen 建议的那样,即使您只是将它用作设置的起点,获得一个预建的也可以为您节省大量工作。您需要拥有 GCC、binutils 和一个 C 库至少,这些都是独立的开源项目,预建版本已经完成了组合工作。我会推荐Sourcery CodeBench Lite,因为这是我公司生产的,我认为这是一个相当不错的项目.)

于 2012-11-01T08:43:38.947 回答
0

就像其他人已经指出的那样,您正在为您的主机使用编译器,并且您需要一个编译器来为您的目标处理器生成代码(交叉编译器)。就像@Brooks 建议的那样,您可以使用预先构建的工具链,但如果您想推出自己的交叉编译器、libc 和 binutils,有一个不错的工具叫做Crosstool-NG. 它极大地简化了构建一个为特定处理器生成代码而优化的交叉编译器的过程,因此您不会被一个通用的预构建工具链所束缚,它通常为一系列兼容的处理器构建代码(例如,您可以调整工具链以适应为您的特定目标生成 ASM,或为特定于您的处理器的硬件 FPU 生成浮点代码,而不是仅使用大多数预构建工具链默认的软件浮点例程)。

于 2013-05-14T18:20:05.337 回答
0

正如错误消息所说, -mcpu 已弃用,您应该使用所述的其他选项。然而,“弃用”仅仅意味着它的使用可能不会继续得到支持;它仍然可以工作。

ARM Cortex-M4 是 ARM Architecture V7E-M,所以你应该使用-march=armv7-m(文档没有具体列出armv7e-m,但自文档上次更新以来可能已经添加。E本质上是 M3 和 M4 之间的区别 - DSP 指令,因此编译器不会生成利用这些指令的代码。使用 ARM 的 Cortex-M DSP 库可能是使用这些指令来使您的应用程序受益的最佳方式。如果您的部件具有 FPU,则需要其他选项来启用代码一代。

于 2012-11-01T18:49:56.463 回答