问题标签 [realview]
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.
debugging - 使用 RealView Debug (RVDebug) 进行调试
我有一些用于 ARM926 目标的 C 代码。我正在尝试使用“Arm Xtended Debugger”(AXD)对其进行调试。这段代码采用main()
了 14 个命令行参数,这些参数在代码战士项目设置中的正确位置和代码的行为符合预期。
但是当我尝试使用相同的 AXF(Arm eXecutable Format 文件)文件并尝试通过更改 Codewarrior 项目的设置使用 RVDEBUG 进行源代码级调试并开始调试时,argc 值为 1。然后的行为代码是意外的。
当我在代码战士设置中选择 RVDEBUG 时,我给出的选项与我在 AXD 调试会话期间使用的选项相同。
所以我的问题是:
我在调试会话(AXD 和 RVDEBUG)中使用相同的 AXD,为什么它们的行为不同?它们的行为应该相同。
c++ - 如何在 C++ 宏中包含换行符或如何使用 C++ 模板来做同样的事情?
我看到了以下问题: 如何在 cpp 宏中生成换行符?
让我简要介绍一下 C++ 预处理器中的换行需求。我正在研究 ARM Realview 编译器 3.1 的代码,该代码使用嵌入式汇编代码和 C++ 代码。
上面的宏声明了一个嵌入的汇编函数,它强制要求函数体中的每个语句之间有换行符。
我认为这是因为函数体中的文本是由 ARM 编译器盲目发送给 ARM 汇编器的。
为什么 C++ 预处理器现在仍然不支持多行替换?而且我不能在替换字符串中使用#。例如,对于这种组装,
我尝试了很多方法和方法,但都没有真正奏效。ARM 汇编器/编译器非常基础,以至于 GCC 中没有像 asm volatile 这样的 API。
DEFINE_FUNCTION 宏在很多地方都有使用,所以也不能忽略它。
因此,在最后考虑以下解决方案:
- 使用 m4 预处理器代替 C++ 预处理器
- 使用 C++ 模板以某种方式实现这一点并使用 grep/sed 替换 DEFINE_FUNCTION
任何人都可以给我指点或方法来做上述事情吗?我不能使用 ARM Realview 编译器 3.1 以外的任何编译器。
我需要一些像下面这样的扩展,带有新行 DEFINE_FUNCTION(void*, mov_lt, #0x04) {}
,,
c++ - 使用编译指示或代码更改覆盖枚举基类型
问题:
我正在使用一个大型 C/C++ 代码库,它适用于 gcc 和 Visual Studio 编译器,其中枚举基本类型默认为 32 位(整数类型)。
这段代码还有很多内联+嵌入式程序集,将枚举视为整数类型,枚举数据在许多情况下用作 32 位标志。
当使用 realview ARM RVCT 2.2 编译器编译此代码时,我们开始遇到许多问题,因为 realview 编译器会根据枚举设置的值自动确定枚举基本类型。http://www.keil.com/support/man/docs/armccref/armccref_Babjddhe.htm
例如,
考虑下面的枚举,
此枚举用作 32 位标志。但编译器将此枚举优化为 unsigned char 类型。
使用 --enum_is_int 编译器选项对我们的情况来说不是一个好的解决方案,因为它将所有枚举转换为 32 位,这将破坏与没有 --enum_is_int 编译的任何外部代码的交互。
这是我在 RVCT 编译器和库指南中找到的警告,
不建议将 --enum_is_int 选项用于一般用途,对于 ISO 兼容源也不需要。使用此选项编译的代码不符合 ARM 体系结构的 ABI(基本标准)[BSABI],错误使用可能会导致运行时失败。C++ 库不支持此选项。
问题
如何将所有枚举的基本类型(通过手动编码更改)转换为使用 32 位而不影响值排序?
我尝试了上述更改。但是编译器也为我们的坏运气优化了这一点。:(
.NET 中有一些语法,例如
枚举比例:int
这是一个 ISO C++ 标准而 ARM 编译器缺少它吗?
在 ARM RVCT 2.2 编译器中没有 #pragma 来控制此枚举。是否有任何隐藏的编译指示可用?
axd - 如何从 AXD 迁移到 realview
我总是用AXD调试我们的arm项目,用的是AT91 RM9200板,但现在我想试试realview调试器,它似乎更强大。有一个 AXD 的配置脚本可以重新映射内存,但是我在 realview 调试器中找不到如何使用它,所以它在加载图像时抱怨 0x20000000 无法写入。有这两个调试器经验的人能给我一些建议吗,非常感谢!
c++ - 使用 rvct 编译时未调用全局静态成员的构造函数
嗯,这解释起来有点复杂。我正在编译一个静态库,它的头文件看起来类似于:
在 Cpp 我有 fooMember 的初始化:
当将静态库链接到我正在编写的应用程序时,应该调用的 Goo 方法没有被调用。确切地说,根本没有调用 DoSomethingExciting() 方法。我确实在应用程序中使用了 Foo 类。当我把线:
在我的应用程序的 cpp 中(当然我从静态库中删除了同一行),我看到 Goo() 被调用。
我不确定如何命名我遇到的问题,我猜这是全局静态成员初始化或类似问题的问题。
我正在使用 RVCT 进行编译。在 Visual Studio 中编译相同的场景时,一切正常。我猜 RVCT 的行为不同,我可能需要添加一些编译标志。
顺便说一句,我也尝试在我编译的可执行文件上使用反编译器,但我没有看到对 Goo() 的任何调用,尽管我确实看到该方法在文件中。
我希望我对我的问题足够清楚:)
提前致谢...
embedded - 为什么我的代码在使用 Realview 工具构建时表现不佳,但在 Codesourcery 中表现更好?
我有一个 C 项目,之前是使用 Codesourcery 的 gnu 工具链构建的。最近它被转换为使用 Realview 的 armcc 编译器,但与使用 gnu 工具编译相比,我们使用 Realview 工具获得的性能非常差。不应该是相反的情况,即使用 Realview 的工具编译时它应该提供更好的性能吗?我在这里想念什么。如何使用 Realview 的工具提高性能?
我还注意到,如果我使用劳特巴赫运行 Realview Tools 生成的二进制文件,它会崩溃,但如果我使用 Realview ICE 运行它,它运行良好。
更新 1
Realview 命令行:
armcc -c --diag_style=ide --depend_format=unix_escaped --no_depend_system_headers --no_unaligned_access --c99 --arm_only --debug --gnu --cpu=ARM1136J-S --fpu=SoftVFP --apcs=/nointerwork - O3-Otime
GNU GCC 命令行:
arm-none-eabi-gcc -mcpu=arm1136jf-s -mlittle-endian -msoft-float -O3 -Wall
我正在使用 Realview Tools 4.1 版和 GCC 4.4.1 版
更新 2
劳特巴赫问题已解决。这是由于半主机导致的,因为在劳特巴赫环境中未处理半主机 SWI。重新定位 C 库以避免 Semihosting 成功了,现在我的程序可以在 Lauterbach 和 Realview ICE 上成功运行。但是性能问题就是这样。
c - 强制编译器不链接到某些目标文件
我目前正在研究强制 rvct 编译器不链接特定翻译单元并假装它已链接它的可能性。
我们的产品在空间限制下运行非常紧张,并且在将一些单元测试与其集成时遇到了麻烦,同时又要控制空间。
基本上,我们在运行时可以利用的内存足以存储我们的单元测试,但是我们没有足够的 ROM 空间来保存它们。
我们有办法在分散文件中准确控制代码的哪一段内存进入我们的设备,因此我们正在考虑定义单元测试代码将位于哪个区域并以某种方式强制编译器不链接在编译期间的特定代码中。
类似于以下内容:
hasTestInMemory
然后在运行时,我们将单元测试二进制文件上传到我们在分散文件中定义的指定内存区域,并将true
.
这可能吗?
或者,如果没有,有人可以指出我寻找解决方案的正确方向,该解决方案以某种方式满足我们的空间限制并能够在运行时加载单元测试。
谢谢,
linux - unistd.h implementation
My toolchain (Realview) does not have implementation of unistd.h
, I have a code that I need to use that is using unistd.h
, some function like access
, open
.
So I need to implement this functions by myself.
My question is, is there another alternative or some reference (except the function description, found here) that I can use in order to port/implement these functions?
What is the correct way to do that? It's my first time posting.
c++ - 从文字字符串生成编译时常量整数
我对在 ARM RealView 编译器上按预期工作的不可移植代码有疑问,但 VC++、GCC 拒绝编译它并且 QAC++(一种静态分析工具)发出警告。
问题
我有一个系统需要解析消息中的助记符标识符。助记符都是三个字符的 8 位 ASCII 字符串。为了简化和优化解析而不是对助记字符串执行字符串比较,我将字符串打包成一个 32 位整数并执行整数比较。
此外,为了能够使用 switch/case 而不是 if-elseif 链,我有一个宏,它采用文字字符串并生成关联的整数,在 ARM RealView 中是编译时间常数,但在 GCC x86/ 中没有Linux 或 VC++/Windows:
然后将其用于 ARM 目标代码,如下所示:
case 标签当然必须是编译时常量,但显然并非所有编译器都是如此。该代码是不可移植的,我猜是未定义的或实现定义的行为,或者完全错误!
问题
显而易见的可移植解决方案存在效率和可维护性的缺点,所以我有两个问题:
为什么这段代码不可移植 - 是什么让宏在某些编译器中不是编译时常量?
是否有可移植的解决方案从助记符字符串生成所需的编译时间常数?
linker - ARM Scatter 文件中的符号
就像我们可以在 c 源代码中使用 ARM Scatter 文件使用加载、执行区域符号一样。是否可以在 Scatter 文件中定义自己的符号并在 c 源代码中使用它?