airwill 发表于 2013-4-27 17:48 
由于有 OS 的抢先处理, 可能导致写卡因为 OS 的任务抢占而中间出现导致错误的停止过程.
解决办法:
1. 将写 ...
版主,你好。我刚才试着在SD卡读写是关闭了所有中断,包括SYSTICK中断也关闭了。可是在打开文件时或者写入SD卡时还是会报错,请问可能是什么原因,我把源代码贴上来。
SysTick->CTRL &= 0xFE; // counter disable
fres = f_open(&fsrc, "vdr.rec", FA_OPEN_EXISTING | FA_WRITE);
f_sync(&fsrc);
fres = f_lseek(&fsrc, fsrc.fsize);
if(fres != FR_OK)
{
fres = f_close(&fsrc);
return 2; // write error
}
if (SD_Write_Error_Flag)
{
fres = f_write(&fsrc,Sensor_SDandUSART_Buffer_temp_writing_error,
SD_Write_Error_Flag*Sensor_SDandUSART_Buffer_MsgNum*Sensor_SDandUSART_Buffer_MsgLength, &br);
fres = f_write(&fsrc, Sensor_SDandUSART_Buffer_temp,
Sensor_SDandUSART_Buffer_MsgNum*Sensor_SDandUSART_Buffer_MsgLength, &br);
}
else
{
// SysTick->CTRL &= 0xFE; // counter disable
fres = f_write(&fsrc, Sensor_SDandUSART_Buffer_temp,
Sensor_SDandUSART_Buffer_MsgNum*Sensor_SDandUSART_Buffer_MsgLength, &br); //write to sd card with 1024 bytes
// SysTick->CTRL |= 0x01; // counter able
}
if(fres != FR_OK)
{
fres = f_close(&fsrc);
return 2; // write error
}
f_sync(&fsrc);
SysTick->CTRL |= 0x01; // counter able
Delay_xms(8000);
fres = f_close(&fsrc);
if(fres != FR_OK)
{
return 2; // write error
}
|