5339|8

64

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ZLG/FS文件系统读SD卡数据的OSFileRead函数怎么用 [复制链接]

uint32 OSFileRead(void *Buf, uint32 Size, HANDLE Handle);
Buf是保存读到的数据的指针,size是要读的字节数,Handle是文件句柄,返回值是实际读到的字节数。

我是这样用的:


char *FileNameRead = "A:\\toRead.txt";
char ReadFileData[] = "Read File Fail!";

void TASK3(void* pdata)
{
    char buf1[4];
    char buf[20];
    HANDLE FHandleR;
    pdata = pdata;
       
    OSAddFileDriver(SDCammand);
       
    strcpy(buf1, "rw");
    strcpy(buf, FileNameRead);
    FHandleR = OSFileOpen(buf, buf1);
    OSFileRead( ReadFileData, 100, FHandleR);   
    OSFileClose(FHandleR);

    Beep_1(10);//操作完成,鸣铃传信
       
    OSRemoveFileDriver(0);
       
    GUI_SetColor(WHITE, BLACK);
    GUI_PutString8_8(10,U_LCD_YSIZE-30,ReadFileData);//显示
    while(1)
    {
            OSTimeDly(OS_TICKS_PER_SEC);
    }
}


我已经事先在SD卡中创建了toRead.txt文件,并且写了一句话(英文)在里面,
但是读数据不成功,ReadFileData的值始终是 "Read File Fail!"

哪位高人指点下怎么回事啊~~~~~!~~~我都快疯掉了

【注】:写数据OSFileWrite是成功的。

最新回复

错了,不是 uint8* buffer[READNUM]; 应该是 uint8 buffer[READNUM]; 特此更正! 最后结贴了,再次谢谢各位!  详情 回复 发表于 2010-4-12 20:30
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没有人知道么???

就是周立功的ZLG/FS里,读SD卡文件

我是参照写文件函数的例子来使用读函数的

不知道哪里出错~~~
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
题外话,现在的ZLG/FS支持长文件名了吗?以前用的时候只支持短文件名。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
……可以吧?

我写都可以,而且貌似可以打开文件
但是 读数据 的时候好像进了死循环
——程序终止,别的任务也运行不了
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
很好的呢啊。学习了啊
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
检查一下,到底是死循环还是出现数据等异常
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
void Read_word(char * name)
{
        char flag_end2 = 0;
        char buf2[8];
        char buff[20];
           uint32 count2 = 0;
           HANDLE FHandle;
          
           strcpy(buf2, "rw");
        strcpy(buff, name);
        FHandle = OSFileOpen(buff, buf2);
          
               
           flag_end2 = 0;
   
                {
             OSFileSeek(FHandle, count2, SEEK_SET);    // 移动文件读\写位置
                count = OSFileRead(pic_file1, READNUM2, FHandle);//读取文件
      
                }
   OSFileClose(FHandle);
}


  void Task0  (void *pdata)
{  
        uint32 i ;
       
         
    pdata = pdata;
   
    Full_LCD(RED);                //背景色
    state = OSAddFileDriver(SDCammand);     //增加ATA设备0
   
   
   
    while(1)
    {
            Read_word(wordName1);        //读汉字
while(1);
    }
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
解决了,谢谢热心的各位!

其实是数据类型的问题!我这样OSFileRead( ReadFileData, 100, FHandleR);可能造成数据异常,因为ReadFileData是char指针,而读文件函数要求把数据保存在uint8类型指针中,所以解决方法就是:

uint8* buffer[READNUM];
...
     .
     .
     .
     OSFileRead( buffer, READNUM, FHandleR);
     .
     .
     .
     ReadFileData = (char*) buffer;
...
}



其中READNUM是一个整型常量,表示要读的字节数
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
错了,不是
uint8* buffer[READNUM];
应该是
uint8 buffer[READNUM];

特此更正!

最后结贴了,再次谢谢各位!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表