- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 IAR EWARM 8.10.1,它使用 ILINK 链接器。
我有两个编译单元使用的公共(public) header 。它包括具有外部链接的功能原型(prototype),并构成一个API。根据构建的配置方式,我希望模块 A 或 B 与我的应用程序的其余部分链接。
[ Common_Header.h ]
| |
| +----- [Module_A.c] ---> [Module_A.o]
|
+--------------- [Module_B.c] ---> [Module_B.o]
我想以某种方式将参数传递给 ilinkarm.exe 以包含 Module_A.o。
我过去使用的其他 IAR 工具链使用 XLINK 链接器。 XLINK 有一个 -A 选项,我想这与我需要的类似。
我本质上想要的是当 Module_A 处于事件状态时,将 Module_B 中的函数定义视为__weak
,反之亦然。
如果可能的话,我想避免在我的代码中加入#pragma weak
。我需要能够使用几个不同的工具链来编译这段代码。所以我需要用 #ifdef __ICCARM__
之类的东西包装任何这样的 pramgas。此外,我需要定义一些额外的预处理器符号,以有条件地使一个模块在另一个模块处于事件状态时变弱。这些都是我希望避免出现在代码中的复杂性。
此外,我不想在 module_A 处于事件状态时从构建中排除 module_B。我希望两个模块都能编译。如果有人对接口(interface)和 module_A 进行了更改,但未能更新 module_B,我希望他们得到一个编译器错误。这将防止 module_B 随着接口(interface)的发展而进入某些孤立和损坏的状态,并且我们的注意力集中在 module_A 上。
我查看了 EWARM_DevelopmentGuide.ENU.pdf,但找不到似乎可以满足我要求的命令行选项。我想知道是否存在这样的选项但我错过了它,或者是否有另一种方法可以实现我所追求的目标。
最佳答案
这并不是一个完整的答案,因为我没有像您那样的新版本的编译器,而是更多可能的解决方法。
Module_A.c
#if MODULE_A_SELECTED
#define MY_WEAK
#else
#define MY_WEAK __weak
#endif
MY_WEAK void foo(void) { ... }
...
Module_B.c
#if MODULE_B_SELECTED
#define MY_WEAK
#else
#define MY_WEAK __weak
#endif
MY_WEAK void foo(void) { ... }
...
然后您可以根据需要在配置中定义 MODULE_*_SELECTED
。
关于IAR EWARM 中的条件链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54990942/
我最近购买了适用于 ARM (EWARM) 的 IAR Workbench IDE。我的许可证不包括进行内存泄漏检查的 C-RUN。是否可以使用像 Valgrind 这样的第三方工具来执行内存泄漏分析
我正在使用 IAR EWARM 8.10.1,它使用 ILINK 链接器。 我有两个编译单元使用的公共(public) header 。它包括具有外部链接的功能原型(prototype),并构成一个A
我正在尝试使用 IAR EWARM 编译以下 C 代码,但出现三个编译错误(错误 [Pe028]:表达式必须具有常量值)。见下文: #include #include #include typedef
我在硬故障处理程序中进行了一些组装。该程序集基本上意味着将当前堆栈指针作为参数传递(在 R0 中)。看起来是这样的... __asm(" mov r0, sp\n" " bl
我有一个用于记录的宏,它接受可变数量的参数。该宏将由 GCC 在非嵌入式上下文中处理,并扩展为有效的 C 代码。尽管如此,无论我在哪里调用宏(数千个位置),IAR EWARM 都会给出错误“[Pe05
我为 Kinetis K24 Cortex M4 编写了一个引导加载程序。引导加载程序在运行时通过 USB 将附加功能加载到 RAM 中。该 ramcode 作为其自己的 EWARM 项目存在,生成二
首先我想 self 介绍一下,因为我是这个网站的新手。我是一名电子工程师,专门从事嵌入式系统设计和开发。我已经从该站点收集了很长时间的信息,而且我认为有很多知识渊博的人。我希望你们中的其他人可能偶然发
我正在使用 IAR EWARM 7.4 我已按照此处的说明进行操作:http://www.safetycritical.info/library/static/pc-lint/ewb-pclint-v
我遇到了这个超出我知识范围的错误: Error[Pe147]: declaration is incompatible with "__interwork __softfp char *Get_Lan
我是一名优秀的程序员,十分优秀!