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

如何在Raspberry Pico上读取FLASH内容及烧录并读取附加数据

Raspberry PICO 烧录附加数据并读取的极简方案

答案是肯定的,完全不需要用LittleFS这类文件系统,直接把附加数据打包进你的UF2镜像就行,用PICO C++ SDK就能实现,全程只需要烧录一个文件,应用直接从内存读取数据,简单高效。

具体操作步骤

1. 准备你的附加数据文件

把需要读取的内容(比如配置文本、二进制资源)存成文件,比如my_data.txt,放在你的项目根目录里。

2. 修改CMakeLists.txt,嵌入数据

在项目的CMake配置文件里加一段代码,把数据文件转换成可链接的目标文件,和你的应用代码一起编译:

# 指定要嵌入的数据文件路径
set(MY_DATA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/my_data.txt)

# 用objcopy把二进制文件转成ARM目标文件
add_custom_command(
    OUTPUT data_embed.o
    COMMAND arm-none-eabi-objcopy -I binary -O elf32-littlearm -B arm ${MY_DATA_FILE} data_embed.o
    DEPENDS ${MY_DATA_FILE}
)

# 把生成的目标文件添加到你的项目可执行文件中
target_sources(你的项目名称 PRIVATE data_embed.o)

3. 在C++代码里读取数据

通过外部符号直接引用嵌入的数据,不需要任何文件操作:

// 声明嵌入数据的外部符号(C语言链接规则,避免C++ name mangling)
extern "C" {
    extern const unsigned char _binary_my_data_txt_start[];
    extern const unsigned char _binary_my_data_txt_end[];
    extern const unsigned int _binary_my_data_txt_size;
}

void process_extra_data() {
    // 获取数据的起始指针和大小
    const uint8_t* data_start = _binary_my_data_txt_start;
    size_t data_length = _binary_my_data_txt_size;

    // 示例:打印数据内容
    printf("附加数据内容:\n");
    for (size_t i = 0; i < data_length; i++) {
        putchar(data_start[i]);
    }
    printf("\n数据大小:%zu 字节\n", data_length);
}

符号命名规则:_binary_<文件名>_<后缀>_start/end/size,如果文件名里有横杠或点,会被替换成下划线,比如sensor_config.bin对应的符号是_binary_sensor_config_bin_start。

4. 编译烧录

正常编译项目,生成的UF2文件已经包含了你的应用和附加数据,直接烧录到PICO就行,和原来烧单一应用的流程完全一样。

这个方案的优势

  • 零额外依赖:不需要在PICO上搭建文件系统,省Flash省内存
  • 读取速度快:数据直接在程序内存空间,没有文件IO的开销
  • 流程简单:只需要烧录一个UF2文件,不用额外操作多个文件

内容的提问来源于stack exchange,提问作者Shripathi Kamath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:14