Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
【7天rtos网络编程】day1、2-RT-Thread文件系统-风雨潇潇
发布于 2018-10-16 20:02:19 浏览:2501
订阅该版
[tocm] * 本帖最后由 风雨潇潇 于 2018-10-18 00:34 编辑 * **作业:** 1.获取并运行文件系统相关示例程序; 2.文本数据替换:1.txt里面有文本信息123456789,将123替换为abc; 3.文件匹配:有一系列文件如:1.txt,12.txt ,123.txt,从中找出1.txt,并将文件内容输出出来。 **完成思路:** 参考RTT的官方文档和教程,很容易上手,解释的很详细! **具体操作步骤:** RTT的相关环境搭建就参考官网教程就OK了,非常详细! [https://www.rt-thread.org/document/site/rtthread-application-note/setup/source-code/an0016-rtthread-setup-source-code/](https://www.rt-thread.org/document/site/rtthread-application-note/setup/source-code/an0016-rtthread-setup-source-code/) 在对应工程目录下右键打开**env**工具,使用**menuconfig**命令进行配置,依次打开路径并选中全部的示例代码(空格键可选中),然后保存退出。 ![7.png](/uploads/201810/16/214628v5z2wwk27zgw3k7r.png) ![8.png](/uploads/201810/16/214659r773zza38kg793od.png) ![9.png](/uploads/201810/16/214723ngiiiet1eewpgvkp.png) ![10.png](/uploads/201810/16/214740sn1h1k1818252581.png) ![11.png](/uploads/201810/16/214812uqydts3a9saaqzsa.png) 使用**paks --update** 命令进行更新,再用 **scons **编译工程 ![12.png](/uploads/201810/16/215315uznhjr9vb0b80zv0.png) 运行工程,使用**TAB**按键查看命令 ![13.png](/uploads/201810/16/215552vzt6wv1xnretexs9.png) 使用上述命令操作进行操作观察现象。 ![14.png](/uploads/201810/16/220040r9l562bzk95hgkv3.png) RTT文件系统的挂载是在对应工程下 **\applications\mnt.c **文件中实现的,默认挂载了** SD0**的文件系统到根目录上代码。如下: ```#include
#ifdef RT_USING_DFS #include
int mnt_init(void) { rt_thread_delay(RT_TICK_PER_SECOND); if (dfs_mount("sd0", "/", "elm", 0, 0 )== 0) { rt_kprintf("file system initialization done!
"); } return 0; } INIT_ENV_EXPORT(mnt_init); #endif``` 在使用**QEMU**后,mnt.c就默认挂载了SD0的一个虚拟SD卡,在工程目录下就能看到**sd.bin**文件的生成 ![1.png](/uploads/201810/16/203532ciiaoumluvmmvmml.png) sd.bin是一个FAT文件系统的镜像文件,可以看做一个压缩文件,可以利用解压软件7-ZIP查看里面的文件。 接下来我们可以制作一张虚拟的SD卡,我们进入到ENV工具的**env_release \ env_released_1.0.0 \ ENV \工具\ fatdisk**目录下,可以**看到** fatdisk工具, ![2.png](/uploads/201810/16/204630xthhfojonmxofox5.png) 在这个文件夹下新建一个**sd**的文件夹,在该文件下新建**1.txt**文件并**写入abc456789**。回到**fatdisk.exe存在**的目录下,用记事本打开**fatdisk.xml**文件,修改为 ```
65532
512
sd
sd.bin
0
``` 右键打开**ENV **工具,输入**fatdisk**命令,可以**看到sd.bin**文件的生成。 ![3.png](/uploads/201810/16/205647xlgodqx8ggrko0sc.png) ![4.png](/uploads/201810/16/205809sfxz7410o0b471z1.png) 再将生成的**sd.bin**文件**替换**到**RT线程\ BSP \ QEMU-vexpress-A9**目录下已有的**sd.bin**文件,在工程目录下打开**env**工具,使用**scons**命令编译工程,可以使用命令加快编译速度,参考RTT官网手册:[https://www.rt-thread.org/document/site/submodules/rtthread-manual-doc/zh/1chapters/10-chapter_scons/](https://www.rt-thread.org/document/site/submodules/rtthread-manual-doc/zh/1chapters/10-chapter_scons/) ```//scons -jN scons -j4``` 之后运行**QEMU**,使用相关文件命令可查看**SD卡**里的文件了。 ![6.png](/uploads/201810/16/212043btlqw9cdh109blj9.png) 看了大神们的作业,才知道我是来搞笑来了,真的惭愧惭愧,:( 。搞笑也要进行到底哦,知道了要干嘛后,参考上面添加的几个示例代码以及RTT官网上面的文件系统操作,勉强写了一个作业,之前没写过文件流的代码,代码似乎有点乱,见笑见笑。**示例代码文件** ![15.png](/uploads/201810/17/223747zh2znneihuautaul.png) 官网手册:[https://www.rt-thread.org/document/site/submodules/rtthread-manual-doc/zh/1chapters/12-chapter_filesystem/](https://www.rt-thread.org/document/site/submodules/rtthread-manual-doc/zh/1chapters/12-chapter_filesystem/) 类似示例代码,新建了一个文件**day1.c**写了一个函数,代码如下 ```#include
#include
#include
static void day1(void) { int fd, size; char s[] = "123456789", s1[] = "123", buffer[80], dest[20] = "abc"; char *p = NULL; /* 以创建和读写模式打开 /1.txt 文件,如果该文件不存在则创建该文件*/ fd = open("/1.txt", O_WRONLY | O_CREAT); if(fd < 0) { rt_kprintf("open file failed
"); return; } read(fd, buffer, sizeof(buffer)); //append close(fd); fd = open("/1.txt", O_WRONLY); if(fd < 0) { rt_kprintf("open file failed
"); return; } if(strcmp(s, buffer) != 0) { write(fd, s, sizeof(s)); } close(fd); fd = open("/1.txt", O_WRONLY); if(fd < 0) { rt_kprintf("open file failed
"); return; } read(fd, buffer, sizeof(buffer)); rt_kprintf("1.txt : %s
", buffer); p = strstr(buffer,s1); if(p != NULL) { strcat(dest, p+3); } close(fd); fd = open("/1.txt", O_WRONLY); if(fd < 0) { rt_kprintf("open file failed
"); return; } write(fd, dest, sizeof(dest)); close(fd); fd = open("/1.txt", O_WRONLY); if(fd < 0) { rt_kprintf("open file failed
"); return; } read(fd, buffer, sizeof(buffer)); rt_kprintf("1.txt : %s
", buffer); } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(day1, day1); ```之后在 **SConscript** 文件中添加内容,代码如下 ```from building import * src = [] cwd = GetCurrentDir() include_path = [cwd] # add filesystem samples. if GetDepend('FILESYSTEM_SAMPLES_USING_READWRITE'): src += ['readwrite_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_STAT'): src += ['stat_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_RENAME'): src += ['rename_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_MKDIR'): src += ['mkdir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_OPENDIR'): src += ['opendir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_READDIR'): src += ['readdir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_TELL_SEEK_DIR'): src += ['tell_seek_dir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_TELL_SEEK_DIR'): src += ['day1.c'] group = DefineGroup('filesystem-samples', src, depend = ['PKG_USING_FILESYSTEM_SAMPLES'], CPPPATH = include_path) Return('group') ``` 保存后在工程目录下打开env工具,重新编译运行qemu,使用TAB键查看命令,可以看到自己添加的 **day1** 命令 ![16.png](/uploads/201810/17/224522d4izityzo81izr8t.png) 然后运行自己建立的命令 **day1** 可以看到结果输出 ![17.png](/uploads/201810/17/224809ho9z4s044szhb0ao.png) 第三题类似上面操作,同样是在示例代码文件夹下新建了一个**day2.c**的源文件,编写代码```#include
#include
#include
static void day2(void) { int fd; char buffer[30]; DIR *dirp; struct dirent *d; /* 打开/目录*/ dirp = opendir("/"); if (dirp == RT_NULL) { rt_kprintf("open directory error!
"); } else { while ((d = readdir(dirp)) != RT_NULL) { if(strcmp("1.txt", d->d_name) == 0) { rt_kprintf("found %s
", d->d_name); break; } } /* 关闭目录 */ closedir(dirp); //return; } fd = open("/1.txt", O_WRONLY); if(fd < 0) { rt_kprintf("open file for write failed
"); return; } read(fd, buffer, sizeof(buffer)); rt_kprintf("1.txt: %s
", buffer); } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(day2, day2); ``` 然后在 **SConscript** 文件中添加新内容,代码如下 ```from building import * src = [] cwd = GetCurrentDir() include_path = [cwd] # add filesystem samples. if GetDepend('FILESYSTEM_SAMPLES_USING_READWRITE'): src += ['readwrite_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_STAT'): src += ['stat_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_RENAME'): src += ['rename_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_MKDIR'): src += ['mkdir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_OPENDIR'): src += ['opendir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_READDIR'): src += ['readdir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_TELL_SEEK_DIR'): src += ['tell_seek_dir_sample.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_TELL_SEEK_DIR'): src += ['day1.c'] if GetDepend('FILESYSTEM_SAMPLES_USING_TELL_SEEK_DIR'): src += ['day2.c'] group = DefineGroup('filesystem-samples', src, depend = ['PKG_USING_FILESYSTEM_SAMPLES'], CPPPATH = include_path) Return('group') ```scons命令编译,运行qemu,之后可以**echo**命令新建两个文件 ```echo "12" 12.txt echo "123" 123.txt```![18.png](/uploads/201810/18/003230psqqgk19ccq9sqql.png) 在运行 **day2 **命令查看结果 ![19.png](/uploads/201810/18/003426vkgt4kg72i7krgqg.png)
查看更多
2
个回答
默认排序
按发布时间排序
flyboy
2018-10-17
Do my self();
楼主用心了
风雨潇潇
2018-10-17
这家伙很懒,什么也没写!
>楼主用心了 --- 看到别的大神帖子,都不敢发了,更不敢说用心了
撰写答案
登录
注册新账号
关注者
0
被浏览
2.5k
关于作者
风雨潇潇
这家伙很懒,什么也没写!
提问
3
回答
19
被采纳
0
关注TA
发私信
相关问题
1
【LWIP学习营】第一关开发环境搭建
2
LWIP学习营第一周入门移植问题汇总贴
3
【LWIP学习营】f407+lan8720A小结
4
【LwIP学习营】【第一周】仅零散记录,无主题
5
【LWIP学习营】正点原子探索者F407+LAN8720第一周小结
6
【LwIP学习营】【第一周】网络通信基础及实现TCP 聊天客户端
7
【LwIP学习营】【第一周】LWIP移植
8
【LwIP学习营】【第一周】LWIP移植
9
【LwIP学习营】【第一周】开发板适配
10
【LwIP学习营】【第一周】环境搭建和配置验证
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
组件 lwip v2.0.3 版本使用 netdev网卡的 ping 功能
2
简单两步配置RTT源码阅读环境 vsc+clangd
3
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
4
LVGL使用字库IC芯片显示中文
5
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部