1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-07 16:23:38 +03:00

32 Commits

Author SHA1 Message Date
Earle F. Philhower, III
83166f948b
Deprecate SPIFFS, move examples to LittleFS (#7263)
* Deprecate SPIFFS, move examples to LittleFS

SPIFFS has been a great filesystem, but it has significant problems in
many cases (and it's also pretty slow).  Development seems to have
slowed/stopped on the upstream version, and we're not able to provide
support or fix the known issues with it as-is.

Deprecate SPIFFS variable.

Update all examples to use LittleFS instead of SPIFFS.

Also, minor cleanup on very old examples which has obsolete delays
waiting for the Serial port to come up, or which were stuck at 9600 baud
because of their ancient AVR heritage.

Fixes #7095

* Remove leftover debug code

* Clean up comments in some examples

* Update documentation on SPIFFS deprecation

* Fix host tests to avoid deprecation warnings

* Fix cut-n-paste error

* Restore SpeedTest.ino, adjust to allow custom FSes

Co-authored-by: Develo <deveyes@gmail.com>
2020-05-04 14:22:50 -04:00
david gauchard
6f7eb2828a Make SPIFFS and LittleFS stay out of link when not needed (#6699)
* define two weak functions defaulting to no-op
redefine them to do something useful when either spiffs or littlefs are used

* noop

* single entry point for closing FSes

* rename functions, override when instanciated, add link to explanation

* spiffs: call end on destructor
2019-11-06 21:37:52 -03:00
Earle F. Philhower, III
418b00f7c0 Re-add deprecated _SPIFFS_xxx linker symbols (#6543)
In order to give user libs a change to update to the new symbols, re-add
the _SPIFFS_XX symbols to the linker file with a comment that they are
deprecated.

Also add back spiffs_hal_xxx functions, also marked as deprecated.

Fixes #6542
2019-09-26 21:28:07 +02:00
Earle F. Philhower, III
a389a995fb Add LittleFS as an optional filesystem, API compatible w/SPIFFS (but not on-flash-format compatible) (#5511)
* Add LittleFS as internal flash filesystem

Adds a LittleFS object which uses the ARMmbed littlefs embedded filesystem,
https://github.com/ARMmbed/littlefs, to enable a new filesystem for onboard
flash utilizing the exact same API as the existing SPIFFS filesystem.

LittleFS is built for low memory systems that are subject to random power
losses, is actively supported by the ARMmbed community, supports directories,
and seems to be much faster in the large-ish read-mostly applications I use.

LittleFS, however, has a larger minimum file allocation unit and does not do
static wear levelling.  This means that for systems that need many little
files (<4K), have small SPIFFS areas (64K), or which have a large static
set of files covering the majority of flash coupled with a frequently
updated set of other files, it may not perform as well.

Simply replace SPIFFS.begin() with LittleFS.begin() in your sketch,
use LittleFS.open in place of SPIFFS.open to open files, and everything
else just works thanks to the magic of @igrr's File base class.

**LITTLEFS FLASH LAYOUT IS INCOMPATIBLE WITH SPIFFS**
Since it is a completely different filesystem, you will need to reformat
your flash (and lose any data therein) to use it. Tools to build the
flash filesystem and upload are at
https://github.com/earlephilhower/arduino-esp8266littlefs-plugin and
https://github.com/earlephilhower/mklittlefs/ .  The mklittlefs tool
is installed as part of the Arduino platform installation, automatically.

The included example shows a contrived read-mostly example and
demonstrates how the same calls work on either SPIFFS.* or LittleFS.*
Host tests are also included as part of CI.

Directories are fully supported in LittleFS. This means that LittleFS
will have a slight difference vs. SPIFFS when you use
LittleFS.openDir()/Dir.next().  On SPIFFS dir.next()
will return all filesystem entries, including ones in "subdirs"
(because in SPIFFS there are no subdirs and "/" is the same as any
other character in a filename).

On LittleFS, dir.next() will only return entries in the directory
specified, not subdirs.  So to list files in "/subdir/..." you need
to actually openDir("/subdir") and use Dir.next() to parse through
just those elements.  The returned filenames also only have the
filename returned, not full paths.  So on a FS with "/a/1", "/a/2"
when you do openDir("/a"); dir.next().getName(); you get "1" and "2"
and not "/a/1" and "/a/2" like in SPIFFS.  This is consistent with
POSIX ideas about reading directories and more natural for a FS.

Most code will not be affected by this, but if you depend on
openDir/Dir.next() you need to be aware of it.

Corresponding ::mkdir, ::rmdir, ::isDirectory, ::isFile,
::openNextFile, and ::rewind methods added to Filesystem objects.
Documentation has been updated with this and other LittleFS information.

Subdirectories are made silently when they do not exist when you
try and create a file in a subdir.  They are silently removed when
the last file in them is deleted.  This is consistent with what
SPIFFS does but is obviously not normal POSIX behavior.  Since there
has never been a "FS.mkdir()" method this is the only way to be
compatible with legacy SPIFFS code.

SPIFFS code has been refactored to pull out common flash_hal_* ops
and placed in its own namespace, like LittleFS.

* Fix up merge blank line issue

* Merge in the FSConfig changs from SDFS PR

Enable setConfig for LittleFS as well plys merge the SPIFFS changes
done in the SDFS PR.

* Fix merge errors

* Update to use v2-alpha branch

The V2-alpha branch supports small file optimizations which can help
increase the utilization of flash when small files are prevalent.
It also adds support for metadata, which means we can start adding
things like file creation times, if desired (not yet).

* V2 of littlefs is now in upstream/master

* Update test to support non-creation-ordered files

In a directory, the order in which "readNextFile()" will return a name
is undefined.  SPIFFS may return it in order, but LittleFS does not as
of V2.  Update the test to look for files by name when doing
readNextFile() testing.

* Fix LittleFS.truncate implementation

* Fix SDFS tests

SDFS, SPIFFS, and LittleFS now all share the same common set of tests,
greatly increasing the SDFS test coverage.

* Update to point to mklittlefs v2

Upgrade mklittlefs to V2 format support

* Remove extra FS::write(const char *s) method

This was removed in #5861 and erroneously re-introduced here.

* Minimize spurious differences from master

* Dramatically reduce memory usage

Reduce the program and read chunk sizes which impacts performance
minimally but reduces per-file RAM usage of 16KB to <1KB.

* Add @d-a-v's host emulation for LittleFS

* Fix SW Serial library version

* Fix free space reporting

Thanks to @TD-er for discovering the issue

* Update littlefs to latest upstream

* Remove sdfat version included by accident

* Update SDFAT to include MOCK changes required

* Update to include SD.h test of file append
2019-05-25 09:53:24 +02:00
Allman-astyler
eea9999dc5 Revert "Allman now (#6080)" (#6090)
This reverts commit 98125f88605cd7e46e9be4e1b3ad0600dd5d2b51.
2019-05-14 00:09:54 +02:00
Allman-astyler
98125f8860 Allman now (#6080)
* switch restyle script for CI

* remove confirmation

* restyle with allman
2019-05-13 16:41:34 +02:00
david gauchard
8b3f4966e9
fix SPIFFS when not enabled in build options (#5249) 2018-12-06 22:55:05 +01:00
david gauchard
74ca42f829 Sketch emulation on host (#5342)
* WIP compile examples on host with 'make examples'

* WIP bufferize tcp input

* WIP Makefile

* WIP network to rework, tcp/udp to factorize, udp addresses broken

* minor changes to the core

* WIP basic udp working

* WIP mdns

* WIP mcast receiving, not sending

* WIP mdns OK

* beta version

* SSL + doc

* update travis host test command

* licenses

* typo

* doc: arduino builder is not around: declare functions before calling them

* fix with latest SSL PR, compile in 32 bits mode

* fix make clean

* make -m32 optional

* 32bits compiler ability tester

* WIP

* WIP (fix 1 vtable error, still another one to hunt with using spiffs)

* example astyle

* fix os_printf_plus

* load / save mock spiffs

* fix style

* fix using spiffs/mock

* don't mess ram

* update doc

* remove leftover

* optimization -Os except for CI, rename ARCH32 to FORCE32

* revert useless cast (not even compiled)

* remove unused function

* use proper type for pointer arithmetics

* makefile: sketch object and cpp file moved to bin/ directories
easier to clean, and IDE don't like them

* changes for review

* make use of %zd

* less verbose makefile by default (option)

* update readme
2018-11-20 18:51:45 -02:00
Clemens Kirchgatterer
18297458be allows global object instances be switch off with defines (#2344) 2016-08-01 11:21:50 +08:00
Tijn Kooijmans
3b81557810 added macro for maximum open SPIFFS files, settings it to 1 saves about 1k heap. (#2167) 2016-06-20 12:09:21 +08:00
Ivan Grokhotkov
b9dfe01903 Fix SPIFFS.openDir("") (#2143)
* Update spiffs_api.cpp

Fixes a bug where un-prefixed files are irretrievable with openDir(""). Described: https://github.com/esp8266/Arduino/issues/1818.

* Update FS test cases
2016-06-14 07:15:55 +08:00
Ivan Grokhotkov
1f32b7f66e Clean up core files
- remove ICACHE_FLASH_ATTR
- remove unneeded SDK includes
- split spiffs_api into .h and .cpp
2016-03-03 02:13:22 +03:00
andig
1d5d1c18c6 Change %i to %d for ets_printf compatibility 2016-02-02 09:26:27 +01:00
Ivan Grokhotkov
66a88ac8d2 Fix bad DEBUGV argument (thanks @g3gg0) 2015-12-23 10:11:40 +03:00
Ivan Grokhotkov
cda14204fe Fix SPIFFS path length check, add notes about FSInfo structure (#1273) 2015-12-22 11:52:50 +03:00
Ivan Grokhotkov
e7024fb5b4 SPIFFS: check if path length is valid (#1089) 2015-12-10 23:25:54 +03:00
Ivan Grokhotkov
f7bbea407e Fix failure when trying to open empty file (#1126) 2015-12-05 16:29:37 +03:00
Ivan Grokhotkov
d0a944e417 Refactoring of FS::info (#779) 2015-11-13 13:23:16 +03:00
Ivan Grokhotkov
219cb19ece Update SPIFFS wrapper for 0.3.3 2015-10-28 16:45:08 +03:00
Ivan Grokhotkov
f328e66fd7 Add 512k (no SPIFFS) build option (#862) 2015-10-25 21:11:45 +03:00
luc
320a747890 Add SPIFFS wrapper for info function
this allow to display total space and used space on SPIFFS
2015-10-22 11:22:32 +08:00
Ivan Grokhotkov
c8b12fd72c Implement SPIFFS.exists 2015-09-14 12:46:47 +03:00
Ivan Grokhotkov
f4bd97e8ee File system: fix SeekEnd behaviour, fix size() not being updated after write() 2015-09-09 14:07:00 +03:00
Ivan Grokhotkov
cd9791eebe Check file path when doing SPIFFS_readdir (#746)
SPIFFS is actually a flat file system, so opendir/readdir always iterate over all files. This adds explicit check that file name returned after readdir starts with the requested pattern.
2015-09-09 01:46:40 +03:00
Ivan Grokhotkov
041f971a8b Add FS::format (#702) 2015-08-31 10:26:04 +03:00
Ivan Grokhotkov
98423fa79d Fix FS size and add type size checks 2015-08-16 14:00:35 +03:00
Ivan Grokhotkov
c363b2d4f6 Update SPIFFS to 0.2-64-g15e5618
fix some exceptions due to unaligned memory access
remove leftover changes from NodeMCU (SPIFFS_eof and SPIFFS_ftell)
2015-08-14 01:01:47 +03:00
Martin Ayotte
568c48b065 add fileSize() method to Dir object 2015-08-12 22:12:22 -04:00
Ivan Grokhotkov
5cbaa57af9 Resolve naming conflicts between FS and SD library 2015-08-05 08:36:43 -04:00
Ivan Grokhotkov
b5d9db91aa Filesystem: fix File::available, add File::name 2015-08-05 07:41:12 -04:00
Ivan Grokhotkov
4aa8e1b8d5 FileSystem: interface changes and some additions
- rename mount to begin to be more in line with other libraries
- add rename and remove methods
- remove freestanding functions (mount,open,openDir) from public API until that part is ready
- fix resource leak in SPIFFSDirImpl
2015-07-30 13:44:50 +03:00
Ivan Grokhotkov
bbd8c9b411 FS wrapper 2015-07-28 15:23:11 +03:00