首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在keil中使用GNU原子内存访问函数

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

Stack Overflow用户
提问于 2019-04-15 21:04:24
回答 1查看 145关注 0票数 0

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

代码语言:javascript
复制
Error: L6218E: Undefined symbol __sync_fetch_and_add_4 (referred from XXXX.o).

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

EN

回答 1

Stack Overflow用户

发布于 2019-04-15 21:08:32

我不是专家,但链接似乎是关于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的引用。

所以看起来凯尔在追踪一个相当老的版本的GCC?另一方面,我确实在列表中看到了__sync_fetch_and_add(),我猜如果在32位数量上使用,它会“神奇地”生成对__sync_fetch_and_add_4()的调用。真奇怪。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55689820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档