⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sst39vf1601.c

📁 用norflash进行树形目录文件管理
💻 C
📖 第 1 页 / 共 2 页
字号:
						   SectorErase(index_address/(2*1024));
						}
				        else
				        {
				           SectorErase(481);
				           index_address=481*2*1024;
				        }
					}		
					index_start_address=index_address;
					
					i=0;
				}
				else 
				{
					if(!(++index_address%(2*1024)))
					{
						if((index_address/(2*1024))<496)
						{  	
						   SectorErase(index_address/(2*1024));
						}
				        else
				        {
				           SectorErase(481);
				           index_address=481*2*1024;
				        }
					}		
				}
			}
			else
			{
				if(!WordProgram(index_address,WordRead(old_index_start_address+i-15*2*1024)))
				{
					if(!(++index_address%(2*1024)))
					{
						if((index_address/(2*1024))<496)
						{  	
						   SectorErase(index_address/(2*1024));
						}
				        else
				        {
				           SectorErase(481);
				           index_address=481*2*1024;
				        }
					}		
					index_start_address=index_address;
					
					i=0;
				}
				else 
				{
					if(!(++index_address%(2*1024)))
					{
						if((index_address/(2*1024))<496)
						{  	
						   SectorErase(index_address/(2*1024));
						}
				        else
				        {
				           SectorErase(481);
				           index_address=481*2*1024;
				        }
					}		
				}
			}
		}
		goto L1;
	}
	else 
	{
		if(!(++index_address%(2*1024)))
		{
			if((index_address/(2*1024))<496)
			{  	
			   SectorErase(index_address/(2*1024));
			}
	        else
	        {
	           SectorErase(481);
	           index_address=481*2*1024;
	        }
		}		
	}
	
	if(!WordProgram(index_address,log_address))//2.写新日志存储地址低16位到日志目录
	{
		old_index_start_address=index_start_address;
		goto L2;
	}
	else 
	{
		if(!(++index_address%(2*1024)))
		{
			if((index_address/(2*1024))<496)
			{  	
			   SectorErase(index_address/(2*1024));
			}
	        else
	        {
	           SectorErase(481);
	           index_address=481*2*1024;
	        }
		}		
	}
	
	if(!WordProgram(index_address,log_len))//3.写新日志长度到日志目录
	{
		old_index_start_address=index_start_address;
		goto L2;
	}

	//更新总日志数并将新目录起始地址存储
	total_log++;
	
	if(total_log>Max_log)
	{	
		total_log=Max_log;
		
		index_start_address+=3;
	}
	
	SectorErase(480);
	
	if(WordProgram(480*2*1024,total_log)&&WordProgram(480*2*1024+1,index_start_address>>16)&&WordProgram(480*2*1024+2,index_start_address))	
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
/****************************************************************************
* 名称:log_read()
* 入口参数:ID:待查日志序号
			Addr:日志存放地址
* 出口参数:返回实际查询日志类型      
* 功能:单个日志查询
****************************************************************************/
uint16 log_read(uint16 ID,uint16 *Addr)
{
	uint8 i;
	uint16 total_log,log_len,*p=Addr;
	uint32 log_index_start_address,log_index_address,log_address;
	
	total_log=WordRead(480*2*1024);
	
	if(ID>total_log||ID==0)
	{
		return 0;
	}
	log_index_start_address=(WordRead(480*2*1024+1)<<16)+WordRead(480*2*1024+2);
	
	log_index_address=log_index_start_address+(ID-1)*3;
	
	if(log_index_address<496*2*1024-2)
	{
		log_address=(WordRead(log_index_address)<<16)+WordRead(log_index_address+1);
		
		log_len=WordRead(log_index_address+2);
	}
	else if(log_index_address==496*2*1024-2)
	{
		log_address=(WordRead(496*2*1024-2)<<16)+WordRead(496*2*1024-1);
		
		log_len=WordRead(481*2*1024);
	}
	else if(log_index_address==496*2*1024-1)
	{
		log_address=(WordRead(496*2*1024-1)<<16)+WordRead(481*2*1024);
		
		log_len=WordRead(481*2*1024+1);
	}
	else
	{
		log_index_address-=15*2*1204;
		
		log_address=(WordRead(log_index_address)<<16)+WordRead(log_index_address+1);
		
		log_len=WordRead(log_index_address+2);
	}
	if(log_address>512*2*1024-1||log_address<496*2*1024)
	{
		return 0;
	}
	for(i=0;i<log_len;i++)//将待查日志拷贝到p地址开始的内存中
	{
		*(p+i)=WordRead(log_address+i);
	}
	return *p;
}
/****************************************************************************
* 名称:Alarm_Occur()
*入口参数:biaoshi:数据标示号
           Alarm_status:告警状态(告警/告警恢复)
* 功能:发生告警
****************************************************************************/
uint8 Alarm_Occur(uint16 biaoshi,uint16 Alarm_status)
{
	uint8 i=0;
	struct str{
	         uint16  log_type;
	         uint16 index;
	         uint16  status;
	         uint8  Time[8];
	        }str1;
    str1.log_type=0x01;
    str1.index=biaoshi;
    str1.status=Alarm_status;
    Gettime();
    for(i=0;i<8;i++)
    	str1.Time[i]=Date[i];
    if(Create_log((uint16*)&str1,size=sizeof(str1)))
    	return TRUE;
    else 
        return FALSE;
}
/****************************************************************************
* 名称:Alarm_message_SendStatus()
*入口参数:Send_status:发送状态(成功/不成功)
* 功能:告警信息发送状态
****************************************************************************/
uint8 Alarm_message_SendStatus(uint16 Send_status)
{
	uint8 i=0;
	struct str{
	         uint16  log_type;
	         uint16  status;
	         uint8  Time[8];
	        }str1;
	str1.log_type=0x02;
	str1.status=Send_status;
	Gettime();
    for(i=0;i<8;i++)
    	str1.Time[i]=Date[i];
    if(Create_log((uint16*)&str1,sizeof(str1)))
    	return TRUE;
    else 
    	return FALSE;
}
/****************************************************************************
* 名称:OMC_AckStatus()
*入口参数:Ack_status:应答标志(正确应答/错误应答)
           IP:指向网管中心IP地址
* 功能:网管中心应答状态
****************************************************************************/
uint8 OMC_AckStatus(uint16 Ack_status,uint8 *iP)
{
	uint8 i=0;
	struct str{
	         uint16  log_type;
	         uint16  status;
	         uint8  address[4];  
	         uint8  Time[8];
	        }str1;
	str1.log_type=0x03;
	str1.status=Ack_status;
	for(i=0;i<4;i++)
		str1.address[i]=*(iP+i);
	Gettime();
    for(i=0;i<8;i++)
    	str1.Time[i]=Date[i];
    if(Create_log((uint16*)&str1,sizeof(str1)))
    	return TRUE;
    else 
    	return FALSE;
		      
}
/****************************************************************************
* 名称:OMC_Monitor_Set()
*入口参数:OMC IP地址、数据标示号、原值、设置值、设置状态(成功/不成功)
* 功能:收到OMC设置命令进行监控参数设置
****************************************************************************/
uint8 OMC_Monitor_Set(uint16 biaoshi,uint16 Pro_Value,uint16 Set_value,uint16 Set_status,uint8 *iP)
{
	uint8 i=0;
	struct str{
	         uint16  log_type;
	         uint8  address[4];
	         uint16 index;
	         uint16 proto_value;
	         uint16 setvalue;
	         uint16  status;
	         uint8  Time[8];
	        }str1;
	str1.log_type=0x04;
	for(i=0;i<4;i++)
		str1.address[i]=*(iP+i);
	str1.index=biaoshi;
	str1.proto_value=Pro_Value;
	str1.setvalue=Set_value;
	str1.status=Set_status;	
	Gettime();
    for(i=0;i<8;i++)
    	str1.Time[i]=Date[i];
    if(Create_log((uint16*)&str1,sizeof(str1)))
    	return TRUE;
    else 
    	return FALSE;
}
/****************************************************************************
* 名称:OMC_Set_AckStatus()
*入口参数:应答状态(正确/不正确)
* 功能:OMC设置命令应答状态
****************************************************************************/
uint8 OMC_Set_AckStatus(uint16 Ack_status)
{
	uint8 i=0;
	struct str{
	         uint16  log_type;
	         uint16  status;
	         uint8  Time[8];
	        }str1;
	str1.log_type=0x05;
	str1.status=Ack_status;	 
	Gettime();
    for(i=0;i<8;i++)
    	str1.Time[i]=Date[i];
    if(Create_log((uint16*)&str1,sizeof(str1)))
    	return TRUE;
    else 
    	return FALSE;     
}
/****************************************************************************
* 名称:Local_Monitor_Set()
*入口参数:数据标示号、原值、设置值、设置状态(成功/不成功)
* 功能:本地监控参数设置
****************************************************************************/
uint8 Local_Monitor_Set(uint16 biaoshi,uint16 Pro_Value,uint16 Set_value,uint16 Set_status)
{
	uint8 i=0;
	struct str{
	         uint16  log_type;
	         uint16 index;
	         uint16 proto_value;
	         uint16 setvalue;
	         uint16  status;
	         uint8  Time[8];
	        }str1;
	str1.log_type=0x06;	
	str1.index=biaoshi;
	str1.proto_value=Pro_Value;
	str1.setvalue=Set_value;
	str1.status=Set_status;  
	Gettime();
    for(i=0;i<8;i++)
    	str1.Time[i]=Date[i];
    if(Create_log((uint16*)&str1,sizeof(str1)))
    	return TRUE;
    else 
    	return FALSE;       
}


