搜索
bottom↓
回复: 115

SPIFFS文件系统STM32移植工程分享

  [复制链接]

出0入0汤圆

发表于 2015-8-2 16:29:23 | 显示全部楼层 |阅读模式
本人刚进入嵌入式行业,技术上来说菜鸟一枚。以前在论坛问了很多技术方面的问题,得到了很多热心坛友的帮助,也经常在论坛下点有用的技术资料。。。。。。
人不能只顾索取而不付出,无奈本人技术水平有限,实在拿不出什么像样的技术活给大家分享。。。。。。。。
今天闲着没事,把我之前移植好的SPI FLASH文件系统分享出来,有需要的可以拿去,您能用上,本人倍感高兴;不需要的,您来凑个热闹,本人表示欢迎。。。。。
好了,闲话少说。。。。。。下面切入正题。。。。。。

一、什么是SPIFS?
如果你问我这个问题,我也无法全面的回答,我就知道它是一种文件系统。因为之前我也没听说过SPIFS,直到有一天,有个哥们在我的帖子里提到了它http://www.amobbs.com/forum.php? ... =5610774&extra=
我迫不及待的顺着那哥们指引的方向去看了看:https://github.com/pellepl/spiffs  。我大致看了下文档,感觉还不错,貌似是我想要的。。。。。于是花了点时间把它移植到了设备系统里。
现在说说个人的使用感受。我们设备使用的SPI FLASH存储器是W25X64,使用SPIFS文件系统读写600多组电压数据,500多组内阻数据,300多条告警信息,使用半年多时间,没有出现任何问题,设备经常开关机,也没有出现文件
系统崩溃的问题。最后我要感谢那位在我贴纸里为我指路的哥们,当然感谢SPIFS的作者(虽然我没看SPIFS是谁写的)

二、SPIFS移植
打字太累,我就截图说明吧。。。。。。。后面会给大家完整的移植工程。。。
1、下载SPIFS源代码,把他加入到自己的工程里(这句貌似废话。。。。请无视)
    源码里有些是例程,有兴趣可以看看,没兴趣直接删掉,真正有用的是这些文件:


2、配置SPI FLASH的相关信息
此配置要根据自己的SPI FLASH硬件信息做相应的修改,下面是我的配置


3、配置FLASH的读写接口函数
(这里我就认为你的SPI FLASH已经驱动成功,读、写、擦出都没问题,OK,把这些函数赋给SPIFS文件系统调用就行了)


4、收工。。。。测试。。。。


5、补充说明
SPIFS文件系统在创建文件或目录的时候只支持Flat(平坦)模式,也就是说它不支持建立多级目录,我不知道SPIFS版本有木有更新,反正我用的这个版本是不支持的,
如果那个坛友发现新版本改进了,请告知。。。。。。



编译环境说明:
MDK5.15  
开启C99

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-8-2 16:37:49 来自手机 | 显示全部楼层
顶你,看看

出0入0汤圆

发表于 2015-8-2 16:38:56 | 显示全部楼层
不错,标记一下,以后用得到

出0入0汤圆

发表于 2015-8-2 16:51:16 | 显示全部楼层
说的是我么
楼主可以多去github上逛逛,还是有很多好用的开源项目的,不用我们重复造轮子~

出0入0汤圆

发表于 2015-8-2 16:56:43 | 显示全部楼层
谢谢...................................................................................
不错,有用
                                                                                                                    
                                                                                             
                                                                             
.

出0入0汤圆

 楼主| 发表于 2015-8-2 17:03:38 | 显示全部楼层
zpwc 发表于 2015-8-2 16:51
说的是我么
楼主可以多去github上逛逛,还是有很多好用的开源项目的,不用我们重复造轮子~ ...

出0入0汤圆

发表于 2015-8-2 17:25:39 | 显示全部楼层
好帖,顶一下

出0入0汤圆

发表于 2015-8-2 18:52:57 | 显示全部楼层
正常flash应该是擦除后写入整个扇区吧?
如何解决擦除后、写入前断电的问题?这样会导致数据丢失
我目前能想到的是双扇区备份

出0入0汤圆

发表于 2015-8-2 19:38:14 | 显示全部楼层
SPIFFs
////////////////////////可爱补丁//////////////

出0入0汤圆

发表于 2015-8-2 19:40:50 | 显示全部楼层
顶你 有时候还真需要这样的小系统

出0入0汤圆

发表于 2015-8-2 19:55:32 | 显示全部楼层
nice,好好看看

出0入0汤圆

发表于 2015-8-2 22:59:06 | 显示全部楼层
goog job,顶一下楼主的工作。

出0入0汤圆

发表于 2015-8-2 23:16:15 | 显示全部楼层
感谢分享~下载瞧瞧. 不知道采样数据读写数据频率怎么处理的。。

出0入13汤圆

发表于 2015-8-2 23:39:14 | 显示全部楼层
真不错,支持,什么时候也移植进程序里试试

出10入0汤圆

发表于 2015-8-3 00:28:21 来自手机 | 显示全部楼层
不错,mark!!!

出0入0汤圆

发表于 2015-8-3 06:48:51 | 显示全部楼层
不错,标记一下,以后用得到

出0入0汤圆

发表于 2015-8-3 07:36:50 | 显示全部楼层
spiffs 这个不错

出0入0汤圆

发表于 2015-8-3 07:44:44 | 显示全部楼层
spiffs 这个不错

出0入0汤圆

发表于 2015-8-3 08:36:19 | 显示全部楼层
谢谢楼主分享。。。

出0入0汤圆

发表于 2015-8-3 08:43:02 | 显示全部楼层
不错不错。谢谢分享

出0入93汤圆

发表于 2015-8-3 08:55:58 | 显示全部楼层
这个对文件大小、文件数量、文件名长度有没有限制?

出0入0汤圆

发表于 2015-8-3 09:06:44 | 显示全部楼层
收藏了,

出0入0汤圆

发表于 2015-8-3 09:27:49 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2015-8-3 14:03:06 | 显示全部楼层
记号,好东西

出0入0汤圆

发表于 2015-8-3 16:33:51 | 显示全部楼层
收藏了,用在小系统上还是挺不错的

出0入0汤圆

发表于 2015-8-3 18:28:57 | 显示全部楼层
话说用FATFS也可以吧,有啥优势?

出0入0汤圆

 楼主| 发表于 2015-8-3 20:38:45 | 显示全部楼层
wdluo 发表于 2015-8-3 18:28
话说用FATFS也可以吧,有啥优势?

Spiffs is a file system intended for SPI NOR flash devices on embedded targets.
Spiffs is designed with following characteristics in mind:
- Small (embedded) targets, sparse RAM without heap
- Only big areas of data (blocks) can be erased
- An erase will reset all bits in block to ones
- Writing pulls one to zeroes
- Zeroes can only be pulled to ones by erase
- Wear leveling

出0入0汤圆

发表于 2015-8-3 20:42:02 | 显示全部楼层
谢谢了,我感觉以后肯定能用上,MARK~!~

出0入0汤圆

 楼主| 发表于 2015-8-3 20:44:40 | 显示全部楼层
SPIFFS支持的特性:
- Specifically designed for low ram usage
- Uses statically sized ram buffers, independent of number of files
- Posix-like api: open, close, read, write, seek, stat, etc
- It can be run on any NOR flash, not only SPI flash - theoretically also on
   embedded flash of an microprocessor
- Multiple spiffs configurations can be run on same target - and even on same
   SPI flash device
- Implements static wear leveling
- Built in file system consistency checks

SPIFFS不支持的特性:
- Presently, spiffs does not support directories. It produces a flat
   structure. Creating a file with path "tmp/myfile.txt" will create a file
   called "tmp/myfile.txt" instead of a "myfile.txt" under directory "tmp".
- It is not a realtime stack. One write operation might take much longer than
   another.
- Poor scalability. Spiffs is intended for small memory devices - the normal
   sizes for SPI flashes. Going beyond ~128MB is probably a bad idea. This is
   a side effect of the design goal to use as little ram as possible.
- Presently, it does not detect or handle bad blocks.

出0入0汤圆

发表于 2015-8-3 23:10:16 | 显示全部楼层
谢谢分享,用得着

