【发布时间】:2021-12-07 05:30:04
【问题描述】:
我正在使用 ARM GCC 10.2.1 20201103 并且内存不足,因为我有一个函数数组(下面的简短示例)并且 GCC 将数组(或者可能是函数)放入 RAM 而不是 .text。
代码如下所示:
static int16_t* (*func_arr[])(int16_t) = {
func1,
func2,
func3,
func4,
};
我尝试过使用 attribute((section ("text")))、"static"、"const",但无论如何我都会收到此消息:
motor6.elf section `._user_heap_stack' will not fit in region `RAM'
对于我添加到数组中的每个函数,我都会额外耗尽 32 个字节左右的内存,这让我认为这些函数本身正在被放入 RAM,尽管我不确定。
有人有想法吗?
【问题讨论】:
-
so make it
const..the functions themselves不,函数 pointers 被放入 RAM。 -
static 影响该变量/数组(标签)的范围或可见性。它只能在该文件或该函数中使用,具体取决于它在文件中的位置,它不会使其成为常量,也不会将其移动到 .text 或 .rodata 中。如果您想将其从 .data 移动到 .text 或 .rodata 中,则无论是否带有静态的 const 都是您想要的。
标签: gcc linker arm function-pointers