560浏览
查看: 560|回复: 0

[官方教程] K210入门-裸机开发(八点半)文件系统补充

[复制链接]
本帖最后由 猪百岁 于 2021-3-11 17:31 编辑

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

开发板:K210 AIRV R3版 widora

开发环境:kendryte IDE 官方的

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

1.这集试试文件系统打开自己的文件

ThuMarch-202103114072..png
先读a.txt 并获取 里面的长度 v_fileinfo.fsize

ThuMarch-202103111387..png

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

ThuMarch-202103117903..png

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

一条龙走起

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

ThuMarch-202103119394..png
效果  不错,都读出来了

ThuMarch-202103117752..png

继续读下一个文档

ThuMarch-202103117048..png

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

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

所以不能使用中文

2.那么下面就来测试下读取mp3

ThuMarch-202103114875..png
也是读到的,但是读出来的内容就不知道对不对了

ThuMarch-202103114499..png

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

ThuMarch-202103118703..png

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

ThuMarch-202103118499..png
把文件名都改全英文

ThuMarch-202103116530..png
下面读图片

ThuMarch-202103117028..png

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

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

ThuMarch-202103113196..png

ThuMarch-202103115966..png

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

总结下

创建文件夹

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;

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


版权声明:本文为CSDN博主「jwdeng1995」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jwdeng1995/article/details/108063316

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail