如何将C语言函数指针数组设为常量并放入代码/Flash段?
解决方案
头文件(.h)的修改
保留函数指针类型定义,同时将数组声明为外部可见的只读数组,让其他源文件可以引用:
typedef uint8_t paraFunction(uint8_t paraVal, uint8_t paraNum); // 声明数组为外部只读类型,明确大小256 extern const paraFunction *paraCallTable[256];
源文件(.c)的修改
在源文件中定义并初始化这个只读数组:
#include "你的头文件名.h" // 定义只读数组并初始化函数指针列表 const paraFunction *paraCallTable[256] = { fn1, fn2, ..., fn255, fn256 };
关键说明
const关键字:这是核心,它告诉编译器该数组是只读常量,会被分配到只读数据段(通常与代码段/Flash合并存放),而非可读写的RAM数据段。extern的作用:头文件中的extern声明允许其他源文件通过包含头文件直接访问该数组。- 平台特定扩展(可选):如果是嵌入式平台(如ARM、AVR),部分编译器可能需要额外属性强制指定Flash段,比如GCC可添加
__attribute__((section(".rodata"))):
不过多数场景下,仅用const paraFunction *paraCallTable[256] __attribute__((section(".rodata"))) = { fn1, fn2, ... };const就足够让编译器自动将数组放入只读段。
内容的提问来源于stack exchange,提问作者Katoomba
相关产品推荐
相关产品推荐

