XFusion API v1.3.0
载入中...
搜索中...
未找到
test_benchmark.c
浏览该文件的文档.
1
32/* ==================== [Includes] ========================================== */
33
34#include "xf_utils.h"
35#include "xf_sys.h"
36#include "xf_vfs.h"
37#include "xf_vfs_littlefs.h"
38
39/* ==================== [Defines] =========================================== */
40
41#define TAG "test_benchmark"
42
43/* ==================== [Typedefs] ========================================== */
44
45/* ==================== [Static Prototypes] ================================= */
46
47static int get_file_size(const char *fname);
48
54static void read_write_test_1(const char *mount_pt, uint32_t iter);
55
56/* ==================== [Static Variables] ================================== */
57
58/* ==================== [Macros] ============================================ */
59
60/* ==================== [Global Functions] ================================== */
61
63{
64 XF_LOGI(TAG, "TEST_BENCHMARK");
66
67 /*
68 注册你想使用的分区,
69 本例中使用平台注册的默认分区(自动初始化中注册),
70 因此可以不用注册。
71 */
72
73 /* 初始化 xf_fal */
75
76 /* 配置 xf_vfs_littlefs 配置 */
77 xf_vfs_littlefs_conf_t conf = {
78 .base_path = "/littlefs",
79 .partition_label = XF_FAL_DEFAULT_PARTITION_NAME,
80 .format_if_mount_failed = true,
81 .dont_mount = false,
82 };
83 /*
84 使用上面定义的设置来初始化和挂载 LittleFS 文件系统。
85 注意:xf_vfs_littlefs_register 是一个一体化的便利函数。
86 */
87 xf_err_t ret = xf_vfs_littlefs_register(&conf);
88 if (ret != XF_OK) {
89 if (ret == XF_FAIL) {
90 XF_LOGE(TAG, "Failed to mount or format filesystem");
91 } else if (ret == XF_ERR_NOT_FOUND) {
92 XF_LOGE(TAG, "Failed to find LittleFS partition");
93 } else {
94 XF_LOGE(TAG, "Failed to initialize LittleFS (%s)", xf_err_to_name(ret));
95 }
96 return;
97 }
98
99 XF_LOGI(TAG, "TEST LittleFS:\n");
100 read_write_test_1("/littlefs", 5);
101
102 /* 全部完成,卸载分区并禁用 LittleFS */
103 xf_vfs_littlefs_unregister(conf.partition_label);
104}
105
106/* ==================== [Static Functions] ================================== */
107
108static int get_file_size(const char *fname)
109{
110 xf_vfs_stat_t st;
111 if (0 != xf_vfs_stat(fname, &st)) {
112 return -1;
113 }
114 return st.st_size;
115}
116
122static void read_write_test_1(const char *mount_pt, uint32_t iter)
123{
124 char fmt_fn[64] = { 0 };
125 char fname[128] = { 0 };
126 uint64_t t_write = 0;
127 uint64_t t_read = 0;
128 uint64_t t_delete = 0;
129
130 int n_write = 0;
131 int n_read = 0;
132 int n_delete = 0;
133
134 strcat(fmt_fn, mount_pt);
135 if (fmt_fn[xf_strlen(fmt_fn) - 1] != '/') {
136 strcat(fmt_fn, "/");
137 }
138 strcat(fmt_fn, "%d.txt");
139
140 const char *content = "All work and no play makes Jack a dull boy.\n";
141 size_t content_len = xf_strlen(content);
142
143 /* WRITE */
144 for (uint8_t i = 0; i < iter; i++) {
145 xf_snprintf(fname, sizeof(fname), fmt_fn, i);
146 uint64_t t_start = xf_sys_time_get_us();
149 if (fd < 0) {
150 XF_LOGE(TAG, "Failed to open file %d for writing", i);
151 continue;
152 }
153 for (uint32_t j = 0; j < 2000; j++) {
154 xf_vfs_write(fd, content, content_len);
155 }
156 xf_vfs_close(fd);
157 uint64_t t_end = xf_sys_time_get_us();
158 int fsize = get_file_size(fname);
159 xf_log_printf("%d bytes written in %lld us\n", fsize, (t_end - t_start));
160 t_write += (t_end - t_start);
161 n_write += fsize;
162 }
163
164 xf_log_printf("------------\n");
165
166 /* READ */
167 for (uint8_t i = 0; i < iter; i++) {
168 int fsize = 0;
169 xf_snprintf(fname, sizeof(fname), fmt_fn, i);
170 uint64_t t_start = xf_sys_time_get_us();
171 int fd = xf_vfs_open(fname, XF_VFS_O_RDONLY, 0);
172 if (fd < 0) {
173 XF_LOGE(TAG, "Failed to open file %d for reading", i);
174 continue;
175 }
176
177 char ch;
178 xf_vfs_ssize_t bytesRead = xf_vfs_read(fd, &ch, 1);
179 while (bytesRead > 0) {
180 fsize ++;
181 bytesRead = xf_vfs_read(fd, &ch, 1);
182 }
183
184 xf_vfs_close(fd);
185 uint64_t t_end = xf_sys_time_get_us();
186 xf_log_printf("%d bytes read in %lld us\n", fsize, (t_end - t_start));
187 t_read += (t_end - t_start);
188 n_read += fsize;
189 }
190
191 xf_log_printf("------------\n");
192
193 /* DELETE */
194 for (uint8_t i = 0; i < iter; i++) {
195 xf_snprintf(fname, sizeof(fname), fmt_fn, i);
196
197 int fsize = get_file_size(fname);
198 if (fsize < 0) {
199 continue;
200 }
201
202 uint64_t t_start = xf_sys_time_get_us();
203 xf_snprintf(fname, sizeof(fname), fmt_fn, i);
204 xf_vfs_unlink(fname);
205 uint64_t t_end = xf_sys_time_get_us();
206 xf_log_printf("deleted file %d in %lld us\n", i, (t_end - t_start));
207 t_delete += (t_end - t_start);
208 n_delete += fsize;
209 }
210
211 xf_log_printf("------------\n");
212
213 xf_log_printf("Total (%d) Write: %lld us\n", n_write, t_write);
214 xf_log_printf("Total (%d) Read: %lld us\n", n_read, t_read);
215 xf_log_printf("Total (%d) Delete: %lld us\n", n_delete, t_delete);
216 xf_log_printf("\n");
217}
xf_err_t xf_fal_init(void)
初始化 FAL.
Definition xf_fal.c:259
xf_us_t xf_sys_time_get_us(void)
获取系统时间的时间戳,单位微秒(us)
__weak xf_err_t xf_sys_watchdog_disable(void)
关闭看门狗
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
#define xf_snprintf(dest, size, format,...)
Definition xf_stdio.h:39
#define xf_strlen(str)
Definition xf_string.h:48
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
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
xf_vfs_off_t st_size
static void read_write_test_1(const char *mount_pt, uint32_t iter)
Writes and deletes files
void test_benchmark(void)
static int get_file_size(const char *fname)
#define TAG
#define XF_FAL_DEFAULT_PARTITION_NAME
#define XF_LOGI(tag, format,...)
#define XF_LOGE(tag, format,...)
#define xf_log_printf(format,...)
#define XF_VFS_O_RDONLY
#define XF_VFS_O_CREAT
#define XF_VFS_O_WRONLY
#define XF_VFS_S_IWUSR
#define XF_VFS_S_IRUSR
signed int xf_vfs_ssize_t