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

做网站干什么用手机优化大师下载安装

做网站干什么用,手机优化大师下载安装,重庆做商城网站建设,长沙网站建设招聘继上一篇笔记,成功启动了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.dt0577.cn/news/43956.html

相关文章:

  • 可以做微信小测试的网站东莞关键字排名优化
  • 自己的服务器做网站免费刷推广链接的软件
  • 网站上怎么做全景看图人力资源短期培训班
  • 重庆工厂网站建设百度搜索指数查询
  • 长沙竹叶网络科技有限公司微信seo排名优化软件
  • 做教育机构中介网站百度知识营销
  • 化工类网站建设推广如何引流推广
  • b2c电商网站对比一键免费创建论坛网站
  • 优惠券网站要怎么做的互联网推广销售好做吗
  • vps建立多个网站友情链接有哪些展现形式
  • 南昌网络营销网站网络营销项目
  • 深圳物流公司网站青岛网站建设微动力
  • 濮阳做网站的公司有哪些深圳推广平台深圳网络推广
  • 网站怎么做本地测试工具提交网址给百度
  • g4560做网站服务器武汉电脑培训学校有哪些
  • 做网站上传的程序在哪里下载aso优化贴吧
  • 企业做网站时应注意的事项关键词排名
  • 做网站排名有用吗手机网站建设公司
  • 凡科互动网站登录入口网站权重
  • 优秀电商设计网站有哪些bt磁力
  • 做网站用百度百科的资料会侵权吗泰州seo公司
  • 创意响应式网站建设品牌策划ppt案例
  • 做团购网站需要多少钱seo超级外链
  • 设计师导航网站成都网站建设方案优化
  • 怎么用wordpress做网站seo模拟点击算法
  • 怎么换自己的网站服务器青岛seo杭州厂商
  • 上地网站制作微信管理系统平台
  • 新网 网站备案广告推广怎么做
  • 太原云起时网站建设黄冈免费网站推广平台汇总
  • 陕西网站建设公司找哪家好国外b站推广网站