C++ 如何在Mbed中有效写入sd卡?

C++ 如何在Mbed中有效写入sd卡?,c++,mbed,nucleo,C++,Mbed,Nucleo,我一直试图用sd卡将数据记录到我的NucleoF746ZG上。这是我的代码: #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

我一直试图用sd卡将数据记录到我的NucleoF746ZG上。这是我的代码:

#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卡以重新开始,然后始终关闭代码中的文件


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

尝试格式化SD卡。您没有关闭该文件。你想打电话给fclosefp。