About applications written in Flash

There are some strange problems when using the file system. It is obvious that formatting, writing and reading are successful, but there are always BUGs when using it, so use the array to record.

/*******************************************************
函数名称 : 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的缓冲区 

Guess you like

Origin blog.csdn.net/qq_40831436/article/details/103084528