gpt4 book ai didi

c - 如何在 C99 中指定函数/变量的内存位置(快/慢)?

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:58 25 4
gpt4 key购买 nike

在许多嵌入式架构中,可以将代码运行或将数据存储到内部 RAM(快速访问)或外部 SDRAM(慢速访问)中。

在像 SHARC 处理器这样的架构上,可以定义函数链接到的内存区域。

segment("seg_ext_dm32") void foo( void ); // External memory 32-bit location

不幸的是,说明符 segment("seg_ext_dm32") 并不是真正的 ANSI,我不能在我的通用库中忽略它,因为它可以在不同的架构(例如 x86)上进行单元测试。

所以我正在寻找一种更通用的解决方案来对我的函数/变量进行分类,以将其存储在慢速或快速内存段中。这是一个例子:

___slow void fft_configure( int parameter );
___fast void fft_tick();

最常见的方法是什么?

当然,一种简单的方法是将通用头文件添加到我的特定编译器以定义 __slow 或 __fast 是什么:

在我的主文件中:

#ifndef __slow
#define __slow /* nothing */
#endif
#ifndef __fast
#define __fast /* nothing */
#endif

在我的编译器中:

cc -D__slow=segment("seg_ext_dm32") -D__fast=segment("seg_dm32")

但我认为这不是最佳解决方案。

最佳答案

有很多方法可以给这只猫剥皮,有些方法比其他方法更便携。

可能最可移植的方法是将您的函数隔离到“快”或“慢”的单独源文件中(或者通过为每个文件放置一个函数组来获得更精细的粒度),然后拥有链接器描述 rune 件处理将片段粘贴到你想要的地方。这会将所有非标准内容排除在源文件之外并将其放在一个位置。

链接描述 rune 件必须由使用该库的人管理,但无论如何他们都必须这样做以将任何段正确定位到“快”和“慢”内存中。使用这种方法,他们只需在他们在正确位置定义的加载段中指定正确的 .o 文件,而不是依赖编译器发出您选择的包罗万象的名称。

关于c - 如何在 C99 中指定函数/变量的内存位置(快/慢)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768366/

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