如何获取函数指针数组以停止将函数放入 ARM Cortex M0 和 GCC 上的 RAM

How to get array of function pointers to stop putting functions into RAM on ARM Cortex M0 and GCC

我正在使用 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,尽管我不确定。

有人有想法吗?

创建变量const让编译器将其放入只读内存。

static int16_t *(*const func_arr[])(int16_t) = {
    func1,
    func2,
    func3,
    func4,
};

我在列表中包含的每个函数都使用静态数据。因此,对于我添加到列表中的每个函数,该数量的静态数据都会添加到 RAM 部分。解决这个问题只是意味着列表中引用的函数需要将它们的数据声明为 const static,而不仅仅是 static。