Home
last modified time | relevance | path

Searched refs:a (Results 1 – 24 of 24) sorted by relevance

/littlefs-3.7.0-3.6.0/
Dlfs_util.h108 static inline uint32_t lfs_max(uint32_t a, uint32_t b) { in lfs_max() argument
109 return (a > b) ? a : b; in lfs_max()
112 static inline uint32_t lfs_min(uint32_t a, uint32_t b) { in lfs_min() argument
113 return (a < b) ? a : b; in lfs_min()
117 static inline uint32_t lfs_aligndown(uint32_t a, uint32_t alignment) { in lfs_aligndown() argument
118 return a - (a % alignment); in lfs_aligndown()
121 static inline uint32_t lfs_alignup(uint32_t a, uint32_t alignment) { in lfs_alignup() argument
122 return lfs_aligndown(a + alignment-1, alignment); in lfs_alignup()
126 static inline uint32_t lfs_npw2(uint32_t a) { in lfs_npw2() argument
128 return 32 - __builtin_clz(a-1); in lfs_npw2()
[all …]
DDESIGN.md15 in the context of microcontrollers. The question was: How would you build a
40 reactive, with no concept of a shutdown routine. This presents a big challenge
42 leave a device unrecoverable.
47 If a power loss corrupts any persistent data structures, this can cause the
49 recover from a power loss during any write operation.
51 1. **Wear leveling** - Writing to flash is destructive. If a filesystem
54 used to store frequently updated metadata and cause a device's early death.
62 were possible. For RAM we have a stronger requirement, all RAM usage is
64 size or number of files. This creates a unique challenge as even presumably
72 power-loss resilience and wear leveling, we can narrow these down to a handful
[all …]
DSPEC.md20 - littlefs is a block-based filesystem. The disk is divided into an array of
24 representing a null block address.
27 block size), littlefs also uses a program block size and read block size.
35 Metadata pairs form the backbone of littlefs and provide a system for
36 distributed atomic updates. Even the superblock is stored in a metadata pair.
38 As their name suggests, a metadata pair is stored in two blocks, with one block
39 providing a backup during erase cycles in case power is lost. These two blocks
40 are not necessarily sequential and may be anywhere on disk, so a "pointer" to a
43 On top of this, each metadata block behaves as an appendable log, containing a
49 The high-level layout of a metadata block is fairly simple:
[all …]
DREADME.md22 **Bounded RAM/ROM** - littlefs is designed to work with a small amount of
30 Here's a simple example that updates a file named `boot_count` every time
97 littlefs takes in a configuration structure that defines how the filesystem
105 simultaneously. With the `lfs_t` and configuration struct, a user can
106 format a block device or mount the filesystem.
108 Once mounted, the littlefs provides a full set of POSIX-like file and
121 All littlefs calls have the potential to return a negative error code. The
126 user may return a `LFS_ERR_CORRUPT` error if the implementation already can
139 At a high level, littlefs is a block based filesystem that uses small logs to
142 In littlefs, these ingredients form a sort of two-layered cake, with the small
[all …]
DMakefile7 TARGET ?= $(BUILDDIR)/liblfs.a
33 TEST_A := $(TESTS:%.toml=$(BUILDDIR)/%.t.a.c) \
34 $(TEST_SRC:%.c=$(BUILDDIR)/%.t.a.c)
35 TEST_C := $(TEST_A:%.t.a.c=%.t.c)
50 BENCH_A := $(BENCHES:%.toml=$(BUILDDIR)/%.b.a.c) \
51 $(BENCH_SRC:%.c=$(BUILDDIR)/%.b.a.c)
52 BENCH_C := $(BENCH_A:%.b.a.c=%.b.c)
475 $(BUILDDIR)/liblfs.a: $(OBJ)
528 $(BUILDDIR)/%.c: %.a.c
531 $(BUILDDIR)/%.c: $(BUILDDIR)/%.a.c
[all …]
D.gitignore4 *.a
13 liblfs.a
Dlfs.c394 static inline void lfs_gstate_xor(lfs_gstate_t *a, const lfs_gstate_t *b) { in lfs_gstate_xor() argument
396 ((uint32_t*)a)[i] ^= ((const uint32_t*)b)[i]; in lfs_gstate_xor()
400 static inline bool lfs_gstate_iszero(const lfs_gstate_t *a) { in lfs_gstate_iszero() argument
402 if (((uint32_t*)a)[i] != 0) { in lfs_gstate_iszero()
410 static inline bool lfs_gstate_hasorphans(const lfs_gstate_t *a) { in lfs_gstate_hasorphans() argument
411 return lfs_tag_size(a->tag); in lfs_gstate_hasorphans()
414 static inline uint8_t lfs_gstate_getorphans(const lfs_gstate_t *a) { in lfs_gstate_getorphans() argument
415 return lfs_tag_size(a->tag) & 0x1ff; in lfs_gstate_getorphans()
418 static inline bool lfs_gstate_hasmove(const lfs_gstate_t *a) { in lfs_gstate_hasmove() argument
419 return lfs_tag_type1(a->tag); in lfs_gstate_hasmove()
[all …]
D.gitattributes1 # GitHub really wants to mark littlefs as a python project, telling it to
/littlefs-3.7.0-3.6.0/tests/
Dtest_move.toml6 lfs_mkdir(&lfs, "a") => 0;
11 lfs_file_open(&lfs, &file, "a/hello", LFS_O_CREAT | LFS_O_WRONLY) => 0;
19 lfs_rename(&lfs, "a/hello", "c/hello") => 0;
25 lfs_dir_open(&lfs, &dir, "a") => 0;
48 lfs_file_open(&lfs, &file, "a/hello", LFS_O_RDONLY) => LFS_ERR_NOENT;
87 lfs_mkdir(&lfs, "a") => 0;
92 lfs_file_open(&lfs, &file, "a/hello", LFS_O_CREAT | LFS_O_WRONLY) => 0;
100 lfs_rename(&lfs, "a/hello", "c/hello") => 0;
107 lfs_dir_open(&lfs, &dir, "a") => 0;
123 lfs_dir_open(&lfs, &dir, "a") => 0;
[all …]
Dtest_exhaustion.toml1 # test running a filesystem to exhaustion
36 char c = 'a' + (TEST_PRNG(&prng) % 26);
65 char c = 'a' + (TEST_PRNG(&prng) % 26);
93 # test running a filesystem to exhaustion
126 char c = 'a' + (TEST_PRNG(&prng) % 26);
155 char c = 'a' + (TEST_PRNG(&prng) % 26);
183 # These are a sort of high-level litmus test for wear-leveling. One definition
184 # of wear-leveling is that increasing a block device's space translates directly
188 # wear-level test running a filesystem to exhaustion
225 char c = 'a' + (TEST_PRNG(&prng) % 26);
[all …]
Dtest_evil.toml37 // make a dir
61 // test that accessing our bad dir fails, note there's a number
88 // make a file
113 // test that accessing our bad file fails, note there's a number
140 // make a file
178 // test that accessing our bad file fails, note there's a number
Dtest_compat.toml3 # Note, these tests are a bit special. They expect to be linked against two
18 # there may be a better way to do this, but oh well, explicit aliases works
61 # test we can mount in a new version
91 # test we can read dirs in a new version
149 # test we can read files in a new version
239 # test we can read files in dirs in a new version
356 # test we can write dirs in a new version
421 # test we can write files in a new version
543 # test we can write files in dirs in a new version
1295 # test that we fail to mount after a major version bump
[all …]
Dtest_alloc.toml2 # note for these to work there are a number constraints on the device geometry
385 # what if we have a bad block during an allocation scan?
410 // now fill all but a couple of blocks of the filesystem with data
426 // but mark the head of our file as a "bad block", this is force our
536 // shorten file to try a second chained dir
566 // create one block hole for half a directory
712 // rewrite one file with a hole of one block
725 // try to allocate a directory, should fail!
Dtest_powerloss.toml1 # There are already a number of tests that test general operations under
5 # only a revision count
127 // imitate a partial prog, value should not matter, if littlefs
Dtest_relocations.toml19 // make a child dir to use in bounded space
97 // make a child dir to use in bounded space
170 # almost every tree operation needs a relocation
Dtest_superblocks.toml17 # mount/unmount from interpretting a previous superblock block_count
386 // same size is a noop
430 // same size is a noop
Dtest_orphans.toml16 // makes a lot of assumptions about the remove operation.
45 // this mkdir should both create a dir and deorphan, so size
Dtest_bd.toml4 # Note we use 251, a prime, in places to avoid aliasing powers of 2.
/littlefs-3.7.0-3.6.0/scripts/
Dcov.py112 def __new__(cls, a=0, b=None): argument
113 if isinstance(a, Frac) and b is None:
114 return a
115 if isinstance(a, str) and b is None:
116 a, b = a.split('/', 1)
118 b = a
119 return super().__new__(cls, Int(a), Int(b))
122 return '%s/%s' % (self.a, self.b)
125 return float(self.a)
129 t = self.a.x/self.b.x if self.b.x else 1.0
[all …]
Dsummary.py169 def __new__(cls, a=0, b=None): argument
170 if isinstance(a, Frac) and b is None:
171 return a
172 if isinstance(a, str) and b is None:
173 a, b = a.split('/', 1)
175 b = a
176 return super().__new__(cls, Int(a), Int(b))
179 return '%s/%s' % (self.a, self.b)
182 return float(self.a)
186 t = self.a.x/self.b.x if self.b.x else 1.0
[all …]
Dplotmpl.py1215 next(a for a in subparser._actions
1216 if '--output' in a.option_strings).required = False
1217 next(a for a in subparser._actions
1218 if '--width' in a.option_strings).type = float
1219 next(a for a in subparser._actions
1220 if '--height' in a.option_strings).type = float
Dreadtree.py59 gstate = bytes((a or 0) ^ (b or 0)
60 for a,b in it.zip_longest(gstate, ngstate.data))
Dplot.py1534 next(a for a in subparser._actions
1535 if '--width' in a.option_strings).type = float
1536 next(a for a in subparser._actions
1537 if '--height' in a.option_strings).type = float
Dperf.py503 abs(a_+delta - a)
505 for a, _ in syms[s])