出0入0汤圆

发表于 2015-8-4 23:22:43 | 显示全部楼层
楼主能不能简单的说明一下,刚准备学习下文件系统,谢谢啦

出0入0汤圆

发表于 2015-8-5 07:39:34 | 显示全部楼层
一个内存耗费很小的文件系统,他的写平衡能高级到哪里呢。。。我表示疑问
其实fat16完全可以做到最基本的写平衡,那就是用微软删除文件的做法,删除文件只改名文件,等到遍历完了整个文件系统可用块了才真正使用删除文件的块

出0入0汤圆

发表于 2015-8-5 08:47:50 | 显示全部楼层
谢谢分享,看一下,有用

出1000入0汤圆

发表于 2015-8-5 08:54:33 | 显示全部楼层
谢谢分享,下载学习了

出0入0汤圆

发表于 2015-8-5 09:07:25 | 显示全部楼层
学习了,谢谢分享~

出0入0汤圆

发表于 2015-9-19 16:33:41 | 显示全部楼层

好多警告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-9-20 22:02:43 来自手机 | 显示全部楼层
mark spiffs!

出0入0汤圆

发表于 2015-9-20 22:06:10 来自手机 | 显示全部楼层
fatfs  也可以的

出0入0汤圆

发表于 2015-9-20 22:10:48 来自手机 | 显示全部楼层
fatfs  也可以的

出0入0汤圆

发表于 2015-10-10 18:17:51 | 显示全部楼层
这个给力spiffs,mark,又发现新国内

出0入0汤圆

发表于 2015-10-12 19:44:33 | 显示全部楼层
多谢分享,不错

出0入0汤圆

发表于 2015-10-13 06:48:03 | 显示全部楼层
正好需要,研究下

出0入0汤圆

发表于 2015-10-14 22:52:03 | 显示全部楼层
LZ工程编译的警告可以用下图来消除

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-10-15 13:57:33 | 显示全部楼层
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢
  1. char WriteBuf[]={"Hi,Budy! if you get this Message......Congratulations!You have succeeded!!"};
  2. char WriteBuf1[]={"append! if you get this Message......Congratulations!You have append succeeded!!"};

  3. char ReadBuf[500];

  4. //????,???????,????
  5.         spiffs_file fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_CREAT | SPIFFS_TRUNC | SPIFFS_RDWR, 0);
  6.        
  7.           //???
  8.     if (SPIFFS_write(&SPIFlashFS, fd, WriteBuf, sizeof(WriteBuf)) < 0)
  9.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  10.     SPIFFS_close(&SPIFlashFS, fd);
  11.   
  12.                 //???
  13.     fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDONLY, 0);
  14.     if (SPIFFS_read(&SPIFlashFS, fd, ReadBuf, sizeof(ReadBuf)) < 0)
  15.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  16.     SPIFFS_close(&SPIFlashFS, fd);
  17.   
  18.                 //????????
  19.     printf("%s\n", ReadBuf);
  20.         /////////////////////////////////////
  21.         res = SPIFFS_stat(&SPIFlashFS, "my_file", &s);
  22.         printf("%d\n",s.size);
  23.         ////////////////////////////////////////////////////////////
  24.         fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDWR, 0);
  25.         ss = SPIFFS_lseek(&SPIFlashFS, fd, s.size, SPIFFS_SEEK_CUR);
  26.         printf("@@%d@@\n",ss);
  27.         if (SPIFFS_write(&SPIFlashFS, fd, WriteBuf1, sizeof(WriteBuf1)) < 0)
  28.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  29.     SPIFFS_close(&SPIFlashFS, fd);
  30.        
  31.         fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDONLY, 0);
  32.     if (SPIFFS_read(&SPIFlashFS, fd, ReadBuf, sizeof(ReadBuf)) < 0)
  33.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  34.     SPIFFS_close(&SPIFlashFS, fd);

  35.          printf("%s\n", ReadBuf);
复制代码

出0入0汤圆

发表于 2015-10-15 15:00:32 | 显示全部楼层
JJKwong 发表于 2015-10-15 13:57
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢

