SPIFS中怎么读取文件中的内容(追加)
open_file(&(list->File),(char *)(list->File.filename),(char *)(list->File.extname) );这一行传参是不是正确的?一加上这一行就报错了。
修改的代码在main.c中的这一段,主要想实现打印出文件中的内容。
void disp_list(FileList *list) {
FileList *ptr = NULL;
FileState fstate;
puts("filelist:");
while(list) {
ptr = list->prev;
putchar('\t');
disp_name(list->File.filename, sizeof(list->File.filename));
putchar('.');
disp_name(list->File.extname, sizeof(list->File.extname));
putchar('\n');
putchar('\t');
read_state(&(list->File), &fstate);
printf("create time: %d-%d-%d\n", (fstate.year+2000), fstate.month, fstate.day);
putchar('\t');
printf("file state: 0x%x\n", fstate.state);
putchar('\t');
printf("block addr: 0x%x,cluster_addr: 0x%x,length: 0x%x\n",
list->File.block, list->File.cluster, list->File.length);
list = ptr;
putchar('\t');
open_file(&(list->File),(char *)(list->File.filename),(char *)(list->File.extname) );
read_file(&(list->File), dat, 0, 256) ;
printf("%s\n",dat);
printf("%s\n",list->File.filename);
//printf("%s\n",list->File.extname);
}
}
uint8_t open_file(File *file, char *filename, char *extname)
typedef struct file {
uint8_t filename; // 文件名
uint8_t extname; // 拓展名
uint32_t block; // 文件索引记录地址
uint32_t cluster; // 文件内容起始扇区地址
uint32_t length; // 文件大小
} File;
// 文件信息链表
// 32bytes(64bit), 28bytes(32bit)
typedef struct file_list {
File File;
struct file_list *prev;
} FileList;
void disp_list(FileList *list)
源码
没用过SPIFS,这个有必要进入函数源码里面调试下,看看那个地方出错了。 eric2013 发表于 2024-4-18 08:57
没用过SPIFS,这个有必要进入函数源码里面调试下,看看那个地方出错了。
版主有什么推荐可以应用于单片机上的日志系统。有看过FLASHDB,移植过程太难,看不懂调用关系。 Y1ng 发表于 2024-4-18 13:47
版主有什么推荐可以应用于单片机上的日志系统。有看过FLASHDB,移植过程太难,看不懂调用关系。
用的什么存储器,SPI Flash吗,
这个的话,还可以使用FlashFS,LittleFS,LevelX
页:
[1]