当前位置: 首页 > news >正文

找人做网站 优帮云电商培训机构哪家好

找人做网站 优帮云,电商培训机构哪家好,seo网站规划,北京网站建设批发继上一篇笔记,成功启动了liteos_m内核,可以创建线程了,也能看到shell控制台了。 今天研究文件系统,让控制台相关文件命令如mkdir和ls能工作。 liteos_m内核支持fatfs和littlefs两个文件系统, fatfs适用于SD卡&#xff…

继上一篇笔记,成功启动了liteos_m内核,可以创建线程了,也能看到shell控制台了。
今天研究文件系统,让控制台相关文件命令如mkdir和ls能工作。


liteos_m内核支持fatfs和littlefs两个文件系统,
fatfs适用于SD卡,
littlefs适用于NORFLASH,如W25Qxx系列。
我的板子上刚好有W25Q64,试试接入littlefs文件系统。
基于之前的研究经验,进入make menuconfig看看文件系统相关选项,先把它选上:

当启用文件系统后,LOS_KernelInit会调用OsVfsInit进行初始化,
OsVfsInit又会调用LfsInit初始化littlefs,并把littlefs注册到vfs的类型列表。


那我们怎么使用它呢,怎么让littlefs读写我们的SPIFLASH呢?

经过调查,我们需要使用mount函数,进行挂载操作来绑定文件系统和FLASH设备。
那就在bsp目录新建littlefs.c,参考代码:

#include <stdio.h>
#include "spiflash.h"
#include "lfs.h"
#include "los_fs.h"static int LittlefsRead(int partition, UINT32 *offset, void *buf, UINT32 size)
{spiflash_read(*offset, buf, size);return LFS_ERR_OK;
}static int LittlefsProg(int partition, UINT32 *offset, const void *buf, UINT32 size)
{spiflash_write(*offset, buf, size);return LFS_ERR_OK;
}static int LittlefsErase(int partition, UINT32 offset, UINT32 size)
{spiflash_erase(offset, size);return LFS_ERR_OK;
}static void LittlefsPartiton(void)
{int lens[1]={1024*1024};int addr[1]={0};LOS_DiskPartition("flash0", "littlefs", lens, addr, 1);
}static void LittlefsMount(void)
{int ret;struct PartitionCfg lfs_cfg;lfs_cfg.readFunc = LittlefsRead;lfs_cfg.writeFunc = LittlefsProg;lfs_cfg.eraseFunc = LittlefsErase;lfs_cfg.readSize = 64;lfs_cfg.writeSize = 256;lfs_cfg.blockSize = 4096;lfs_cfg.blockCount = 256;lfs_cfg.cacheSize = 4096;lfs_cfg.partNo = 0;lfs_cfg.lookaheadSize = 64;lfs_cfg.blockCycles = 100;ret = mount(NULL, "/flash", "littlefs", 0, &lfs_cfg);printf("LittlefsInit ret=%d\n", ret);
}int LittlefsInit(void)
{printf("LittlefsInit enter\n");spiflash_init();printf("SPIFLASH flash id=0x%x\n", spiflash_read_id());LittlefsPartiton();LittlefsMount();return LFS_ERR_OK;
}

LittlefsInit函数是初始化文件系统函数,在main里面完成LOS_KernelInit之后再调用。
spiflash_init是我们实现的W25QXX的驱动,W25QXX使用的是STM32F407的SPI接口。

使用HAL库完成SPI驱动,并用SPI读写W25QXX的部分就不在这里过多介绍了。
只要实现spiflash的init(初始化),read(读),write(写),erase(擦除)这4个函数就行。

LittlefsPartiton这个函数是定义1个磁盘分区,不然mount会失败。
具体原因是liteos_m适配的代码lfs_adapter.c里面,littlefs_block_xxx函数要用LfsGetStartAddr来寻找分区超始地址。LfsGetStartAddr会查找我们定义的分区表。

LittlefsMount函数则是调用mount函数,挂载littlefs分区,最后1个参数指定FLASH驱动参数。
mount函数最终会调用lfs_adapter.c里面的LfsMount函数。
LfsMount函数的最后1个参数会被LfsConfigAdapter((struct PartitionCfg *)data, cfg)转换为struct lfs_config结构传递给lfs_mount函数。

其它几个函数则就对FLASH读写操作进行封装就行了。

mount的第2个参数是挂载路径,可以自定义,但是用"/"我这里测试不行,只能是"/xxx"目录。


写完代码,按照之前的方法修改BUILD.gn,一切顺利的话编译通过。
下载到板子,可以看到LittlefsInit ret=0的日志。
敲ls命令,会报错,但是cd /flash切换目录后就没有问题了。

需要读写文件的话,#include<fnctl.h>使用open,read,write,close函数就可以了。

http://www.yidumall.com/news/71889.html

相关文章:

  • 上海网站推广模板杨谦教授编的营销课程
  • 网站建设的专业术语最新军事新闻 今日 最新消息
  • 怎样做视频直播网站指数函数求导公式
  • 厦门网站免费制作天津seo公司
  • 做游戏的网站有哪些北京网络推广公司
  • 做网站注册什么公司好网站快速排名优化报价
  • 网站开发无锡软文推广名词解释
  • 西安企业建站在哪里做合肥网站快速排名提升
  • 微信公众号自己微网站吗武汉网络推广网络营销
  • 局域网如何做视频网站建设百度公司总部在哪里
  • 怎么做健康咨询网站企业网站建设方案论文
  • 电商ui设计是什么意思seo是什么seo怎么做
  • 做网站 pc端与手机端兼容如何创建自己的卡网
  • 路由器带u盘接口的做网站流量宝
  • 淘宝做网站的靠谱吗深圳网站提升排名
  • 网站建设推广怎么做怎么写网站
  • 日本做头像的网站管理系统
  • 互联网定制产品网站企业应该如何进行网站推广
  • 慕课网网站开发背景seo这个职位是干什么的
  • 如何向百度提交网站互联网广告平台有哪些
  • 网页设计与制作课程说明搜索引擎优化的常用方法
  • 怎么样做淘宝优惠券网站怎么做好网络销售
  • 阿里巴巴外贸圈论坛手把手教你优化网站
  • 接单子做网站互联网域名交易中心
  • 太原网站推广优化免费网络营销推广软件
  • 做网站的软件高中 通用技术网站seo技术
  • dz后台网站地图谷歌广告上海有限公司官网
  • wordpress改logo不显示泰安网站推广优化
  • 隐藏网站源码站长之家怎么用
  • 阿里云用什么系统做网站好广东网站seo