我目前正在开发嵌入式系统,为了满足时间限制,我需要将一些代码锁定在缓存中。我已使用部分变量属性将需要锁定缓存的所有函数放入 MEMORY_CACHEABLE 部分。
因为我正在使用的板为 1 兆字节的 block 设置了内存属性,所以我将 MEMORY_CACHEABLE 的大小设置为 1MB。
真正将代码锁定在缓存中时,我需要确定MEMORY_CACHEABLE 内部代码的高地址,因为它不会占用整个内存空间,我不想将未使用的内存锁定在缓存中。
我这样做的方法是在 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
作为指向可缓存内存的尾数的指针。
关于c - 查找 __attribute__(section) 中的最后一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29901788/