raspberry Pi Pico,将字符数组写入SD卡上的文件

问题描述 投票:0回答:1

我在 Windows 10 电脑上使用 pico C++ SDK 和 VS Code。我只是想写入 SD 卡上的文件。使用的库是:FatFs - 通用 FAT 文件系统模块 R0.15 w/patch1。

下面函数中显示的代码运行没有错误,文件已创建,但没有数据写入文件。使用 FA_OPEN_APPEND 标志是因为目标是用新的数据行不断更新文件(如日志文件)。传递到函数中的数据是 struct (params) 类型。 params 结构被验证是正确的,因为在代码中我打印了 char msg_buf,它使用 sprintf 来加载它。我尝试了三个文件写入函数,结果相同:f_printf、f_puts 和 f_write。也许 msg_buf 的编码不正确?如有任何帮助,我们将不胜感激。

bool write_params(struct event_params params) {
    // Open file for append
    fr = f_open(&fil, filename, FA_OPEN_APPEND);
    if (fr != FR_OK) {
        printf("failed to open file for append");
        return false;
    }    
    
    char msg_buf[40];
    sprintf(msg_buf,"%s,%s,%.1f,%.1f,%.1f\n",params.a,params.b,params.c,params.d,params.e);
    
    // print msg_buf to verify is loaded correctly, e.g. [test,2024:01:01:00:00,30.5,62.1,60.0]
    printf("before write - msg_buf: %s\n", msg_buf);

    // tried using f_printf but no data written
    //f_printf(&fil, msg_buf); // <-- not writing to file
    
    // Tried using f_puts but i returnes -1 (no data written)
    //uint i = f_puts(msg_buf,&fil);

    uint i;
    printf("sizeof(msg_buf):%d\n",sizeof(msg_buf)); // <-- outputs 40
    f_write(&fil,msg_buf,sizeof(msg_buf),&i);
    printf("after write - characters written: %d\n", i); // <-- i returns 0
    
    // Close file
    if(!close_file()) return false;

    return true;
}

我尝试过 f_printf、f_puts 和 f_write 函数。

gcc fwrite raspberry-pi-pico
1个回答
1
投票

已解决:只需要在f_open()函数中添加FA_WRITE即可:

fr = f_open(&fil, 文件名, FA_OPEN_APPEND | FA_WRITE);

© www.soinside.com 2019 - 2024. All rights reserved.