在__attribute __(section)中查找最后一个变量

时间:2015-04-27 17:00:44

标签: c linker cross-compiling gnu xilinx

我目前正在使用嵌入式系统,为了满足时间限制,我需要锁定缓存中的一些代码。我已经使用section变量属性将所有需要锁定缓存的函数放入MEMORY_CACHEABLE部分。

因为我使用的电路板设置1兆字节块的内存属性,所以我已经制作了1块大小的MEMORY_CACHEABLE。

当涉及到实际锁定缓存中的代码时,我需要确定MEMORY_CACHEABLE内部代码的高地址,因为它不占用整个内存空间而我不想锁定未使用的内存高速缓存中。

我这样做的方法是在MEMORY_CACHEABLE中使用占位符,该占位符在我的C代码中定义,放在MEMORY_CACHEABLE中的所有其他函数之后。每次我调试时,我都确认占位符的地址高于其他功能。我一直在使用这个值作为高地址,但它似乎有点hacky。

我知道在运行时没有标准的方法来确定C函数的大小,但有没有一种更简单的方法来发现这个特定内存部分中代码的高地址?

另外,我使用arm-xilinx-eabi-gcc进行交叉编译。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用链接描述文件。也许您已经使用一个来指定内存部分属性。

所以,只需添加:

extern char BEGIN_MEMORY_CACHEABLE, END_MEMORY_CACHEABLE;

然后在C代码中:

&BEGIN_MEMORY_CACHEABLE

并使用&END_MEMORY_CACHEABLE作为指向开头的指针,并使用get()指向可缓存内存的一个结尾的指针。