文件处理Seek问题:
lvgl里seek默认类型为uint32_t,导致LV_SEEK_END向前seek时出错。
将uint32_t改为int32_t,同事回调函数中的类型一并修改,可以解决此问题。
原码:
lv_fs_res_t lv_fs_seek(lv_fs_file_t * file_p, uint32_t pos, lv_fs_whence_t whence);
lv_fs_res_t (*seek_cb)(struct _lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence);
修改后:
lv_fs_res_t lv_fs_seek(lv_fs_file_t * file_p, int32_t pos, lv_fs_whence_t whence);
lv_fs_res_t (*seek_cb)(struct _lv_fs_drv_t * drv, void * file_p, int32_t pos, lv_fs_whence_t whence);
驱动器问题:
在lv_fs.c文件中
有函数如下
/**
* Skip the driver letter and the possible : after the letter
* @param path path string (E.g. S:/folder/file.txt)
* @return pointer to the beginning of the real path (E.g. /folder/file.txt)
*/
static const char * lv_fs_get_real_path(const char * path)
{
path++; /*Ignore the driver letter*/
if(*path == ':') path++;
return path;
}
在函数:中有调用
lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mode);
lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path);
//调用代码:
const char * real_path = lv_fs_get_real_path(path);//在flash中去除符盘号,会导致出错,将其注释即可
void * file_d = drv->open_cb(drv, path, mode);