我应该如何在Mbed中有效地写入SD卡?

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

我一直在尝试使用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卡,还是我的代码出了点问题?

干杯,

Ali

c++ mbed nucleo
1个回答
0
投票

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

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

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