解决了,还是sizeof与printf的问题,改为strlen ok ,还是基础不够扎实

出0入0汤圆

发表于 2015-10-15 15:41:23 | 显示全部楼层
大家来讨论一下这几个函数怎么用的:
s32_t SPIFFS_gc_quick(spiffs *fs, u16_t max_free_pages);

s32_t SPIFFS_gc(spiffs *fs, u32_t size);

出0入0汤圆

 楼主| 发表于 2015-10-15 17:50:43 | 显示全部楼层
walle531 发表于 2015-10-14 22:52
LZ工程编译的警告可以用下图来消除


这样貌似也可以消除部分警告。。。。。。
如果有洁癖,可以把告警全部屏蔽掉。。。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-11-2 10:54:44 | 显示全部楼层
谢谢,资料不错,十分感谢

出0入0汤圆

发表于 2015-11-26 18:18:38 | 显示全部楼层
相当不错啊,已经开始用了,

出0入0汤圆

发表于 2015-11-30 16:58:53 | 显示全部楼层
请问如何获取剩余容量呢

出0入0汤圆

发表于 2015-11-30 22:37:22 | 显示全部楼层
好资料,收藏了!谢谢!

出0入0汤圆

发表于 2015-12-1 16:26:13 | 显示全部楼层
这个不错,谢谢

出0入0汤圆

发表于 2015-12-1 16:49:10 | 显示全部楼层
非常好用的资料 ,多谢分享!另外。。。。。buddy。。。。。。。。。。。

出0入0汤圆

发表于 2015-12-18 10:19:43 | 显示全部楼层
学习了,不错!!!

出0入0汤圆

发表于 2015-12-18 11:45:14 | 显示全部楼层
不错,多谢分享了

出0入0汤圆

发表于 2015-12-28 13:45:47 | 显示全部楼层
多谢分享spiffs

出0入0汤圆

发表于 2015-12-29 03:01:29 | 显示全部楼层
多谢分享,好好学习

出0入0汤圆

发表于 2015-12-29 08:01:00 | 显示全部楼层
谢谢楼主分享!!!

出0入0汤圆

发表于 2016-1-5 19:03:36 | 显示全部楼层
用楼主分享的程序移植到到板子上 写入文件时报错 (就用的楼主的例子)  write errno -10010
读出w25q64里的内容看到  地址0000 开始 有4字节信息 01 80 01 00,地址0x0200开始有信息 01 80 00 00 f8 0b ff ff ff ff 01 (然后就是文件名)m y _ f i l e 00 00 00 00 .....
地址0x0300开始有信息 01 00 00 00 fc (后面就是文件内容)Hi,Budy! if you get this Message......Congratulations!You have succeeded!!
照这个样子看好像是写入成功了,但是却总是返回错误信息 10010,而且执行下面读文件操作时就跳入 HardFault_Handler 中断死了
有大虾帮帮忙啊

出0入0汤圆

 楼主| 发表于 2016-1-5 19:10:12 | 显示全部楼层
richie550 发表于 2016-1-5 19:03
用楼主分享的程序移植到到板子上 写入文件时报错 (就用的楼主的例子)  write errno -10010
读出w25q64里 ...

不用文件系统,你的w25q64读写正常么?

出0入0汤圆

发表于 2016-1-5 19:43:32 | 显示全部楼层
测试过了,直接擦除读写整片都是正常的。
刚才追踪了一下 在  读文件操作死机 是执行到 spiffs_nucleus.c文件中的 spiffs_object_read函数
这一句时 data_pix = ((spiffs_page_ix*)((u8_t*)objix_hdr + sizeof(spiffs_page_object_ix_header)))[data_spix];  跳入HardFault_Handler死机的

出0入0汤圆

发表于 2016-1-6 11:07:44 | 显示全部楼层
richie550 发表于 2016-1-5 19:43
测试过了,直接擦除读写整片都是正常的。
刚才追踪了一下 在  读文件操作死机 是执行到 spiffs_nucleus.c文 ...

你有尝试擦出芯片吗? 我也遇到这个问题,然后  我执行SPI_Flash_Erase_Chip 就好了、

出0入0汤圆

