官方的 sd_card_example_main.c 代码,在末尾添加如下代码:
int64_t StartTime=esp_timer_get_time()/1000;
char buffer[64];
int filesize,total=0,PicIndex=0;
FILE *fd = NULL;
for (PicIndex=0;PicIndex<100;PicIndex++) {
sprintf(buffer,MOUNT_POINT"/m/%04d.jpg",PicIndex);
fd = fopen(buffer, "r");
fseek(fd, 0, SEEK_END);
filesize = ftell(fd);
rewind(fd);
fread(Buffer, 1, filesize, fd);
fclose(fd);
total=total+filesize;
}
ESP_LOGI(TAG, "Read %dKB in %llums",
total/1024,
(esp_timer_get_time()/1000-StartTime));
StartTime=esp_timer_get_time()/1000;
for (size_t i=0;i<100;i++) {
sdmmc_read_sectors(card, Buffer, i*128, 128);
}
ESP_LOGI(TAG, "Read %dKB in %llums",
64*100,
(esp_timer_get_time()/1000-StartTime));
一段是从 m 目录下读取从 0000.jpg 到 0100.jpg ;另外一段是读取从0扇区开始的 100个64KB 扇区。最终运行结果如下:
前者花了 1789ms 读取 1.5MB 的内容;后者711ms能够读取 6.4MB 左右的内容。从这里可以看出文件系统的开销比较大。