关闭

f_open()使用错误记录

标签: 函数单片机硬件调试
129人阅读 评论(0) 收藏 举报
分类:

一、现象

调用函数 f_open() 后,程序崩溃,调试后发现,单片机产生硬件中断,即软件跳入如下部分:

void HardFault_Handler(void)
{
  /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
    BSP_LED_Toggle(LED3);
  }
}

二、错误代码

代码错误处如下,就是简单的使用 f_read() 函数打开一个文件,并将这个文件的前 32 个字节打印出来。

void show_file(uint8_t idx)
{
    FIL fil;
    uint8_t data[32];
    uint8_t bytecounts;
    uint8_t ret;

    printf("show file\n");

    if((ret = f_open(&fil,(const TCHAR *)File_path,FA_READ)) != FR_OK)
    {
        printf("ret : %d\n",ret);
        SD_Error_Handler();
    }
    else
    {
        if(f_read(&fil, data, sizeof(data), (UINT *)&bytecounts) != FR_OK)
        {
            SD_Error_Handler();
        }
        else
        {
            for(int i=0;i<32;i++)
            {
                printf(" %02x ",data[i]);
            }
            f_close(&fil);
        }
    }
}

三、解决方法

看了网上的资料,在使用该函数时出现了硬件中断,一般都是单片机内存访问出现了错误。
也就是说在 f_read(&fil,(const TCHAR *)File_path,FA_READ) 的参数中,无法找到 fil 的地址。将 FIL fil; 从函数外拿出,定义为全局变量,即可解决。

参考链接

0
0

猜你在找
深度学习基础与TensorFlow实践
【在线峰会】前端开发重点难点技术剖析与创新实践
【在线峰会】一天掌握物联网全栈开发之道
【在线峰会】如何高质高效的进行Android技术开发
机器学习40天精英计划
Python数据挖掘与分析速成班
微信小程序开发实战
JFinal极速开发企业实战
备战2017软考 系统集成项目管理工程师 学习套餐
Python大型网络爬虫项目开发实战(全套)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:174980次
    • 积分:2386
    • 等级:
    • 排名:第14817名
    • 原创:85篇
    • 转载:2篇
    • 译文:2篇
    • 评论:50条
    文章分类
    最新评论