初级会员

- 积分
- 64
- 金钱
- 64
- 注册时间
- 2014-4-29
- 在线时间
- 0 小时
|
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,但却无法建立文件,接着按按键连续十几次都是这种情况,(有几次成功建立了文件是按了大概十几次这样)这坑是什么问题?
|
-
最佳答案
查看完整内容[请看2#楼]
知道问题出在哪了,我的程序是不断的新建文件,然后判断是否已经存在,存在了则新建下一个,再判断,这样很耗时,效率低。要换一种方法
|