发表于 2016-1-6 11:13:37 | 显示全部楼层
本帖最后由 vjcmain 于 2016-1-6 11:47 编辑
天马行空 发表于 2016-1-5 19:10
不用文件系统,你的w25q64读写正常么?


作者更新了。另外作者的另外一个项目好像也很好玩 STM32 HID keyboard, mouse and joysticks for arcade builds,       https://github.com/pellepl/arcadehid.git   
可惜我用GNU toolchain 进行编译。 不知道问题出在哪里 makefile 有报错提示,但最终编译通过了。下载进去USB无法正常枚举
这个大神写的的代码好犀利。给他发邮件系统退信了 ,联系不到作者。        

出0入0汤圆

发表于 2016-1-13 19:43:40 | 显示全部楼层
vjcmain 发表于 2016-1-6 11:07
你有尝试擦出芯片吗? 我也遇到这个问题,然后  我执行SPI_Flash_Erase_Chip 就好了、 ...

试过了,擦除了也不行

出0入0汤圆

发表于 2016-1-13 20:09:19 | 显示全部楼层
mark,需要的时候在来找,呵呵

出0入0汤圆

发表于 2016-1-13 21:50:15 | 显示全部楼层
顶一下,第一次见这个系统,学习一下

出0入0汤圆

发表于 2016-1-13 22:12:24 | 显示全部楼层
SPIFFS不支持坏块管理,可能用久了要出事。]

出0入0汤圆

发表于 2016-1-14 00:53:13 | 显示全部楼层
关注一下

出0入0汤圆

发表于 2016-3-2 22:24:06 | 显示全部楼层
在esp8266上用的有这个,正在想可不可以移植到stm32呢,结果一搜索发现楼主已经做了,这样省了不少事呢,谢了~

出0入0汤圆

发表于 2016-4-8 20:29:02 | 显示全部楼层
最近用了一下,不断的在文件后追加数据,最多只能追加次数大约15*254次,所以每次写入数据量太小的话,最终文件能保存的数据其实没有达到SPI芯片的总容量,就写不进去了,不知道有谁仔细分析过没有,不停的追加数据能达到最大值是什么

出0入0汤圆

发表于 2016-6-1 21:26:45 | 显示全部楼层
不错,标记一下,以后用得到

出0入0汤圆

发表于 2016-7-7 08:41:24 | 显示全部楼层
楼主你好,我移植后,上电就卡死在挂载文件系统哪一步了,W25Q64的驱动我试了没问题呀,请LZ指点一下

出0入0汤圆

发表于 2016-7-19 13:35:32 | 显示全部楼层
问下: 需要多少RAM才能跑这个

出0入0汤圆

发表于 2016-7-19 14:09:40 来自手机 | 显示全部楼层
mark      

出0入0汤圆

发表于 2016-8-14 14:42:14 | 显示全部楼层
顶起,不错

出0入0汤圆

发表于 2016-8-17 09:12:56 | 显示全部楼层
经过测试在连续写入文件数据的时候使用SPIFFS_lseek实现接着上层的文件末尾继续写入 无法实现,不晓得楼主是否实现了此功能?

出0入0汤圆

发表于 2016-8-17 09:27:16 | 显示全部楼层
JJKwong 发表于 2015-10-15 13:57
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢

兄弟  spiffs在文件追加数据内容 怎么实现的  我试了就是不行

出0入0汤圆

发表于 2016-8-17 10:11:03 | 显示全部楼层
JJKwong 发表于 2015-10-15 13:57
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢

兄弟 你好  我现在正在研究SPIFFS文件系统 刚好也需要在文件系统分的文件内容后面连续的追加数据 但始终就是用SPIFFS_lseek函数实现不了,麻烦你指点下,谢谢!

出0入0汤圆

发表于 2016-8-17 10:21:55 | 显示全部楼层
SPIFFS文件系统STM32移植工程分享  mark

出0入0汤圆

发表于 2016-8-17 11:00:52 | 显示全部楼层
wbq_88 发表于 2016-8-17 09:27
兄弟  spiffs在文件追加数据内容 怎么实现的  我试了就是不行

JJKwong 发表于 2015-10-15 13:57
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢

解决了,还是sizeof与printf的问题,改为strlen ok ,还是基础不够扎实

看我上面的例子,我之前是因为sizeof 与 strlen的问题

出0入0汤圆

发表于 2016-8-17 11:33:18 | 显示全部楼层
JJKwong 发表于 2016-8-17 11:00
JJKwong 发表于 2015-10-15 13:57
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢

//打开文件,如果文件不存在,自动创建
    fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_CREAT | SPIFFS_TRUNC | SPIFFS_RDWR, 0);
    SPIFFS_close(&SPIFlashFS, fd);
    //写文件
    res = SPIFFS_stat(&SPIFlashFS, "my_file", &s);
    DBGOUT("s.size = %d\r\n",s.size);
    fd = SPIFFS_open(&SPIFlashFS, "my_file",  SPIFFS_RDWR, 0);
    SPIFFS_lseek(&SPIFlashFS, fd,s.size,SPIFFS_SEEK_CUR);
    if (SPIFFS_write(&SPIFlashFS, fd, WriteBuf, sizeof(WriteBuf)) < 0)
    DBGOUT("errno %i\r\n", SPIFFS_errno(&SPIFlashFS));
    SPIFFS_close(&SPIFlashFS, fd);

    //读文件
    fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDWR, 0);
    if (SPIFFS_read(&SPIFlashFS, fd, ReadBuf, sizeof(ReadBuf)) < 0)
    DBGOUT("errno %i\n", SPIFFS_errno(&SPIFlashFS));
    SPIFFS_close(&SPIFlashFS, fd);
    //打印输出文件内容
    DBGOUT("%s\n", ReadBuf);


这是我写的,可追加就是不行

出0入0汤圆

发表于 2016-8-17 11:34:12 | 显示全部楼层
JJKwong 发表于 2016-8-17 11:00
JJKwong 发表于 2015-10-15 13:57
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢

//打开文件,如果文件不存在,自动创建
    fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_CREAT | SPIFFS_TRUNC | SPIFFS_RDWR, 0);
    SPIFFS_close(&SPIFlashFS, fd);
    //写文件
    res = SPIFFS_stat(&SPIFlashFS, "my_file", &s);
    DBGOUT("s.size = %d\r\n",s.size);
    fd = SPIFFS_open(&SPIFlashFS, "my_file",  SPIFFS_RDWR, 0);
    SPIFFS_lseek(&SPIFlashFS, fd,s.size,SPIFFS_SEEK_CUR);
    if (SPIFFS_write(&SPIFlashFS, fd, WriteBuf, sizeof(WriteBuf)) < 0)
    DBGOUT("errno %i\r\n", SPIFFS_errno(&SPIFlashFS));
    SPIFFS_close(&SPIFlashFS, fd);

    //读文件
    fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDWR, 0);
    if (SPIFFS_read(&SPIFlashFS, fd, ReadBuf, sizeof(ReadBuf)) < 0)
    DBGOUT("errno %i\n", SPIFFS_errno(&SPIFlashFS));
    SPIFFS_close(&SPIFlashFS, fd);
    //打印输出文件内容
    DBGOUT("%s\n", ReadBuf);


这是我写的,可追加就是不行

出0入0汤圆

发表于 2016-8-17 21:58:04 | 显示全部楼层
JJKwong 发表于 2016-8-17 11:00
JJKwong 发表于 2015-10-15 13:57
LZ怎么样在文件内容后面追加数据内容的啊,怎么我这样总是不行的呢

你是把所有的sizof的地方都改为strlen?

出0入0汤圆

发表于 2016-8-17 22:55:55 | 显示全部楼层
mark, 正需要

出0入0汤圆

