金牌会员
- 积分
- 1042
- 威望
- 467
- 贡献
- 421
- 兑换币
- 203
- 注册时间
- 2012-3-7
- 在线时间
- 77 小时
|
我用龙丘的K60调SD卡,采用FAT32文件系统,只是大致看了一下文件系统的函数,然后编写了SD卡存储程序,可能程序思路上有问题。(问题是SD卡中有数据存储,但是是乱码,乱码是一些符号的ASCLL码,不知道是不是堆栈乱了)希望前辈指教。
程序说明,因为文件系统设置了一个扇区只能存512KB,我采集的一场图像大小为170X90=15300KB,故我利用函数将这一图像分15300/512=29块存储,每一场都是如此。
首先,在系统初始化后,对SD也进行了初始化(ROW*COLUMN是图像的行与列数,已经宏定义了)
res = f_mount(0,&fs); // for logical drive 0
for(i=0;i<ROW*COLUMN;i++) //要写入的数据,用户可以把数据放到该数组,然后写入SD卡即可。
{
filebuff = '2'; //更新缓冲区的数据内容 随便给一个值
}
filebuff[ROW*COLUMN-3] = ' '; //空格
filebuff[ROW*COLUMN-2] = 0x0d; //回车 ASCII 代码13即 \r(回车,即将当前位置移到本行开头)
filebuff[ROW*COLUMN-1] = 0x0a; //最后一个字符为换行 ASCII 代码10即 \n(换行)
res = f_open(&faddata,"ccd_data.txt",FA_CREATE_ALWAYS | FA_WRITE); //打开SD卡文件,如果没有找到,则创建一个文件
然后,进入主循环后,等待中断,因为我是隔场采得,所以数据也是隔场存储 的
每一场存储程序如下
res = f_mount(0,&fs); // for logical drive 0
for(n=0; n<ROW; n++) //更新缓存区,将im_data[][]存储到filebuff[]
{
for (m=0; m<COLUMN; m++)
{
filebuff[j]=im_data[n][m];
j++;
}
}
filebuff[ROW*COLUMN-3] = ' '; //空格
filebuff[ROW*COLUMN-2] = 0x0d; //回车
filebuff[ROW*COLUMN-1] = 0x0a; //最后一个字符为换行
j=0; //i计数清零
res = f_open(&faddata,"ccd_data.txt",FA_OPEN_ALWAYS | FA_WRITE);//打开SD卡文件,如果没有找到,则创建一个文件
/*************************保存数据到SD卡**********************************************/
if(!res) // 打开文件成功
{
//写入数据
for(i=0;i<(ROW*COLUMN)/512+1;i++)
{
//这两句是不是指针有问题 ?
res = f_lseek(&faddata,f_size(&faddata)); //写指针移到文件末尾
res = f_write(&faddata,&filebuff[i*512-1],filebuffoffset, &bw); //将文件缓冲区里的数据写入l
}
LCD_P8x16Str(0,4,(unsigned char*)"writing OK! "); //英文字符串显示
res = f_close(&faddata); //关闭lccd_data.txt
LCD_P8x16Str(0,4,(unsigned char*)" file colesed "); //英文字符串显示
light_change(Light_Run_PORT,Light_Run2);//指示灯的亮、暗状态切换
}
这样,结果SD卡中有数据存储,但是是乱码,是一些符号的ASCLL码,郁闷了,调了好些天憋这了,估计不是什么大问题,求高人点拨,指出我程序中的问题。谢谢,感激不尽
|
|