如何在keil中使用GNU原子内存访问函数

问题描述 投票:0回答:1

我想使用像__sync_fetch_and_add这样的GCC内置函数,但我用Keil编译我的代码,如果我在我的代码中使用这些函数,它将显示错误如下:

Error: L6218E: Undefined symbol __sync_fetch_and_add_4 (referred from XXXX.o).

我发现在GNU atomic memory access functions中有一些Keil's documents的描述,所以我想keil可能支持这些功能,但我不知道如何使用它们。我应该包含一些头文件还是在keil中添加一些配置?

c keil
1个回答
0
投票

我不是专家,但链接似乎是关于ARM DS-5,它是一个单独的编译器,即与Keil的MDK不同。所以文档不适用。

实现这些功能并不是很难;如果所有其他方法都失败了,我会查看GCC的编译器输出,然后重新实现它。

或者阅读有关LDREX / STREX指令和内存障碍的说明,并享受乐趣! :)

更新:我认为__sync_fetch_and_add_4()是新的,但Keil只支持GCC较旧的内置插件套件。请注意,__sync_fetch_and_add_4没有出现在他们支持的功能列表中。 This GCC manual page说:

在GCC 4.7之前,使用了较旧的__sync内在函数。在不受支持的主机上使用__sync_fetch_and_add的未定义符号的示例是缺少对__sync_fetch_and_add_4的引用。

所以Keil似乎正在追踪一个相当古老的GCC版本?另一方面,我确实在列表中看到了__sync_fetch_and_add(),如果在32位数量上使用,我猜想“神奇地”会产生对__sync_fetch_and_add_4()的调用。奇怪的。

© www.soinside.com 2019 - 2024. All rights reserved.