问题标签 [armclang]

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 投票
0 回答
737 浏览

cmake - 更正 CMake 的链接器标志

我正在尝试将嵌入式 gcc arm- 项目转换为使用 ARMClang 而不是 GCC。我的重点是使用 CMake 自动生成生成文件的任务,但我不明白为什么我不能强制执行链接器标志,并且在构建过程中总是出现以下错误

[ 96%] 构建 ASM 对象 CMakeFiles/CLION-f103-armclang.elf.dir/startup/startup_stm32f103xb.o 致命错误:A9912E:未选择 --cpu

我的 CMakeLists.txt 文件的内容如下

首先,要使脚本正确构建和链接,CMakeLists.txt 文件需要进行哪些更改!?其次,如何使链接器输出标志看起来尽可能地遵循。

非常感谢任何帮助

0 投票
1 回答
599 浏览

stm32 - ARM v6 编译器启动代码中的断点指令

我正在使用 ARM 编译器 V6(“新”armclang 编译器)在 Keil MDK 5.28 上为 STM32 开发一个新项目。这是我第一次使用 armclang。

我的重置处理程序正在调用该__main符号。正如预期的那样,这是执行 Keil C 库的一些启动代码,然后调用我的main函数(稍后,我将删除对启动代码的调用,但现在我想了解这个问题)。

问题如下:在 C 库函数 ( _sys_open) 之一中有一条 BKPT 指令。我没有设置这个断点,它也没有出现在断点列表中。我无法删除它(显然试图重建一切)。因此,如果不在此位置中断,我将无法启动调试会话。

我还尝试取消选中“Run to Main”选项。

在此处输入图像描述

你知道这个 BKPT 指令来自哪里以及如何删除它吗?

0 投票
1 回答
42 浏览

arm - armclang/armcc 是否提供复制省略选项?

我已经阅读了一些关于复制省略的 gcc 文档,它们提供了选项“-fno-elide-constructors”来禁用复制省略。我想知道 arm 是否也支持这一点。我在 arm 用户指南和参考指南上找不到任何答案...

0 投票
2 回答
599 浏览

c - 使用 ARM Compiler 6 进行编译和链接时出现标准 C 库链接器问题

我在 ARM DS IDE 中遇到了一些链接器问题,我正在尝试为 ARMVv-8 架构、带有 ARM Compiler 6 的 Cortex A72 处理器构建代码。

我认为这些错误与标准库有关,例如 stdio.h ,math.h 这些错误不应该出现,因为链接器总是在 Linux 机器上寻找标准库路径。

我是否遗漏了某些东西或制造了一些编译器、链接器错误?

0 投票
1 回答
29 浏览

c - -g(或 --debug)命令选项是否会增加加载的内存占用?

-g(或)clang 命令选项是否会--debug增加已编译应用程序的内存占用?具体来说,它会改变嵌入式 ARM 系统上加载的二进制大小吗?

注意:我知道调试版本将符号表和更多调试信息添加到 ELF,但这应该由调试器使用,在主机上运行(例如,带有 Eclipse 的 PC)。问题是它是否会改变加载图像的大小。

0 投票
0 回答
136 浏览

c++ - 将四个以上的参数传递给通过使用 ARM clang 6.6 中的内联汇编编写的包装函数调用的函数

我正在尝试围绕 RTOS 提供的函数创建包装函数。在包装函数中,我使用内联汇编来调用软件中断指令 (SVC),以便处理器跳转到 SWI 处理程序,该处理程序通过首先提取 SWI 编号然后使用该编号索引到 SWI 表来进一步调用实际的 OS 函数。

包装函数的原型与 OS 函数完全相同,因此传递给包装函数的所有参数都以完全相同的顺序转发给 OS 函数。当函数具有少于或等于四个参数并因此通过寄存器 R0-R3 传递时,这一切都很简单。像这样的东西:

但是当函数有超过 4 个参数并且由于第四个之后的所有参数都通过堆栈传递时,如何转发这些参数?

我正在使用 ARM Compiler 6.6 (ARM Clang 6.6),并且我正在使用的系统具有 ARM Cortex R5 处理器。

0 投票
1 回答
159 浏览

arm - armcc 到 armclang 移植错误:未知的寄存器名称 'cp15:0:c9:c12:0'

我正在尝试将我的源代码编译从 armcc 编译器 v5.06 迁移到 armclang v6。而且我看到 armclang 错误说它无法识别 cp15 寄存器。看起来 armcc 与 clang 的声明方式可能会有所不同。但是,我在迁移文档或编译器文档中找不到任何内容。

这是代码片段 -

和错误片段 -

对于类似声明的寄存器,我在其他地方看到相同的错误。任何可能出现问题的指针都会有所帮助。

编辑: 实际答案如下。

0 投票
1 回答
101 浏览

c - 是否可以阻止单个翻译单元或部分翻译单元的优化?

在一个包含数十个模块的项目中,我们O1将调试优化级别作为默认级别。

有时,我需要一个较小的优化(即,根本没有优化)。所以我使用 clang 属性optnone将单个函数排除在优化之外。

但是当要排除的函数数量很大时,这变得很麻烦。

有没有办法从优化中排除整个模块?例如在模块顶部设置一个编译指示。

0 投票
1 回答
57 浏览

c++ - armclang 是否使用属性(“IRQ”)将所有需要的寄存器保存在堆栈上?

我正在使用 Keil ARMCompiler 6.15 (armclang.exe),我怀疑生成的汇编代码的正确性。在我看来,属性 'interrupt("IRQ")' 被忽略了。对我来说,r1 和 r2 也应该保存在堆栈中。当我删除“使用”属性时,我的完整功能被删除(优化)。

谁能看到我犯的错误或我忘记了什么?

最初代码是为 gcc 创建的。

用于中断例程的属性:

C++ 代码:

汇编代码:

0 投票
0 回答
112 浏览

gcc - 使用 GNU gcc 链接器链接使用 ARMCLANG v6 编译的静态库

我有使用最新的 ARM 编译器 ARMCLANG v6 编译的小型静态库。现在我有一个使用这个库的小应用程序。我正在 Segger Embedded Studio 中开发此应用程序以在 Atmel SAM3x8e 微控制器上进行调试。我正在尝试将此静态库链接到我的应用程序,但出现错误:我尝试在应用程序中使用的所有函数上的未定义符号。在 Segger 中,我尝试了 GCC 链接器和 Segger 链接器以及同样的问题。然后我在 Segger 中创建了小型测试库,并毫无问题地与应用程序链接。

是否可以将 ARMCLANG v6 编译库与 GNU GCC 链接器或 Segger 一起使用?可能是我错过了一些可用于使用 ARMCLANG 创建库的选项?

谢谢你。

PS。我会在我的应用程序中使用 ARMCLANG,但 ARMCLANG 的免许可版本的代码大小限制为 32K。