发表于 2016-8-18 09:26:11 | 显示全部楼层
wbq_88 发表于 2016-8-17 21:58
你是把所有的sizof的地方都改为strlen?
  1. //????,???????,????
  2.         spiffs_file fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_CREAT | SPIFFS_TRUNC | SPIFFS_RDWR, 0);
  3.         printf("%d,%d  ",sizeof(WriteBuf),strlen(WriteBuf));
  4.           //???
  5.     if (SPIFFS_write(&SPIFlashFS, fd, WriteBuf, strlen(WriteBuf)) < 0)
  6.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  7.         if (SPIFFS_write(&SPIFlashFS, fd, WriteBuf1, strlen(WriteBuf1)) < 0)
  8.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  9.     SPIFFS_close(&SPIFlashFS, fd);
  10.   
  11.                 //???
  12.     fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDONLY, 0);
  13.     if (SPIFFS_read(&SPIFlashFS, fd, ReadBuf, sizeof(ReadBuf)) < 0)
  14.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  15.         //SPIFFS_fstat查询文件大小要在open情况下
  16.         res = SPIFFS_fstat(&SPIFlashFS, fd, &s);
  17.         printf("%d\n",s.size);
  18.     SPIFFS_close(&SPIFlashFS, fd);
  19.   
  20.                 //????????
  21.     printf("%s\n", ReadBuf);

  22.         /////////////////////////////////////
  23.         res = SPIFFS_stat(&SPIFlashFS, "my_file", &s);
  24.         printf("%d\n",s.size);
  25.         ////////////////////////////////////////////////////////////

  26.         fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDWR, 0);
  27.         SPIFFS_lseek(&SPIFlashFS, fd, s.size, SPIFFS_SEEK_CUR);
  28.         if (SPIFFS_write(&SPIFlashFS, fd, WriteBuf2, strlen(WriteBuf2)) < 0)
  29.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  30.     SPIFFS_close(&SPIFlashFS, fd);
  31.        
  32.         fd = SPIFFS_open(&SPIFlashFS, "my_file", SPIFFS_RDONLY, 0);
  33.     if (SPIFFS_read(&SPIFlashFS, fd, ReadBuf, sizeof(ReadBuf)) < 0)
  34.                 printf("errno %i\n", SPIFFS_errno(&SPIFlashFS));
  35.     SPIFFS_close(&SPIFlashFS, fd);

  36.          printf("%s\n", ReadBuf);
复制代码

出0入0汤圆

发表于 2016-8-18 16:50:48 | 显示全部楼层

谢谢楼主  追加模式已解决  谢谢!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-8-31 15:59:04 | 显示全部楼层
谢谢分享。赞赞

出0入0汤圆

发表于 2016-8-31 22:05:18 来自手机 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2016-9-2 15:18:01 | 显示全部楼层
这个代码看起来很纠结

出0入0汤圆

发表于 2016-9-2 18:22:54 | 显示全部楼层
不错不知道读取速度怎样

出0入0汤圆

发表于 2016-9-14 17:17:27 | 显示全部楼层
这占用多大的内存空间?

出0入0汤圆

发表于 2016-10-3 14:32:56 | 显示全部楼层
本帖最后由 yiminglei_2 于 2016-10-3 20:25 编辑

请问一下,哪个函数是截断文件的呢?其它系统一般是ftruncate()这个接口。

还有,如何新建一个特定大小的文件?

谢谢!

出0入0汤圆

发表于 2016-10-7 12:37:50 | 显示全部楼层
谢谢!标记一下,以后用得到!

出0入0汤圆

发表于 2016-10-7 13:19:04 | 显示全部楼层
学习一下,正在查找相关资料。

出0入0汤圆

发表于 2016-10-7 13:43:28 | 显示全部楼层
谢谢分享谢谢

出30入0汤圆

发表于 2016-10-11 13:47:51 | 显示全部楼层
谢谢楼主,移植到我的工程上看看。

出0入0汤圆

发表于 2016-11-4 08:43:57 | 显示全部楼层
很不错啊,学习一下!

出0入0汤圆

发表于 2016-11-11 11:19:59 | 显示全部楼层
SPIFFS文件系统,标记下。

出0入0汤圆

发表于 2016-12-3 16:59:30 | 显示全部楼层
好用,FATFS管理W25QXX的话写数据占用时间比较长,用这个速度快一些。多谢楼主分享

出0入0汤圆

发表于 2016-12-7 16:06:12 | 显示全部楼层
qwert1213131 发表于 2015-11-30 16:58
请问如何获取剩余容量呢

你好,找到查询剩余空间的函数了吗
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 09:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表