You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:27:36