查找 __attribute__(部分)中的最后一个变量

Finding the last variable in __attribute__(section)

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

因为我使用的板为 1 兆字节的块设置了内存属性,所以我将大小设置为 MEMORY_CACHEABLE 1MB。

真正锁定缓存中的代码时,我需要确定MEMORY_CACHEABLE内部代码的高地址,因为它不占用整个内存space,我不不想在缓存中锁定未使用的内存。

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

我知道没有标准方法可以在运行时确定 C 函数的大小,但是是否有更直接的方法来发现该特定内存部分中代码的高地址?

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

谢谢!

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

所以,只需添加:

MEMORY_CACHEABLE :
{
    BEGIN_MEMORY_CACHEABLE = .;
    *(MEMORY_CACHEABLE)
    END_MEMORY_CACHEABLE = .;
}

然后在C代码中:

extern char BEGIN_MEMORY_CACHEABLE, END_MEMORY_CACHEABLE;

并使用 &BEGIN_MEMORY_CACHEABLE 作为指向开头的指针,并使用 &END_MEMORY_CACHEABLE 作为指向可缓存内存的尾数的指针。