当前使用系统4.02, 使用文件系统elmfat,当写入字节数超过512字节时,系统挂掉,小于512字节多次写入没发现挂掉,硬件stm32f407vgt6,sdio sd卡,用的编译环境mdk 5.20
具体配置如下:
#define RT_USING_DFS
#define DFS_USING_WORKDIR
#define DFS_FILESYSTEMS_MAX 2
#define DFS_FILESYSTEM_TYPES_MAX 2
#define DFS_FD_MAX 16
#define RT_USING_DFS_ELMFAT
/* elm-chan's FatFs, Generic FAT Filesystem Module */
#define RT_DFS_ELM_CODE_PAGE 437
#define RT_DFS_ELM_WORD_ACCESS
#define RT_DFS_ELM_USE_LFN_3
#define RT_DFS_ELM_USE_LFN 3
#define RT_DFS_ELM_MAX_LFN 255
#define RT_DFS_ELM_DRIVES 2
#define RT_DFS_ELM_MAX_SECTOR_SIZE 2048
#define RT_DFS_ELM_REENTRANT
#define RT_USING_DFS_DEVFS
我追踪了下发现是
memcopy里挂掉的
我替换memcpy为rtmemcpy,发现居然好了^^.这个mdk的c库bug?
@gaoan1985 最近我刚好解答过类似的问题,你可以参考一下我在如下 PR 中的回复,地址: https://github.com/RT-Thread/rt-thread/pull/4015#pullrequestreview-533072570
问题描述是这样的:
该问题是由于使用了 C lib 库中的 memcpy 函数导致的硬件错误,如果使用 RT-Thread 提供的 rt_memcpy,该函数会判断源地址和目标地址是否为四字节对齐,如果不是,那么将会尝试使用单字节的方式进行数据拷贝,这样做避免出现非对齐访问错误。
我不确定你遇到的问题是否是这样,你可以通过调试观察错误发生时,拷贝的目标地址和原地址是否是四字节对齐的。
@gaoan1985 熊大v5
@gaoan1985 如果解决了问题,请选为最佳答案哦。
@gaoan1985 哪里是熊大 V5 了 哈哈
@我夏了夏天 rt_memcpy不是熊大写的吗?考虑的全面
@gaoan1985 这样的结果是增加兼容性,大数据量单字节拷贝会降低系统性能。
@我夏了夏天 嗯