在中断中无法执行U盘写入

2019-07-20 22:39发布

我想进入DMA中断后进行U盘数据写入工作,但是执行到if(open)语句之后就会跑飞,跟踪语句后发现其在msc_fatfs.c文件卡死,如图;void   DMA2_Stream0_IRQHandler(void){
                 FATFS fatfs;
                FIL file;  //Îļt¶ÔÏó
                FRESULT res;
        if(DMA_GetITStatus(DMA2_Stream0,DMA_IT_TCIF0)!=RESET)
                {
                        DMA_ClearITPendingBit(DMA2_Stream0,DMA_IT_TCIF0);/*??????*/
                       
                        for(i=0;i<=18;i++)
{
                 temp[i]=(float)adcx[i]*3.3/4096;
}
sprintf(a,"%f",temp[0]);

    f_mount(0, &fatfs);

    if(f_open(&file, "0:STM32.TXT",FA_OPEN_ALWAYS | FA_WRITE) == FR_OK)
    {

                                bytesWritten=file.fsize;
                                f_lseek(&file,bytesWritten);
      bytesToWrite = sizeof(a);
      res= f_write (&file, a, bytesToWrite, (void *)&bytesWritten);   
      f_close(&file);
      f_mount(0, NULL);
        }
}
请问是为啥?
user_app里的程序还是一直在while循环,是跟这个冲突吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-21 02:09
             FATFS fatfs;
                FIL file;  //&#206;&#196;&#188;t&#182;&#212;&#207;ó
这种很大的结构体,定义成指针,申请内存。
或者定义成全局变量。
正点原子
2楼-- · 2019-07-21 02:44
估计是堆栈溢出了
mengheli
3楼-- · 2019-07-21 05:33
本帖最后由 mengheli 于 2016-4-23 15:37 编辑
正点原子 发表于 2016-4-23 13:15
估计是堆栈溢出了

改成全局变量也不行,是不是在中断里面不能写U盘?
mengheli
4楼-- · 2019-07-21 10:21
本帖最后由 mengheli 于 2016-4-23 16:28 编辑
正点原子 发表于 2016-4-23 13:15
估计是堆栈溢出了

用了你的例程测试了一下,也不行,这次是卡在  f_mount(0, &fatfs);里面。

一周热门 更多>