K210入门-裸机开发(八点半)文件系统补充

开发板:K210 AIRV R3版 widora

开发环境:kendryte IDE 官方的

必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图

(一)这集试试文件系统打开自己的文件

K210入门-裸机开发(八点半)文件系统补充_第1张图片

先读a.txt 并获取 里面的长度 v_fileinfo.fsize

K210入门-裸机开发(八点半)文件系统补充_第2张图片

然后把读到的内容打印出来

K210入门-裸机开发(八点半)文件系统补充_第3张图片

下面的代码先注释掉 单独测试这个 

一条龙走起

报错了 v_fileinfo.fsize 初始化不了 我又不想用mem分配 就不管了 就用固定常量128(建议用动态分配内存 我这边不会 所以用固定的)

K210入门-裸机开发(八点半)文件系统补充_第4张图片

效果  不错,都读出来了

K210入门-裸机开发(八点半)文件系统补充_第5张图片

继续读下一个文档

K210入门-裸机开发(八点半)文件系统补充_第6张图片

这边就直接读了 不获取信息了

K210入门-裸机开发(八点半)文件系统补充_第7张图片

串口打印不出来, 证明识别不了中文, 我现在暂时不知道怎么解决不能识别中文的 

所以不能使用中文

(二) 那么下面就来测试下读取mp3

K210入门-裸机开发(八点半)文件系统补充_第8张图片

也是读到的,但是读出来的内容就不知道对不对了

K210入门-裸机开发(八点半)文件系统补充_第9张图片

下面对a.txt写东西(直接写 不读,等下去读卡器读)

K210入门-裸机开发(八点半)文件系统补充_第10张图片

这次不错, 写中文居然可以

K210入门-裸机开发(八点半)文件系统补充_第11张图片

把文件名都改全英文

K210入门-裸机开发(八点半)文件系统补充_第12张图片

下面读图片 

K210入门-裸机开发(八点半)文件系统补充_第13张图片

读不到内容, 原因应该是获取的是8位的,但图片不是8位而是32位 所以不行

 

刚去学了一波动态内存 calloc,用完记得free释放数组

K210入门-裸机开发(八点半)文件系统补充_第14张图片

K210入门-裸机开发(八点半)文件系统补充_第15张图片

 

文件系统学习完毕 下次再见

 

总结下

创建文件夹

  char *dir = "jwdeng1995";
  ret = f_mkdir(dir);

获取文件大小(FILINFO 里面还能显示其他信息的 ,这里只用了.fsize)

  char *path = "jwdeng1995/test.txt";
  printf("/*******************sd read write test*******************/\n");
  uint32_t v_ret_len = 0;

  FILINFO v_fileinfo;
  if ((ret = f_stat(path, &v_fileinfo)) == FR_OK) {
    printf("%s length is %lld\n", path, v_fileinfo.fsize);
  } else {
    printf("%s fstat err [%d]\n", path, ret);
  }

打开文档并输出内容


  if ((ret = f_open(&file, path, FA_READ)) == FR_OK) {
    char v_buf[128] = {0};
    ret = f_read(&file, (void *)v_buf, 128, &v_ret_len);
    if (ret != FR_OK) {
      printf("Read %s err[%d]\n", path, ret);
    } else {
      printf("Read :> %s %d bytes lenth\n", v_buf, v_ret_len);
    }
    f_close(&file);
  }

 写文档

  if ((ret = f_open(&file, path, FA_CREATE_ALWAYS | FA_WRITE)) != FR_OK) {
    printf("open file %s err[%d]\n", path, ret);
    return ret;
  } else {
    printf("Open %s ok\n", path);
  }
  uint8_t hello[1024]= "阿斯打扫打扫打扫打扫打扫";
  ret = f_write(&file, hello, sizeof(hello), &v_ret_len);
  if (ret != FR_OK) {
    printf("Write %s err[%d]\n", path, ret);
  } else {
    printf("Write %d bytes to %s ok\n", v_ret_len, path);
  }
  f_close(&file);

 

动态内存分配空间给数组打印

  char *v_buf = calloc(v_fileinfo.fsize, sizeof(char));

//用完free掉
  free(v_buf);
  v_buf = NULL;

 

这节没有代码或工程提供 就这样了

你可能感兴趣的:(K210)