使用文件系统出现一些很奇怪的问题,明明格式化写入读取这些都成功了,但是在使用的时候总是出现BUG,就使用数组记录了
/*******************************************************
函数名称 : Writter_BJ_Signal
功 能 : 将当前的报警状态写入Flash中
参 数 : 无
返 回 值 : 无
*******************************************************/
void Writter_BJ_Signal(void)
{
uint8_t FileAddr_Array[3]={0};
uint8_t buff_count=0,temp_buffcou=0,i;
uint8_t Time_Receive[7];
/**********首先获取当前的时间****************************/
uint8_t year_re,mon_re,day_re,hour_re,min_re,sec_re;
Ds1302ReadTime(Time_Receive); //读取DS1302的时间
year_re = (((Time_Receive[6]/16)*10)+(Time_Receive[6]%16)); //转换成十进制的年
mon_re=( ((Time_Receive[4]/16)*10)+(Time_Receive[4]%16)); //转换成十进制的月
day_re=( ((Time_Receive[3]/16)*10)+(Time_Receive[3]%16)); //转换成十进制的天
hour_re=(((Time_Receive[2]/16)*10)+(Time_Receive[2]%16)); //转换成十进制的时
min_re=( ((Time_Receive[1]/16)*10)+(Time_Receive[1]%16)); //转换成十进制的分
sec_re=( ((Time_Receive[0]/16)*10)+(Time_Receive[0]%16)); //转换成十进制的秒
temp_buffcou=0;
while(1)
{
temp_buffcou++;
if(Temp_time[temp_buffcou]=='\0') //写入提示信息
{
break;
}
}
for(i=0;i<temp_buffcou;i++)
{
Tx_Buffer[i]=Temp_time[i]; //将时间提示信息写入发送缓冲区中
}
buff_count=temp_buffcou;
Tx_Buffer[buff_count]=2+'0'; //将年月日时分秒写入存取数组当中
Tx_Buffer[buff_count+1]=0+'0';
Tx_Buffer[buff_count+2]=year_re/10+'0';
Tx_Buffer[buff_count+3]=year_re%10+'0';
Tx_Buffer[buff_count+4]='/';
Tx_Buffer[buff_count+5]=mon_re/10+'0';
Tx_Buffer[buff_count+6]=mon_re%10+'0';
Tx_Buffer[buff_count+7]='/';
Tx_Buffer[buff_count+8]=day_re/10+'0';
Tx_Buffer[buff_count+9]=day_re%10+'0';
Tx_Buffer[buff_count+10]='/';
Tx_Buffer[buff_count+11]=hour_re/10+'0';
Tx_Buffer[buff_count+12]=hour_re%10+'0';
Tx_Buffer[buff_count+13]='/';
Tx_Buffer[buff_count+14]=min_re/10+'0';
Tx_Buffer[buff_count+15]=min_re%10+'0';
Tx_Buffer[buff_count+16]='/';
Tx_Buffer[buff_count+17]=sec_re/10+'0';
Tx_Buffer[buff_count+18]=sec_re%10+'0';
Tx_Buffer[buff_count+19]='\n';
buff_count=buff_count+20;
temp_buffcou=0;
while(1)
{
temp_buffcou++;
if(Temp_txbuff[temp_buffcou]=='\0')//计算距离提示信息的长度
{
break;
}
}
for(i=0;i<temp_buffcou;i++)
{
Tx_Buffer[buff_count+i]=Temp_txbuff[i];//将报警状态提示信息写入Flash中
}
buff_count=buff_count+temp_buffcou;
Tx_Buffer[buff_count]=System_BJ_flag+'0'; //temp_distance
buff_count++;
temp_buffcou=0;
while(1)
{
temp_buffcou++;
if(temp_distance[temp_buffcou]=='\0') //计算距离提示信息的长度
{
break;
}
}
for(i=0;i<temp_buffcou;i++)
{
Tx_Buffer[buff_count+i]=temp_distance[i];
} //左右命名反
buff_count=buff_count+temp_buffcou; //temp_distance
Tx_Buffer[buff_count]=(((int)(Right_Distance*100)/1000)%10)+'0'; //左侧距离
Tx_Buffer[buff_count+1]=(((int)(Right_Distance*100)/100)%10)+'0'; //temp_distance
Tx_Buffer[buff_count+2]='.'; //temp_distance
Tx_Buffer[buff_count+3]=(((int)(Right_Distance*100)/10)%10)+'0'; //temp_distance
Tx_Buffer[buff_count+4]=(((int)(Right_Distance*100)/1)%10)+'0'; //temp_distance
Tx_Buffer[buff_count+5]='/';
buff_count+=6;
Tx_Buffer[buff_count]=(((int)(Left_Distance*100)/1000)%10)+'0'; //左侧距离
Tx_Buffer[buff_count+1]=(((int)(Left_Distance*100)/100)%10)+'0'; //temp_distance
Tx_Buffer[buff_count+2]='.'; //temp_distance
Tx_Buffer[buff_count+3]=(((int)(Left_Distance*100)/10)%10)+'0'; //temp_distance
Tx_Buffer[buff_count+4]=(((int)(Left_Distance*100)/1)%10)+'0'; //temp_distance
Tx_Buffer[buff_count+5]='\0';
buff_count=BufferSize(Tx_Buffer); //计算TX_Buffer数组的长度
if(use_flash ==0)
{
FLASH2SPI_WriteNByte(Tx_Buffer, current_fileaddr, buff_count); //写入数据到FLASH
}
else if(use_flash ==1)
{
SFLASH_WriteNByte(Tx_Buffer, current_fileaddr, buff_count); //写入数据到FLASH
}
// printf("\r\n 写入的数据为:%s \r\t", Tx_Buffer);
// printf ("写入的地址为:%d",current_fileaddr);
current_fileaddr+=200; //将当前写入到的位置+200以便记录
FileAddr_Array[0]=(current_fileaddr>>16);
FileAddr_Array[1]=(current_fileaddr>>8);
FileAddr_Array[2]=(current_fileaddr);
if(use_flash ==0)
{
FLASH2SPI_WriteNByte(FileAddr_Array,0,3); //将当前写入的地址位置写入地址0中以便记录
}
else if(use_flash ==1)
{
SFLASH_WriteNByte(FileAddr_Array,0,3); //将当前写入的地址位置写入地址0中以便记录
}
}
uint32_t current_fileaddr=0;
const uint8_t Temp_txbuff[40]="本次报警的状态System_BJ_flag为:";
const uint8_t temp_distance[40]="\n本次报警左右两侧的距离分别为: ";
const uint8_t Temp_time[25]="本次报警时间为:";
/* 发送缓冲区初始化 */
uint8_t Tx_Buffer[200]; //发送给FLASH的缓冲区
uint8_t Rx_Buffer[200]; //读取flash的缓冲区