Flashで記述されたアプリケーションについて

ファイルシステムの使用には奇妙な問題がいくつかあります。フォーマット、書き込み、読み取りが成功することは明らかですが、使用すると常にバグが発生するため、配列を使用して記録します。

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

おすすめ

転載: blog.csdn.net/qq_40831436/article/details/103084528