gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:19:07 25 4
gpt4 key购买 nike

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

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

我发现Keil's documents中有一些关于GNU原子内存访问函数的描述,所以我猜keil可能支持这些功能,但我不知道如何使用它们。我应该在keil中包含一些头文件或添加一些配置吗?

最佳答案

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

实现这些功能并不难;如果一切都失败了,我会查看 GCC 的编译器输出,然后重新实现它。

或者阅读 LDREX/STREX说明和内存障碍的说明,玩得开心! :)

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

Prior to GCC 4.7 the older __sync intrinsics were used. An example of an undefined symbol from the use of __sync_fetch_and_add on an unsupported host is a missing reference to __sync_fetch_and_add_4.

看来 Keil 正在跟踪 GCC 的一个相当旧的版本?另一方面,我确实看到__sync_fetch_and_add()在列表中,我猜想“神奇地”会生成对 __sync_fetch_and_add_4() 的调用如果用于 32 位数量。奇怪。

关于c - 如何在keil中使用GNU原子内存访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com