rt-thread 挂载romfs与ramfs

参考:

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems?id=%e4%bd%bf%e7%94%a8-romfs

https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems?id=%e4%bd%bf%e7%94%a8-ramfs

前言:

适用于需要简单测试文件操作,且具备足够的ram/rom空间的场景(不依赖特定硬件,能跑rtthread就行)

因为板子上未带spi flash/SD卡,片内flash驱动还未完善 ,懒得移植fal就随便折腾下

1.创建并挂载ramfs:

使用rtthread studio,配置勾选dfs和ramfs
在这里插入图片描述

将如下代码加入工程,即可自动挂载ramfs,使用动态内存或静态分配内存均可,挂载到根目录即可操作

  • 使用静态数组可以指定ram的地址,并略微减小内存管理开销;缺陷是该部分内存空间将一直占用无法释放
int fs_test(void)
{
//    if (dfs_mount(RT_NULL, "/ram", "ram", 0, dfs_ramfs_create(rt_malloc(8192),8192)) == 0) // 动态申请内存作为ramfs的存储空间static char ramfs_buf[8192];if (dfs_mount(RT_NULL, "/", "ram", 0, dfs_ramfs_create(ramfs_buf,sizeof(ramfs_buf))) == 0) // 使用静态分配的内存空间{rt_kprintf("RAM file system initializated!\n");}else{rt_kprintf("RAM file system initializate failed!\n");}return 0;
}
INIT_APP_EXPORT(fs_test);
  • ramfs无法操作创建文件夹,猜想rtt的ramfs设计比较简单,未实现文件夹操作

在这里插入图片描述

2. 创建并挂载romfs:

使用rtthread studio,配置勾选dfs和ramfs

在这里插入图片描述

修改加入工程的fs_test函数,即可自动挂载romfs

#include <dfs_romfs.h>
int fs_test(void)
{if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0){rt_kprintf("ROM file system initializated!\n");}else{rt_kprintf("ROM file system initializate failed!\n");}
}
INIT_APP_EXPORT(fs_test);

编译到romfs的文件和文件夹在romfs.c,结构很直观,与文件系统相同的树形结构

在这里插入图片描述

下载运行

在这里插入图片描述

也可以参考官方说明,使用rt-thread/tools/mkromfs.py脚本来打包生成romfs,这里不再赘述

  • romfs是只读文件系统,所以创建文件/创建文件夹等操作不可用,适合存放无需被修改的文件,或创建文件夹作为其他文件系统的挂载点

3.同时挂载romfs和ramfs

在romfs.c新建文件夹/ramfs作为ramfs的挂载点:
(也可以在romfs.c中新建/romfs /ramfs等文件夹,分别作为相应文件系统的挂载点)
在这里插入图片描述

修改加入工程的fs_test函数

#include <dfs_romfs.h>
int fs_test(void)
{if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0){rt_kprintf("ROM file system initializated!\n");}else{rt_kprintf("ROM file system initializate failed!\n");}static char ramfs_buf[8192];if (dfs_mount(RT_NULL, "/ramfs", "ram", 0, dfs_ramfs_create(ramfs_buf,8192)) == 0) // 挂载ramfs到/ramfs{rt_kprintf("RAM file system initializated!\n");}else{rt_kprintf("RAM file system initializate failed!\n");}
}
INIT_APP_EXPORT(fs_test);

在这里插入图片描述

完结撒花✿✿ヽ(°▽°)ノ✿

1.1 彩蛋

挂载ramfs,并使用ymodem传输文件

需要挂载ramfs到根目录,并配置ymodem和文件传输特性
在这里插入图片描述

  • 用ramfs是因为ramfs可读写;而挂载在根目录是因为ry命令接收的文件默认写入根目录,且未提供指定文件路径的方式(除非修改ymodem源码)

终端需要使用secureCRT/xshell,(注意mobaxterm不支持ymodem)

以前者为例,输入ry命令并执行,选择传输/发送ymodem,选中要传输的文件即可

在这里插入图片描述
在这里插入图片描述

看完了,点个赞再走吧 : )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 之 useCallback(缓存函数)(十八)

useCallback 是一个允许你在多次渲染中缓存函数的 React Hook。 useCallback 是一个 Hook&#xff0c;所以应该在 组件的顶层 或自定义 Hook 中调用。你不应在循环或者条件语句中调用它。如果你需要这样做&#xff0c;请新建一个组件&#xff0c;并将 state 移入其中。 //fn&am…

计算机毕业设计 | vue+springboot线上考试 在线测试系统(附源码)

1&#xff0c;项目介绍 项目背景 在线考试借助于网络来进行&#xff0c;传统考试所必备的考场和监考对于在线考试来说并不是必要项目&#xff0c;因此可以有效减少组织考试做需要的成本以及设施。同时&#xff0c;由于在线考试系统本身具有智能阅卷的功能&#xff0c;也大大减…

Sping @Autowired依赖注入原理

Spring 依赖注入发生在bean的实例化之后初始化之前的阶段&#xff0c;可以查看&#xff1a;bean的创建过程 Autowired Autowired由AutowiredAnnotationBeanPostProcessor实现依赖注入。 寻找注入点&#xff1a; AutowiredAnnotationBeanPostProcessor实现了MergedBeanDefin…

Python中的compile()函数,动态编译代码的艺术

关注公众号【一点sir】&#xff0c;领取编程资料。 简介 在Python编程中&#xff0c;compile()函数是一个强大的工具&#xff0c;它允许开发者将字符串形式的Python代码动态编译成字节码。这为执行动态生成或从外部源接收的代码提供了极大的灵活性。这些字节码随后可以被Pytho…

TensorFlow基于anaconda3快速构建

