XFusion API v1.3.0
载入中...
搜索中...
未找到
test_base.c
浏览该文件的文档.
1
32/* ==================== [Includes] ========================================== */
33
34#include "xf_utils.h"
35#include "xf_osal.h"
36#include "xf_vfs.h"
37#include "xf_vfs_littlefs.h"
38
39/* ==================== [Defines] =========================================== */
40
41#define TAG "test_base"
42
43/* ==================== [Typedefs] ========================================== */
44
45/* ==================== [Static Prototypes] ================================= */
46
47/* ==================== [Static Variables] ================================== */
48
49/* ==================== [Macros] ============================================ */
50
51/* ==================== [Global Functions] ================================== */
52
53void test_base(void)
54{
55 /*
56 注册你想使用的分区,
57 本例中使用平台注册的默认分区(自动初始化中注册),
58 因此可以不用注册。
59 */
60
61 /* 初始化 xf_fal */
63
64 XF_LOGI(TAG, "Initializing LittleFS");
65
66 /* 配置 xf_vfs_littlefs 配置 */
67 xf_vfs_littlefs_conf_t conf = {
68 .base_path = "/littlefs",
69 .partition_label = XF_FAL_DEFAULT_PARTITION_NAME,
70 .format_if_mount_failed = true,
71 .dont_mount = false,
72 };
73 /*
74 使用上面定义的设置来初始化和挂载 LittleFS 文件系统。
75 注意:xf_vfs_littlefs_register 是一个一体化的便利函数。
76 */
77 xf_err_t ret = xf_vfs_littlefs_register(&conf);
78 if (ret != XF_OK) {
79 if (ret == XF_FAIL) {
80 XF_LOGE(TAG, "Failed to mount or format filesystem");
81 } else if (ret == XF_ERR_NOT_FOUND) {
82 XF_LOGE(TAG, "Failed to find LittleFS partition");
83 } else {
84 XF_LOGE(TAG, "Failed to initialize LittleFS (%s)", xf_err_to_name(ret));
85 }
86 return;
87 }
88
89 size_t total = 0, used = 0;
90 ret = xf_littlefs_info(conf.partition_label, &total, &used);
91 if (ret != XF_OK) {
92 XF_LOGE(TAG, "Failed to get LittleFS partition information (%s)", xf_err_to_name(ret));
93 } else {
94 XF_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
95 }
96
97 /* 使用 xf_vfs 接口来处理文件 */
98 XF_LOGI(TAG, "Opening file");
99 int fd = xf_vfs_open("/littlefs/hello.txt", XF_VFS_O_WRONLY | XF_VFS_O_CREAT | XF_VFS_O_TRUNC,
101 if (fd < 0) {
102 XF_LOGE(TAG, "Failed to open file for writing");
103 return;
104 }
105
106 const char *content = "LittleFS Rocks!\n";
107 if (xf_vfs_write(fd, content, strlen(content)) < 0) {
108 XF_LOGE(TAG, "Failed to write to file");
109 xf_vfs_close(fd);
110 return;
111 }
112 xf_vfs_close(fd);
113 XF_LOGI(TAG, "File written");
114
115 /* 重命名之前检查目标文件是否存在 */
116 xf_vfs_stat_t st;
117 if (xf_vfs_stat("/littlefs/foo.txt", &st) == 0) {
118 /* 如果存在则删除 */
119 if (xf_vfs_unlink("/littlefs/foo.txt") != 0) {
120 XF_LOGE(TAG, "Failed to delete existing file");
121 return;
122 }
123 }
124
125 /* 重命名原始文件 */
126 XF_LOGI(TAG, "Renaming file");
127 if (xf_vfs_rename("/littlefs/hello.txt", "/littlefs/foo.txt") != 0) {
128 XF_LOGE(TAG, "Rename failed");
129 return;
130 }
131
132 /* 打开重命名的文件进行读取 */
133 XF_LOGI(TAG, "Reading file");
134 fd = xf_vfs_open("/littlefs/foo.txt", XF_VFS_O_RDONLY, 0);
135 if (fd < 0) {
136 XF_LOGE(TAG, "Failed to open file for reading");
137 return;
138 }
139
140 char line[128];
141 ssize_t bytesRead = xf_vfs_read(fd, line, sizeof(line) - 1);
142 xf_vfs_close(fd);
143 if (bytesRead < 0) {
144 XF_LOGE(TAG, "Failed to read from file");
145 return;
146 }
147 line[bytesRead] = '\0'; // 确保字符串以空字符结尾
148 char *pos = strchr(line, '\n');
149 if (pos) {
150 *pos = '\0';
151 }
152 XF_LOGI(TAG, "Read from file: '%s'", line);
153
154 /* 全部完成,卸载分区并禁用 LittleFS */
155 xf_vfs_littlefs_unregister(conf.partition_label);
156 XF_LOGI(TAG, "LittleFS unmounted");
157}
158
159/* ==================== [Static Functions] ================================== */
xf_err_t xf_fal_init(void)
初始化 FAL.
Definition xf_fal.c:259
int32_t xf_err_t
整形错误类型。 错误码具体值见 xf_err_code_t.
Definition xf_err.h:69
const char * xf_err_to_name(xf_err_t code)
返回 xf_err_code_t 错误代码对应的错误信息字符串。
@ XF_FAIL
Definition xf_err.h:42
@ XF_OK
Definition xf_err.h:43
@ XF_ERR_NOT_FOUND
Definition xf_err.h:50
int xf_vfs_unlink(const char *path)
Definition xf_vfs.c:770
int xf_vfs_close(int fd)
Definition xf_vfs.c:642
int xf_vfs_open(const char *path, int flags, int mode)
Definition xf_vfs.c:538
int xf_vfs_rename(const char *src, const char *dst)
Definition xf_vfs.c:786
xf_vfs_ssize_t xf_vfs_read(int fd, void *dst, size_t size)
Definition xf_vfs.c:603
xf_vfs_ssize_t xf_vfs_write(int fd, const void *data, size_t size)
Definition xf_vfs.c:577
void test_base(void)
Definition test_base.c:53
#define TAG
Definition test_base.c:41
#define XF_FAL_DEFAULT_PARTITION_NAME
#define XF_LOGI(tag, format,...)
#define XF_LOGE(tag, format,...)
#define XF_VFS_O_RDONLY
#define XF_VFS_O_CREAT
#define XF_VFS_O_WRONLY
#define XF_VFS_O_TRUNC
#define XF_VFS_S_IWUSR
#define XF_VFS_S_IRUSR