OpenEdv-开源电子网

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

无法创建文件的问题

[复制链接]

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-4-29
在线时间
0 小时
发表于 2015-2-1 22:00:09 | 显示全部楼层 |阅读模式
5金钱
int main(void)
 {
  SystemInit();
delay_init(72);     //???±??????
NVIC_Configuration();
uart_init(9600);      //?®????????
  LED_Init();  //LED??????????
EXTIX_Init(); //??????????????
 
MYDMA_Config(DMA1_Channel5,(u32)&USART1->DR,(u32)ReceiveBuff,200);
              //DMA1?¨??5,???è??SendBuff,?????÷???®??1,?¤????????.
 
  printf("\r\n ????????SD?¨?????é(FATFS R0.08)\n");
while(1)
{
if(flag == 1)
{
flag = 0;
printf ( "\r\n disk_initialize starting......\n " );

res = f_mount(0,&fs);   
        printf("%d",res);  //?®????????0??
Create_files(); //res = f_open(&fdst,(TCHAR *)string0,FA_CREATE_NEW | FA_WRITE);
if( res == FR_OK )
{     
LED1_ON;
printf("??%d?????????¨????",file_num);
 
//res = f_write(&fdst, trs, sizeof(trs), &bw); 
 Write_file();
}
  }
// else if(flag == 2)
// {
// flag = 0;
// DMA_Cmd(DMA1_Channel5, DISABLE );  //??±?USART1 RX DMA1 ?ù???????¨??
// f_close(&fdst);          /*??±????? */
// LED1_OFF; 
// }
}
}


  void EXTI15_10_IRQHandler(void)
{
  delay_ms(10);    //????  
 
    if(EXTI_GetITStatus(EXTI_Line13) != RESET)
{
flag = 1;
}
     else if (EXTI_GetITStatus(EXTI_Line15) != RESET)
{
flag = 2;
}
EXTI_ClearITPendingBit(EXTI_Line13);  //????EXTI13±ê????
EXTI_ClearITPendingBit(EXTI_Line15);  //????EXTI15±ê????
}



void Create_files(void)
{  
char string0[25]={"0:/DATA_"}; //
char string1[15]={" "};    //
char string2[5]={".txt"};
  do
{
file_num++;
convert(string1,file_num);
 strcat(string0,string1);
   strcat(string0,string2); //??????????string0??
res = f_open(&fdst,(TCHAR *)string0,FA_CREATE_NEW | FA_WRITE);    
   } while( res == FR_EXIST );
}

void Write_file(void)
 {
printf("\nwrite file begining\n");   
 
   USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);  //?????®??1??DMA????
MYDMA_Enable(DMA1_Channel5);                  //????DMA??????
while(1)
{
if(DMA_GetFlagStatus(DMA1_FLAG_TC5) == SET)//?????¨??5?????ê??
 {
 //printf("%s\n",ReceiveBuff);
if(flag == 2)
{
flag = 0;
DMA_Cmd(DMA1_Channel5, DISABLE );  //??±?USART1 RX DMA1 ?ù???????¨??
f_close(&fdst);          /*??±????? */
LED1_OFF; 
}
  DMA_ClearFlag(DMA1_FLAG_TC5);  //????·????ê??±ê??
res = f_write(&fdst, ReceiveBuff, sizeof(ReceiveBuff), &bw); 
 /* ?????????????????????? */  
printf("\n write file done!");//?á???????ê??

      }
}    

}


额 ,注释竟然是乱码,,,各位道友,我先说一下程序的思路,初始化后等待按键中断,key0按下时置flag为1,主程序依次执行
flag = 0;
printf ( "\r\n disk_initialize starting......\n " );
res = f_mount(0,&fs);   
        printf("%d",res);  
Create_files(); //res = f_open(&fdst,(TCHAR *)string0,FA_CREATE_NEW | FA_WRITE);
if( res == FR_OK )
{     
LED1_ON;
printf("??%d?????????¨????",file_num);
  Write_file();
}
奇怪的现象发生了,程序只执行到   printf("%d",res);  打印的结果为0,但却无法建立文件,接着按按键连续十几次都是这种情况,(有几次成功建立了文件是按了大概十几次这样)这坑是什么问题?

截图00.png

最佳答案

查看完整内容[请看2#楼]

知道问题出在哪了,我的程序是不断的新建文件,然后判断是否已经存在,存在了则新建下一个,再判断,这样很耗时,效率低。要换一种方法
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2014-4-29
在线时间
0 小时
 楼主| 发表于 2015-2-1 22:00:10 | 显示全部楼层
知道问题出在哪了,我的程序是不断的新建文件,然后判断是否已经存在,存在了则新建下一个,再判断,这样很耗时,效率低。要换一种方法
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-2-1 23:32:42 | 显示全部楼层
你先搞个创建一个文件行不行的代码.测试下吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 04:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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