Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
8 years, 2 months ago.
LPC1114FN28を用いたsdカードへの記録
こんにちは。
プログラムを起動してからの経過時間を、50ms毎に記録することを目的に以下のプログラムを組みました。 使用しているマイコンはLPC1114FN28,記録に使用しているのは16GBのsdカードです。 SDという関数を50ms毎に呼び出し、配列 TimeLogが TimeLog[0]~TimeLog[19]まで埋まると(1秒間の値を取得すると)sdカードに記録するようにしています。
6000msまでは記録するのですが、それ以降はプログラムが作動しません。
#include "mbed.h"
#include "SDFileSystem.h"
//SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
SDFileSystem sd(dp2,dp1,dp6,dp13,"sd");
Serial pc(dp16,dp15);
Timer Time ;
Ticker sd_write ;
DigitalOut myled1(LED1);
//Serial pc(dp16,dp15);
int count =0;//最初はTimeLog[0]から始まる
static unsigned long TimeLog[20];//20個の要素を「箱」を用意する
unsigned long nowTime = 0;
void SD(){//この関数を0.05秒ごとに呼び出して、その度に経過時間をTimeLog[]に代入する。
//つまり、50ms毎の時間が配列に保存される。
//1000ms経過するとそれらの値をまとめてsdカードに保存する。
__disable_irq();//この関数を最優先に割り込みする。
myled1 = 0 ;
if(count<19){
TimeLog[count]=nowTime;
count++;
}else{
TimeLog[19]=nowTime;
pc.printf("Hello World!\n");
mkdir("/sd/mydir", 0777);
FILE *fp = fopen("/sd/mydir/sdtest_kai.csv", "a");
if(fp == NULL) {
error("Could not open file for write\n");
}
fprintf(fp, "%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n",TimeLog[0],TimeLog[1],TimeLog[2],TimeLog[3],TimeLog[4],TimeLog[5],TimeLog[6],TimeLog[7],TimeLog[8],TimeLog[9],TimeLog[10],TimeLog[11],TimeLog[12],TimeLog[13],TimeLog[14],TimeLog[15],TimeLog[16],TimeLog[17],TimeLog[18],TimeLog[19]);
myled1 = 1 ;
fclose(fp);
free(fp);
pc.printf("Goodbye World!\n");
count=0;//カウントをリセットする
}//if end
__enable_irq();
}
int main(){
Time.start();
sd_write.attach(&SD,0.05);//0.05秒ごとにSDという関数を発動し、割り込みする。
while(1){
nowTime = Time.read_ms();
}
}
これをLPC1768に移植すると問題なく動くので、内臓しているROM容量の違いかと考えたのですが、 TimeLog配列に割り当てられるメモリーが4バイト×20=80バイトなので、メモリーの問題ではないと考えています。
途中で配列のメモリの開放することも試してみたのですが、作動はしても記録される値がデタラメになり上手くいきません。
(上手く記録できた場合、50ms毎AnalogInに入力された電圧を記録し、Excelでグラフとして表したいと考えています。)
どの様にして良いか分からず、この度質問させて頂きました。
よろしくお願いします。