/****************************************************************************
* 名称:main()
* 功能:SST39VF1601擦除、编程操作。
****************************************************************************/


uint16 ram[20],ram1[4],ram2[37];
int  main(void)
{  
   uint16 i;
   I2C_Init(20000);                 // I2C配置及端口初始化
   
/* //for test
   
   uint8 a=0;
 
   dat=WordRead(0);
   a=ChipErase();// 全片擦除
   dat=WordRead(0);
   WordProgram(0, 0x1234);
   dat=WordRead(0);
   
   dat=WordRead(1);
   a=SectorErase(1);//0扇区擦除
   dat=WordRead(1);
   WordProgram(1, 0x2341);
   dat=WordRead(1);
   
   dat=WordRead(2);
   a=BlockErase(2);//0块擦除
   dat=WordRead(2);
   WordProgram(2, 0x3412);
   dat=WordRead(2);
  
   ChipErase();
   */
   
   
   while(1)
   {
    	if(X1226_Setb)
   		{
   			Set_X1226_Time(Set_Date);
   			X1226_Setb=0;
   		}
   		/*else
   		{
   			IRcvStr(X1226_CCR|read,0x0030,2,Date,8);
	   		
	   		dat=WordRead(480*2*1024);
		    Alarm_Occur(0x0142,0x00);
		    dat=WordRead(480*2*1024);
		    Alarm_message_SendStatus(0x01);
		    dat=WordRead(480*2*1024);
		    OMC_AckStatus(0x00,IP);
		    dat=WordRead(480*2*1024);
		    OMC_Monitor_Set(0x0136,0x23,0x58,0x01,IP);
		    dat=WordRead(480*2*1024);
		    OMC_Set_AckStatus(0x00);
		    dat=WordRead(480*2*1024);
		    Local_Monitor_Set(0x0121,0x43,0x46,0x01);
		   
		    for(i=0;i<4;i++)
		    {		
		   		 ram1[i]=WordRead(480*2*1024+i);
		    }
		    for(i=0;i<37;i++)
		    {	
		   		 ram2[i]=WordRead(481*2*1024+i);
		    }
		    dat=log_read(1,ram);
		    dat=log_read(2,ram);
		    dat=log_read(3,ram);
		    dat=log_read(4,ram);
		    dat=log_read(5,ram);
		    dat=log_read(6,ram);
	    }*/
	    Gettime();
   }
   return(0);
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -