问题标签 [armcc]
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.
c - ADS 1.2 C 编译器工具选项
我正在尝试将检测/分析调用添加到 C 源代码。我发现的许多编译器都有允许您执行此操作的标志(--gnu_instrument、-finsturment-functions 等)。然后为插入的函数调用提供定义。从那里,您可以使用生成的调用图以及您决定从分析调用中提取的任何指标来做一些很酷的事情。
但是,我需要检测使用 ADS 1.2 编译的代码
(源码是用\ARM\ADSv1_2\Bin\armcc.exe构建的)
老实说,这个编译器对我来说已经很老了,而且我很难找到很多有用的信息。我真正想要的只是要检查的编译器选项的完整列表,但我一定错过了它。(就选项而言,链接的文档感觉不完整)
我确实偶然发现使用 -instrument 作为一个选项,虽然没有给出错误(当明显错误的标志出现时,-asdf),但在使用 -S 时对生成的程序集没有影响。但我无法在任何文档或帮助菜单中找到 -instrument,所以我可能只是使用不正确。或者我想它可能是一个被删除的功能,但仍然可以让你编译没有错误,我真的不知道。
如果有人对这个编译器有经验或者只是一个更好的谷歌人,任何帮助将不胜感激
c++ - armcc中.arm.extab条目的结构是什么?
我试图准确了解异常表 (.arm.extab) 的工作原理。我知道这取决于编译器,所以我将自己限制为 armcc(因为我使用的是 Keil)。
表中的典型条目如下所示: b0aa0380 2a002c00 01000000 00000000
据我了解,第一个词编码个性例程的指令,而第三个词是 R_ARM_PREL31 重定位到 catch 块的开头。
让我感到困惑的是第二个词 - 它似乎被分成 2 个短裤,其中第二个测量距离投掷功能开始的一段距离,但我不确定具体是什么(也不知道第一个短裤是做什么的)。
是否有任何地方记录了这些条目的结构?
我找到了 2 个相关文档,但据我所知,它们没有与编译器相关的信息,因此它们还不够:http: //infocenter.arm.com/help/topic/com.arm.doc。 ihi0044f/IHI0044F_aaelf.pdf http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038b/IHI0038B_ehabi.pdf
cmake - CMake:如何仅在链接可执行命令中为链接库添加后缀?
我在 cmake 作业中使用ARMCC工具链。根据我的经验,在使用 armlink 链接目标文件和库时,如果库是通过 armar -rc 或其他选项打包的。无论如何,在最后一个链接命令中,我们需要为库,以便 armlink 可以将库视为对象。但在工具链文件中。链接命令写成:
我想不出一种给库添加后缀的方法,同时在使用 armar 打包库时没有这个后缀“(*)”
armlink --partial 可以从另一个方面解决这个问题,但我希望有一种方法可以只在这个链接命令中添加后缀。谢谢!
c++ - 在构造函数初始化器列表中初始化 C++ 对象数组
我正在尝试初始化一个对象数组。这似乎在 Keil 中失败,使用armcc编译器,使用 --cpp11 标志。
以下是我的类Wheel
,稍后将在 Vehicle 类中使用。
该类Vehicle
使用了一个 Wheel 数组,这些在构造函数中被初始化。我想理想地初始化它是这样的:
另一种选择是初始化构造函数主体中的所有内容,如下所示:
编译器文档提到:
ARM 编译器支持初始化列表和统一初始化,但标准库不提供
std::initializer_list
. 可以使用用户提供的std::initializer_list
初始化列表和统一初始化实现。
如何为我的用例定义初始化列表?
arm - armclang/armcc 是否提供复制省略选项?
我已经阅读了一些关于复制省略的 gcc 文档,它们提供了选项“-fno-elide-constructors”来禁用复制省略。我想知道 arm 是否也支持这一点。我在 arm 用户指南和参考指南上找不到任何答案...
c++ - 如何使 CMake 与专有的 C++ 编译器配合使用?
我正在构建一个我想支持某个专有平台的应用程序。它使用了CMake 似乎不喜欢的 ARMCC 的修改版本 - 无论我做什么,它都会不断尝试armlink
在不应该的地方提供奇怪的标志,而忽略覆盖其行为的尝试。
是否有可能从本质上提供一个关于 CMake 应该如何处理特定编译器的全新定义?即在整个过程中指定用于编译、链接等的二进制文件和标志、预期的文件扩展名等,这样CMake 就不会做任何讨厌的事情?CMake 似乎使自定义编译器定义变得非常晦涩难懂。
编辑:我已经让它提供了大部分正确的标志,但现在我意识到我无法更改 CMake 测试程序 - 如果某个非典型符号集(替代入口点,不是主要的)不存在。
编辑2:我已经跳过了测试程序,但是现在它在尝试获取编译器信息时失败了(为什么要麻烦?我已经给它提供了它需要知道的所有情况......)并出现此错误:
为了清楚起见,它在上面一行显示的命令显然具有提供给有效值的 --cpu 标志:
虽然我完全不确定它试图用它的其余部分做什么 - 我似乎无法覆盖这部分。
c++ - ARMCC(C++)中(i.function name)部分的含义是什么?
构建完成后,我在映射文件中找到了 (i.function name) 部分。
==================================================== ====
前任)
[foo1.h] // 内联函数定义和声明
__forceinline UINT32 func1(VOID) { ... }
[foo2.cpp] // 使用的内联函数
#include "foo1.h"
UINT32 func2(VOID) { ... func1(); // 编译时非内联 }
[地图文件]
foo2.o(.text) 指的是 foo2.o(i.func1) 的 func1
==================================================== ====
映射文件中的典型部分如下所示:(.text)、(.ARM.exidx)、(.data)、(.constdata)、(.bss)、(USER Defined Section Name)、...
经过几次构建测试后,我猜 (i.function name) 部分出现在定义内联但编译器不应用内联的函数使目标文件中的 AREA 符号成为行外版本时。而这样的函数位于 (i.function name) 部分。如果所有内联函数都是内联的,则没有符号或(i.function name)部分。
为什么非内联应用的内联函数位于该部分?(不是.text?)
(i.function name) 部分的确切含义是什么?
我查阅了以下文档,但无法得到我想要的关于内容的答案。
- ARM 编译器用户指南、ARM 编译器参考指南、ARM Link 用户指南、ARMCC 用户指南、用于 ARM 架构的 ELF
c - 优化级别的宏 (ARMCC V6)
有预定义的宏,例如__OPTIMIZE__
(在所有优化编译中__OPTIMIZE_SIZE__
定义)和(如果编译器正在优化大小,则定义)。
我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果没有,我会打印出警告。
是否有可能检查是否-Ofast
设置了优化级别?可能类似于__OPTIMIZE_FAST__
or __OPTIMIZE_SPEED__
。
cmake - CMAKE:如何设置包含给定目标路径和文件名的编译器标志
我正在开发一个 CMAKE 构建系统,该系统在 Windows 中使用 Keil ARMCC 工具集交叉编译 ARM CortexM4
我将c编译器标志设置如下
但是,ARMCC 编译器具有需要输入目标路径和文件名的选项。例如,对于每个c源文件,除了输出目标文件外,我还需要通过添加编译器选项来输出源浏览器信息和源依赖,格式如下:
如何将上述选项添加到 CMAKE_C_FLAGS?
谢谢
arm - 使用二进制格式分配变量 - 0B 在 ARM Keil uVision 中导致错误
我正在使用 keil uvision 4.7 版使用 TM4C123GH6PM 微控制器进行项目。当我以二进制格式为变量赋值时,如下所示:
然后我构建项目,出现以下错误:
期望一个“;”
当我将格式更改为十六进制 - 使用 0X- 或十进制时,错误消失了。
Keil uVision 中的编译器不支持二进制格式吗?