mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Before, the littlefs relied on the underlying block device to report corruption that occurs when writing data to disk. This requirement is easy to miss or implement incorrectly, since the error detection is only required when a block becomes corrupted, which is very unlikely to happen until late in the block device's lifetime. The littlefs can detect corruption itself by reading back written data. This requires a bit of care to reuse the available buffers, and may rely on checksums to avoid additional RAM requirements. This does have a runtime penalty with the extra read operations, but should make the littlefs much more robust to different implementations.
		
			
				
	
	
		
			46 lines
		
	
	
		
			972 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			972 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * lfs utility functions
 | |
|  *
 | |
|  * Copyright (c) 2017 Christopher Haster
 | |
|  * Distributed under the MIT license
 | |
|  */
 | |
| #ifndef LFS_UTIL_H
 | |
| #define LFS_UTIL_H
 | |
| 
 | |
| #include <stdlib.h>
 | |
| #include <stdint.h>
 | |
| #include <stdio.h>
 | |
| 
 | |
| 
 | |
| // Builtin functions
 | |
| static inline uint32_t lfs_max(uint32_t a, uint32_t b) {
 | |
|     return (a > b) ? a : b;
 | |
| }
 | |
| 
 | |
| static inline uint32_t lfs_min(uint32_t a, uint32_t b) {
 | |
|     return (a < b) ? a : b;
 | |
| }
 | |
| 
 | |
| static inline uint32_t lfs_ctz(uint32_t a) {
 | |
|     return __builtin_ctz(a);
 | |
| }
 | |
| 
 | |
| static inline uint32_t lfs_npw2(uint32_t a) {
 | |
|     return 32 - __builtin_clz(a-1);
 | |
| }
 | |
| 
 | |
| static inline int lfs_scmp(uint32_t a, uint32_t b) {
 | |
|     return (int)(unsigned)(a - b);
 | |
| }
 | |
| 
 | |
| void lfs_crc(uint32_t *crc, const void *buffer, size_t size);
 | |
| 
 | |
| 
 | |
| // Logging functions
 | |
| #define LFS_DEBUG(fmt, ...) printf("lfs debug: " fmt "\n", __VA_ARGS__)
 | |
| #define LFS_WARN(fmt, ...)  printf("lfs warn: " fmt "\n", __VA_ARGS__)
 | |
| #define LFS_ERROR(fmt, ...) printf("lfs error: " fmt "\n", __VA_ARGS__)
 | |
| 
 | |
| 
 | |
| #endif
 |