查找 __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
作为指向可缓存内存的尾数的指针。
我目前正在开发嵌入式系统,为了满足时间限制,我需要将一些代码锁定在缓存中。我已经使用部分变量属性将需要锁定缓存的所有函数放入部分 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
作为指向可缓存内存的尾数的指针。