问题标签 [arm-none-eabi-gcc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
135 浏览

c++ - 编译器语言支持是否对所有编译器端口通用

我正在使用 GNU Arm Embedded Toolchain 10-2020-q4-major (arm-none-eabi-* 10.2.1),我想利用现代 c++ 功能。

所以我试图找出哪些 c++ 特性(语言核心特性以及 libstdc++ 特性)可用于这个特定的工具链。我通读了这个矩阵https://gcc.gnu.org/projects/cxx-status.html,它们似乎没有区分不同的编译器端口。

例如,我如何才能找到是否可以使用 C++17 或 C++20 功能?

问候,雨果

0 投票
1 回答
65 浏览

c - 反汇编的手臂代码似乎有一个错误

我正在使用测试 C 文件为嵌入式 ARM 芯片编译一些测试代码。

test.c如下:

我使用以下命令编译文件

编译时没有抱怨,然后我检查程序集

这会产生以下main()部分的长输出:

为什么它说 0xfffff401 而不是 0xfffff400?为什么减去 3071 而不是 3072?

0 投票
1 回答
263 浏览

embedded - arm-none-eabi-gcc 中的 -specs 参数有什么作用?

我在使用嵌入式 arm gcc 编译器的链接器时遇到了问题,我在网上某处找到了一个教程,说我可以arm-none-eabi-gcc通过包含对我有用的参数来修复链接器错误-specs=nosys.specs,并且它能够编译我的代码。

我的芯片是一个 ATSAM7SE256 微控制器,据我了解,它是一个使用and指令集的arm7tdmi处理器,我一直在使用以下代码编译我的代码:armv4tthumb

并且代码编译没有问题,但我不知道它是否正在做我认为它正在做的事情。

规范文件的意义是什么?您可以使用 设置哪些其他值-specs=,以及在什么情况下您想要设置?nosys.specs我想要一个完全嵌入式的 arm 微控制器的价值吗?

0 投票
2 回答
201 浏览

c - 如何强制 arm gcc 编译器不对未对齐的内存使用 32 位访问

我在一个无法处理未对齐地址上的 32 位访问的内存上工作。对于未对齐的地址,内存支持 8 位级访问。

在我的代码中有一个 memcpy,当我将未对齐的地址传递给 memcpy 时,芯片卡住了。经过深入研究,我发现生成的 memcpy 汇编代码正在对地址进行 32 位访问,无论给定地址是否与 32 位对齐。当我将优化级别降低到 O(2) 时,编译器会生成始终执行 8 位访问的代码。

[编辑]:下面是我正在使用的 memcpy 代码

下面是代码的反汇编

是否可以将 arm-gcc 编译器配置为不对未对齐的地址使用 32 位访问。

0 投票
1 回答
158 浏览

floating-point - ARM Cortex-A9 NEON 和 VFP

我正在使用 ARM Cortex-A9 (zynq7000),我想启用 neon SIMD,但除非指定,否则不要将其用于浮点。

当 arm-none-eabi-gcc 使用以下 fpu 选项(单独)编译时:

  1. mfpu=vfpv3 -mfloat-abi=softfp ,
  2. mfpu=neon-vfpv3 -mfloat-abi=softfp,
  3. mfpu=霓虹灯-mfloat-abi=softfp,

二进制文件 1 和 2 不同。但是 2&3 是相同的(未启用矢量化),我使用 -Og 进行优化。( -Og 不启用 Vectorize 选项)

当我使用选项 mfpu=neon-vfpv3 时,如何确保所有浮点都在 VFP 中完成,而不是在 NEON 中完成?

根据 ARM 架构参考手册,NEON 和 VFP 支持类似的指令,这使得仅通过检查反汇编很难区分差异。

此外,我计划将#pragma GCC ivdep 用于我需要矢量化的循环和函数,以及实现此目的的适当编译器标志是什么?

0 投票
0 回答
180 浏览

arm-none-eabi-gcc - 无法识别的命令行选项“-arch”;你的意思是'-march ='吗?

我正在尝试使用 CMake 和 arm-none-eabi-gcc 在 MacBook M1 上构建一个 STM32 项目。这些是我的 CMake 代码:

如果-arch,我怎样才能让CMake生成-march?

0 投票
3 回答
557 浏览

c - ARM GCC 打包结构警告的地址

在我的代码中,我有这样的东西:

当我使用 arm-none-eabi-gcc 编译它时,我收到警告

.\test.c:11:2:警告:将压缩的“test_struct_t”指针(对齐 1)转换为“uint32_t”{aka 'long unsigned int'} 指针(对齐 4)可能会导致未对齐的指针值 [- Waddress-of-packed-member]

谁能告诉我为什么会这样?获取压缩结构成员的地址当然是危险的。但是整个结构本身应该总是对齐的,不是吗?

0 投票
1 回答
145 浏览

cmake - Cmake没有将编译器选项传递给编译器测试

刚开始使用 CMake 交叉编译 ARM cortex M7 的库。

运行 cmake 构建时,它首先检查编译器是否能够“编译一个简单的测试程序”,出现以下错误:

这个解决方案应该解决哪个

但是这个选项显然没有传递给编译器测试 [2/2]。为什么?

如果我拼错了编译器选项,测试 [1/2] 将失败并包含正确的标志

0 投票
0 回答
109 浏览

c - 在 for 循环期间未分配数组的浮点值(STM32 / arm-none-eabi-gcc)

我想将 ADC 中的一堆 uint16_t 值转换为浮点电压。

为此,我使用 for 循环遍历 uint16_t 数组并将值写入浮点数组。

但是 float 数组保持为 0,就好像没有进行任何分配一样。在 for 循环之外,转换工作。

当我使用调试器单步执行程序时,我看到了合理的浮点值,但它们最终并没有被写入数组。为什么?

临时浮点值显然是 1.847: 显然是 1.847

临时数组索引显然是 0显然是 0

所以我希望 adc_voltages[0] 为 1.847,但事实并非如此: 它不是

代码:

全局变量:

稍后在 main() 中:

函数返回浮点数的地方:

编辑:

感谢您从现在开始使用的所有评论和良好实践提示。特别是使用二维数组。我只是能够解决这个问题。我仍然不确定为什么会这样。“在循环外工作”也不正确,它只有在BSP_conv_I_MPPT()直接在 printf 语句内评估时才有效。

无论如何,下面的二维数组代码现在可以工作了。

0 投票
0 回答
30 浏览

ubuntu - Ubuntu 20 打破了我的 arm-none-eabi-g++ 设置

我有一个为 ARM 目标设备 (samd21) 构建一些代码的 make 设置。这样的工具链在 Ubuntu 16 上完美运行。但是,当更新到 Ubuntu 20 并尝试构建时,我收到以下错误:

重要的错误信息是:arm-none-eabi-g++: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found

显然 -fuse-linker-plugin 选项在某处传递,但它根本不在我的 makefile 中。它可以找到 lib "lto_plugin" 所以它中止。关于如何安装这个库或删除 -fuse-linker-plugin 的任何想法?