智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3430|回复: 8
打印 上一主题 下一主题

[咨询] 用SD卡存储摄像头采集的数据,结果老是错误,求解高手

[复制链接]

6

主题

29

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1042
威望
467
贡献
421
兑换币
203
注册时间
2012-3-7
在线时间
77 小时
跳转到指定楼层
1#
发表于 2013-3-26 16:31:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用龙丘的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码,郁闷了,调了好些天憋这了,估计不是什么大问题,求高人点拨,指出我程序中的问题。谢谢,感激不尽

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
2#
发表于 2013-3-26 18:36:35 | 只看该作者
你分成29份,那就要写29次,你知道写一次要用多少时间吗?
回复 支持 反对

使用道具 举报

1

主题

2067

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5124

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
2752
贡献
898
兑换币
59
注册时间
2012-12-8
在线时间
737 小时
3#
发表于 2013-3-26 18:44:20 | 只看该作者
学习下,这个有难度
回复 支持 反对

使用道具 举报

6

主题

29

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1042
威望
467
贡献
421
兑换币
203
注册时间
2012-3-7
在线时间
77 小时
4#
 楼主| 发表于 2013-3-26 19:28:59 | 只看该作者
灰原姐姐 发表于 2013-3-26 18:36
你分成29份,那就要写29次,你知道写一次要用多少时间吗?

读写速度25M/s,这样算来,写一块写一场需要0.6ms左右,影响不大吧
回复 支持 反对

使用道具 举报

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
5#
发表于 2013-3-26 21:02:06 | 只看该作者
斯馨妍子 发表于 2013-3-26 19:28
读写速度25M/s,这样算来,写一块写一场需要0.6ms左右,影响不大吧

如果你每场都要写,那就只能用场消隐区的时间来写。
那就只有两三毫秒,那就不够了。
回复 支持 反对

使用道具 举报

6

主题

29

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1042
威望
467
贡献
421
兑换币
203
注册时间
2012-3-7
在线时间
77 小时
6#
 楼主| 发表于 2013-3-26 22:10:11 | 只看该作者
灰原姐姐 发表于 2013-3-26 21:02
如果你每场都要写,那就只能用场消隐区的时间来写。
那就只有两三毫秒,那就不够了。

不是的,我已经说明我采取隔场采,每场周期20ms,隔一场就是有20ms间隔,存储和其他操作时间完全足够,请问你调过吗,有何高见
回复 支持 反对

使用道具 举报

36

主题

1837

帖子

3

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6375
威望
3368
贡献
1847
兑换币
2326
注册时间
2013-2-3
在线时间
580 小时
7#
发表于 2013-3-27 11:34:49 | 只看该作者
斯馨妍子 发表于 2013-3-26 22:10
不是的,我已经说明我采取隔场采,每场周期20ms,隔一场就是有20ms间隔,存储和其他操作时间完全足够,请 ...

存的应该就是你要存的数据。
你存的是什么类型的,你要相应地按照什么类型的格式读取。
你如果全部按照字符来读取,自然是乱码。
回复 支持 反对

使用道具 举报

6

主题

29

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1042
威望
467
贡献
421
兑换币
203
注册时间
2012-3-7
在线时间
77 小时
8#
 楼主| 发表于 2013-3-27 18:56:35 | 只看该作者
灰原姐姐 发表于 2013-3-27 11:34
存的应该就是你要存的数据。
你存的是什么类型的,你要相应地按照什么类型的格式读取。
你如果全部按照 ...

是这样的,这方面没问题,我存的是txt  读时也是txt,之前存一场图像即15300kb时数据都是正确的,我估计是指针出错了,你可以帮看一下我用颜色注释的那两句程序有什么问题吗
回复 支持 反对

使用道具 举报

4

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
578
威望
297
贡献
155
兑换币
183
注册时间
2013-11-13
在线时间
63 小时
9#
发表于 2014-2-24 12:33:13 | 只看该作者
   filebuff []怎么定义的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 00:40 , Processed in 0.096342 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表