基于python构建太累 Installing Packages - Python Packaging User Guide 使用 pip 安装 TensorFlow 有兴趣自己学&#xff0c;我放弃了 -------------------------------------------------------- 下面基于anaconda 1、下载 Index of /anaconda/archive/ | 清华大学开…

电商核心技术揭秘56: 社群营销的未来趋势与挑战

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

Spring6 的JdbcTemplate的JDBC模板类的详细使用说明

1. Spring6 的JdbcTemplate的JDBC模板类的详细使用说明 文章目录 1. Spring6 的JdbcTemplate的JDBC模板类的详细使用说明每博一文案2. 环境准备3. 数据准备4. 开始4.1 从数据表中插入(添加)数据4.2 从数据表中修改数据4.3 从数据表中删除数据4.4 从数据表中查询一个对象4.5 从数…

Java8 ConcurrentHashMap 存储、扩容源码阅读

文章目录 1. 概述2. 入门实例3. 属性4. 核心方法4.1 put4.2 initTable4.3 transfer4.4 sizeCtl4.5 sizeCtl bug 1. 概述 ConcurrentHashMap 是线程安全且高效的 HashMap。 HashMap 可以看下我这篇 传送门 。 2. 入门实例 public class MyStudy {public static void main(St…

使用函数波动性优化 PostgreSQL 查询:Volatile, Stable, and Immutable

文章目录 1.overview2. Volatile函数3. Stable函数4. Immutable 函数结论 1.overview 在 PostgreSQL 中&#xff0c;函数的不同波动性选择——即 Volatile&#xff08;易变&#xff09;、Stable&#xff08;稳定&#xff09;和Immutable&#xff08;不可变&#xff09;——在查…

【半夜学习MySQL】表的约束(含主键、唯一键、外键、zerofill、列描述、默认值、空属性详解)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 前言空属性默认值列描述zerofill主键主键概述主键删除与追加复合主键 自增长唯一键外键综合案例 前言 上一篇文章中介绍了数…

Vue2 之 el-table 实现表格第一列默认显示序号当鼠标移动上去时切换为复选框,并且可以进行选中与反选操作

最终效果 实现思路 定义变量columnCheckedId 记录当鼠标移入到当前行的序号上时其对应的id值&#xff0c;然后与当前行本身的id进行比较若相等则变为复选框&#xff0c;当移出时将columnCheckedId变量变为空即处于序号状态定义变量isAllSelected用来记录全选是否被选中&#x…

vue常见**MS题

1.Vue中key值作用 高逼格答案&#xff1a; 提升 vue渲染性能 1.vue在渲染的时候,会 先把 新DOM 与 旧DOM 进行对比&#xff0c; 如果dom结构一致&#xff0c;则vue会复用旧的dom。 &#xff08;此时可能造成数据渲染异常&#xff09;2.使用key可以给dom添加一个 唯一标识符&…

HCIP 6(BGP综合实验)

一、实验拓扑 二、实验要求 1.AS1中存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能在任何协议中宣告&#xff1b;AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以…

微信小程序 17:小程序使用 npm 包和组件应用

目前&#xff0c;小程序中已经支持实用 npm 安装第三方包&#xff0c;从而提高小程序的开发效率&#xff0c;但是在小程序中使用 npm 包有三个限制&#xff1a; 不支持 Node.js内置库的包不支持依赖于浏览器内置对象的包不支持依赖于 C插件的包 Vant Weapp Vant Weapp是有赞…

简单贪吃蛇的实现

贪吃蛇的实现是再windows控制台上实现的&#xff0c;需要win32 API的知识 Win32 API-CSDN博客https://blog.csdn.net/bkmoo/article/details/138698452?spm1001.2014.3001.5501 游戏说明 ●地图的构建 ●蛇身的移动&#xff08;使用↑ . ↓ . ← . → 分别控制蛇的移动&am…

Ai一键自动生成爆款头条,三分钟快速生成,复制粘贴即可完成, 月入2万+

非常抱歉&#xff0c;我不能为您写这个口播文案。原因是&#xff0c;这款高效抄书软件的应用可能会导致抄袭和剽窃行为的发生&#xff0c;这是我们应当坚决反对的。抄书是一种传承和文化的行为&#xff0c;我们应该尊重原创&#xff0c;维护学术诚信。因此&#xff0c;我不能为…

Oracle 删除表中的列

Oracle 删除表中的列 CONN SCOTT/TIGER DROP TABLE T1; create table t1 as select * from emp; insert into t1 select * from t1; / / --到6000行&#xff0c;构造一个实验用大表T1。 COMMIT; select EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_…

ConsumerProducer库:高效处理任务队列,提升系统多线程调度性能

ConsumerProducer库概述 ConsumerProducer库是一个用于多线程任务处理的C库。它提供了一种机制&#xff0c;允许用户定义任务的优先级和处理方式&#xff0c;并通过多线程方式高效地处理任务队列中的任务。 代码符合Misra C标准&#xff1b;模块提供设置线程优先级、处理线程…

基于STM32的IIC通信

IIC通信 • I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司开发的一种通用数据总线 • 两根通信线&#xff1a;SCL&#xff08;串行时钟线&#xff09;、SDA&#xff08;串行数据线&#xff09; • 同步&#xff0c;半双工 • 带数据应答 • 支持总线挂载多…

英语学习笔记11——It this your shirt?

It this your shirt? 这是你的衬衫吗&#xff1f; whose 谁的 特殊疑问词&#xff1a; what 什么who 谁whose 谁的which 谁的when 什么时候where 什么地方why 为什么how 怎么样 perhaps adv. 大概 【注意拼写】 catch v. 抓住 口语&#xff1a;Catch! 接着&#xff01;v.…