求助F105读取U盘时进入HardFault_Handler硬件错误,已仿真是f_mount的原因

2019-07-20 22:59发布

STM32F105+FATFS_R0.13a 来读取U盘
在挂载U盘时:
f_mount(&fs_,"0:",0);  延迟挂载返回FR_OK
f_mount(&fs_,"0:",1);  直接挂载会返回FR_DISK_ERR错误
调试结果:读取指定文件时能读取出来,读取目录或浏览目录时会进入HardFault_Handler硬件错误函数
仿真后发现是因为f_mount进入的HardFault_Handler
查了一下进入HardFault_Handler的原因有:
1、数组越界
2、内存溢出,访问越界
3、堆栈溢出,程序跑飞
4、中断处理错误
这里不知道f_mount改怎么处理才能解决这个问题



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
七火
2019-07-21 08:36
本帖最后由 七火 于 2019-7-9 10:31 编辑
正点原子 发表于 2019-7-9 02:14
仿真找下问题,一定要跟踪到进入hardfault的那句代码,不是函数。

OK了,我仿真到执行fno->altname[]就会进入HardFault_Handler盗版FATFS_R0.13a哈哈,标准定义被人注释了
//        TCHAR        altname[FF_SFN_BUF + 1];/* Altenative file name */

get_fileinfo (
        DIR* dp,                /* Pointer to the directory object */
        FILINFO* fno        /* Pointer to the file information to be filled */
)

typedef struct {
        FSIZE_t        fsize;                        /* File size */
        WORD        fdate;                        /* Modified date */
        WORD        ftime;                        /* Modified time */
        BYTE        fattrib;                /* File attribute */
#if FF_USE_LFN
//        TCHAR        altname[FF_SFN_BUF + 1];/* Altenative file name */
//        TCHAR        fname[FF_LFN_BUF + 1];        /* Primary file name */
        TCHAR        fname[13];        /* Primary file name */
  TCHAR*        altname;/* Altenative file name */
#else
        TCHAR        fname[12 + 1];        /* File name */
#endif
} FILINFO;

一周热门 更多>