Y1ng 发表于 2024-4-17 16:13:38

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)

源码




eric2013 发表于 2024-4-18 08:57:37

没用过SPIFS,这个有必要进入函数源码里面调试下,看看那个地方出错了。

Y1ng 发表于 2024-4-18 13:47:17

eric2013 发表于 2024-4-18 08:57
没用过SPIFS,这个有必要进入函数源码里面调试下,看看那个地方出错了。

版主有什么推荐可以应用于单片机上的日志系统。有看过FLASHDB,移植过程太难,看不懂调用关系。

eric2013 发表于 2024-4-19 08:40:18

Y1ng 发表于 2024-4-18 13:47
版主有什么推荐可以应用于单片机上的日志系统。有看过FLASHDB,移植过程太难,看不懂调用关系。

用的什么存储器,SPI Flash吗,

这个的话,还可以使用FlashFS,LittleFS,LevelX
页: [1]
查看完整版本: SPIFS中怎么读取文件中的内容(追加)