10 years, 6 months ago.

SDカードへの書き込み

初めまして、初めてご質問させていただきます。

スイッチを押すと、SDカードの時間を書き込みむプログラムを作成しています。 Cookbookの「SD Card File System」を参考にさせていただきました。

if(fp == NULL) { error("Could not open file for write\n"); }else{

 時間を取得 time_t seconds = time(NULL); char time[16]; strftime(time, 15, "%H:%M:%S", localtime(&seconds));

 書き込む処理 fprintf(fp, "%s,%d\r",time,avg_data);

fclose(fp);

}

普通に書き込む分には問題なく動作しています。 しかし、一度SDカードを抜き、再度挿入してから書き込むとエラーになってしまいます。 fprintf(fp, "%s,%d\r",time,avg_data); の部分でエラーで停止しているようです。

なぜ、このようなことが起こるのでしょうか? また、対処方法等がありましたら、ご教授お願い致します。

2 Answers

10 years, 6 months ago.

原因はわからないのですが、 sdオブジェクトをポインタで宣言し、読み書きが必要なときだけnewとdeleteをすればよいです。

sdオブジェクト ポインタ宣言(グローバル)

sdオブジェクトをnewする、file読み書き、sdオブジェクトをdeleteする(抜き差し禁止)

SDカード抜き差し

sdオブジェクトをnewする、file読み書き、sdオブジェクトをdeleteする(抜き差し禁止) ...

コード例

#include "mbed.h"
#include "SDFileSystem.h"

SDFileSystem *Sd;
 
int main() {
    printf("Hello World!\n");   
    mkdir("/sd/mydir", 0777);
    
    Sd = new SDFileSystem(p5, p6, p7, p8, "sd");     // new sd object *** unable to draw sd card ***

    FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
    if(fp == NULL) {
        error("Could not open file for write\n");
    }
    fprintf(fp, "Hello fun SD Card World!");
    fclose(fp); 
    delete Sd;                                       // delete object *** enable to draw sd card ***
    
    printf("Goodbye World!\n");

10 years, 6 months ago.

ご回答ありがとうございます. ご指南いただいた方法で,問題なく動作することが確認できました. 非常に助かりました,ありがとうございます.