emlsyx
emlsyx
This guy hasn't written anything yet

注册于 4 years ago

回答
0
文章
2
关注者
1

whj467467222 发表于 2020-3-3 00:18
取消掉keil的下面这个勾选,然后配合VS CODE 编译起来就会很快,VS CODE支持代码自动补全,函数跳转等功能 ...

就是去掉编译的,还是特别慢{:3_44:}

static lfs_stag_t lfs_dir_fetchmatch(lfs_t *lfs,
        lfs_mdir_t *dir, const lfs_block_t pair[2],
        lfs_tag_t fmask, lfs_tag_t ftag, uint16_t *id,
        int (*cb)(void *data, lfs_tag_t tag, const void *buffer), void *data)

这个函数的第四个参数“ lfs_tag_t fmask,” 为无符号型,为什么有一个地方调用它的时候给他传了一个-1的参数.....不会出问题吗?
调用的地方:

static int lfs_dir_fetch(lfs_t *lfs,
                         lfs_mdir_t *dir, const lfs_block_t pair[2])
{
    // note, mask=-1, tag=0 can never match a tag since this
    // pattern has the invalid bit set
    return lfs_dir_fetchmatch(lfs, dir, pair, -1, 0, NULL, NULL, NULL);
}

    本帖最后由 emlsyx 于 2019-5-8 11:59 编辑


,

bernard 发表于 2018-4-27 08:44
是的,不是通过ioctl来获得信息的。另外在命令行下也可以使用df命令来获得容量信息 ...


使用fatfs 系统中的 获取SD卡容量的,可能会造成系统卡死。
					clst = fs->n_fatent; sect = fs->fatbase;
i = 0; p = 0;
do {
if (i == 0) {
res = move_window(fs, sect++);
if (res != FR_OK) break;
p = fs->win;
i = SS(fs);
}
if (fs->fs_type == FS_FAT16) {
if (ld_word(p) == 0) nfree++;
p += 2; i -= 2;
} else {
if ((ld_dword(p) & 0x0FFFFFFF) == 0) nfree++;
p += 4; i -= 4;
}
} while (--clst);

当SD卡异常,无法直接读取卡内寄存器的容量,就需要通过这里来扫描计算容量,而这个计算的时间由很长,如果这时开启了看门狗,可能会造成看门狗复位。复位之后又会进入这个位置计算,导致程序进入这个死循环

    本帖最后由 emlsyx 于 2018-4-27 11:22 编辑


bernard 发表于 2018-4-27 08:44
是的,不是通过ioctl来获得信息的。另外在命令行下也可以使用df命令来获得容量信息 ...


回到
顶部

发布
问题

投诉
建议