新手入门
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2015-5-18
- 在线时间
- 0 小时
|
5金钱
原子亲,我遇到的问题时将ADC采集的数据写入SD卡中,采集间隔为1ms,一次采集数字只有4个字节,我想精确控制每次写入的时间间隔,于是就在f_write后面加延时,通过对IO口观察时间间隔。
结果,在正常写入N(N<50)个周期后,就会出现IO口的值会保持不变,说明f_write可能卡住了。看几个ms后又进入正常写,在写入一定数量后,f_write又会卡住一次,请问这是为什么呢?
我的代码是:
void Data_Collect_Mode(void){
//DWORD c_fptr=fil.fptr;
//u16 data_cnt=DATA_SAMPLE_MAXNUM;
Get_Filename();
f_open(&fil,filename,FA_WRITE|FA_READ|FA_OPEN_ALWAYS);
data_num_infil=0;
//while(data_cnt<DATA_SAMPLE_MAXNUM){
while(1){
if(KEY_Scan(1)==KEY0_PRES) break;
My_ADC_GetData_1Point4Channel();
Data_Store(adc_data._Byte0);
Data_Store(adc_data._Byte1);
Data_Store(adc_data._Byte2);
Data_Store(adc_data._Byte3);
data_num_infil++;
//delay_us(DATA_SAMPLE_INTERVAL);
  Bout(9)=~PBout(9);
}
LCD_ShowString(5,140,200,12,12,"data cellecting over!");
delay_ms(100);
f_close(&fil);
}
void Data_Store(u16 data){
u32 bw;
char data_string[6]=" ";
char s[5];
sprintf(s,"%u",data);
if(data<10)
data_string[3]=s[0];
else if(data<100){
data_string[2]=s[0];
data_string[3]=s[1];
}else if(data<1000){
data_string[1]=s[0];
data_string[2]=s[1];
data_string[3]=s[2];
}else{
data_string[0]=s[0];
data_string[1]=s[1];
data_string[2]=s[2];
data_string[3]=s[3];
}
//printf("data=%d s=%s data_string=%s\n",data,s,data_string);
f_write(&fil,data_string,5,&bw);
delay_ms(10);
//f_sync(&fil);
//f_printf(&fil,"%s ",data);
}
main函数中调用Data_Collect_Mode(),通过观察PB9发现时序是这样的:
|
|