【问题标题】:how should i write to sd card effectively in Mbed?我应该如何在 Mbed 中有效地写入 sd 卡?
【发布时间】:2019-09-27 15:40:52
【问题描述】:

我一直在尝试使用 SD 卡将数据记录到我的 NUCLEO F746ZG。这是我的代码:

#include "mbed.h"
#include "SDFileSystem.h"
//#include "Hx711.h"
#include <string>
//#include "ep29.h"
//#include "wsdef.h"
//#include "image.h"
//#include <vector>

PinName mosi = PE_6;
PinName miso = PE_5;
PinName sclk = PE_2;
PinName cs = PE_4;
PinName cd = PE_3;

SDFileSystem sd(mosi, miso, sclk, cs, "sd"); // the pinout on the mbed Cool Components workshop board
Serial pc(SERIAL_TX, SERIAL_RX);

int main(void) {
        pc.baud(9600);
        pc.printf("starting\r\n");
        FILE *fp = fopen("/sd/sdtest.txt", "w");
        if(fp == NULL) {
            pc.printf("Could not open file for write\n");
        }
        fprintf(fp,"starting to read from strain gauge:128G, 32G \r\n");
        fprintf(fp,"\r\n");
        pc.printf("worked!\r\n");
}

它之前工作过一次或两次,但只有在我之前上传代码时有SD卡时才会工作,并且当我按下重置按钮时不会重写到SD卡。但是,它似乎不再起作用了。

可能是我刚刚损坏了 sd 卡,还是我的代码有问题?

干杯,

阿里

【问题讨论】:

  • 尝试格式化您的 SD 卡。您没有关闭文件。你想调用 fclose(fp)。

标签: c++ mbed nucleo


【解决方案1】:

健太郎在评论中给出了正确答案。格式化您的 SD 卡以重新开始,然后始终关闭代码中的文件。

背景:文件操作通常是缓冲的。因此,即使您编写代码,这些字节也只会存在于 RAM 中,直到达到某个阈值,或者通常它们会保留在 RAM 中,直到您关闭它。然后它一口气完成实际的文件写入。这样可以节省代码运行的时间。另外,close 可能会对 SD 卡 FAT 表进行一些清理

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2011-07-30
    • 1970-01-01
    相关资源
    最近更新 更多