OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5035|回复: 4

STM32 SD卡存储时遇到的死循环问题

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-7-14
在线时间
7 小时
发表于 2015-10-21 20:27:18 | 显示全部楼层 |阅读模式
5金钱
以下是鄙人测试中的一个代码,用来将数据存储到SD中,现在的问题是,如果这段程序单独的在while(1)或者if(1)循环里、如下,是可以一直存储数据的,但是一旦这段程序放下了if的条件语句下面--即若将while(1)改成if(xx==1)之类的,就无法将数据保存到SD卡中,调试程序发现这段存储程序无法运行完整,不知道是什么原因,不知有大神碰到类似情况或者能给个解答么。跪谢!!
while(1)
{
f_mount(0,&fs);
                                                
              sprintf((char *)file_name,"data%d.txt",num++);

            res = f_open(&fnew, (char *)file_name, FA_CREATE_NEW | FA_WRITE );
            f_close(&fnew);
            printf("%d\n",res);
           res = f_open(&fnew, (char *)file_name, FA_READ|FA_WRITE | FA_OPEN_ALWAYS );
           res = f_lseek(&fnew,f_size(&fnew));

                for(i=0;i<255;i++)
        {
              sprintf(RS232_buffconv,"%d ",RS232_buff);
                                                
              if(res == FR_OK)
              {
               res = f_write(&fnew,RS232_buffconv,4,&bw);

              }                                                                

              }
                f_close(&fnew);                                              
                f_mount(0, NULL);       
}

通过keil的在线调试。程序一直卡在下面这段程序里出不来,网上查了很多资料,也照着改了依旧不行,。
SD_Error SD_WaitReadOperation(void)
{
  SD_Error errorstatus = SD_OK;
 //????dma?????á??
  while ((SD_DMAEndOfTransferStatus() == RESET) && (TransferEnd == 0) && (TransferError == SD_OK))
  {}

  if (TransferError != SD_OK)
  {
    return(TransferError);
  }

  return(errorstatus);
}

求大神们帮助,主要问题是这个程序能在while(1)这样的循环里正常运行,可是一旦跟在判断语句里,就会死循环,很是苦恼,求解脱!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-21 21:12:37 | 显示全部楼层
是比较奇怪。
不过没办法,就是这么奇怪。
建议:用 查询方式试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-7-14
在线时间
7 小时
 楼主| 发表于 2015-10-21 22:01:16 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥也遇到过相同的情况么?我真的很不理解为什么会这样?是只能改成查询方式么?还是有其他别的办法?麻烦原子哥了,惆怅死了
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-7-14
在线时间
7 小时
 楼主| 发表于 2015-10-22 10:09:51 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,是用查询方式试了一下,然后LCD显示图片什么的都不行了。。图片是在SD卡里的,这个也有影响
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-22 23:02:42 | 显示全部楼层
回复【4楼】morrow00:
---------------------------------
参考下我们例程吧
我们例程用的查询方式,然后在读取fifo的时候要禁止所有中断.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 20:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表