Просмотр исходного кода

fix: air101/air103通过sdio按行读取文件时报内存不足

Wendal Chen 4 лет назад
Родитель
Сommit
7f9ead0ddc
2 измененных файлов с 21 добавлено и 1 удалено
  1. 20 0
      demo/sdcard/Air101/main.lua
  2. 1 1
      luat/vfs/luat_fs_fatfs.c

+ 20 - 0
demo/sdcard/Air101/main.lua

@@ -18,7 +18,9 @@ end
 -- 例如 /sd/boottime 是合法文件名, 而/sd/boot_time就不是合法文件名, 需要启用长文件名支持.
 
 local function fatfs_test()
+    log.info("sdio", "call sdio.init")
     sdio.init(0)
+    log.info("sdio", "call sdio.sd_mount")
     sdio.sd_mount(0, "/sd")
     local f = io.open("/sd/boottime", "rb")
     local c = 0
@@ -60,6 +62,24 @@ local function fatfs_test()
     if  f then
         local data = f:read("*a")
         log.info("data", data, data == "ABCdef")
+        f:close()
+    end
+
+    -- 测试一下按行读取, fix in 2022-01-16
+    f = io.open("/sd/testline", "w")
+    if f then
+        f:write("abc\n")
+        f:write("123\n")
+        f:write("wendal\n")
+        f:close()
+    end
+    sys.wait(100)
+    f = io.open("/sd/testline", "r")
+    if f then
+        log.info("sdio", "line1", f:read("*l"))
+        log.info("sdio", "line2", f:read("*l"))
+        log.info("sdio", "line3", f:read("*l"))
+        f:close()
     end
 end
 

+ 1 - 1
luat/vfs/luat_fs_fatfs.c

@@ -53,7 +53,7 @@ int luat_vfs_fatfs_getc(void* userdata, FILE* stream) {
     char buff = 0;
     UINT result = 0;
     FRESULT ret = f_read(fp, (void*)&buff, 1, &result);
-    if (ret == FR_OK) {
+    if (ret == FR_OK && result == 1) {
         return buff;
     }
     return -1;