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

📄 flash.c.bak

📁 一个基于pic单片机的外部flash <SST_SST25VF016B>的驱动代码
💻 BAK
📖 第 1 页 / 共 3 页
字号:
/*																		*/
/* 将临时扇区数据移到指定扇区                                           */
/*                                                                      */
/*																		*/
/* Input:																*/
/*		tmpIndex, Index									           	    */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void TranECG_Sector_to_Sector(unsigned long tmpIndex,unsigned long Index)
{
    unsigned  char  tmpecg;
    unsigned  int  i;
    unsigned  long NewIndex1;
    unsigned  long NewIndex2;
    NewIndex1 =tmpIndex;
    NewIndex2 =Index;
    for(i=0;i<7515;i++)
    {
	    tmpecg		=	Read_ECG_Point(NewIndex1,i);
        Write_ECG_Point(NewIndex2,i,tmpecg,0);
    }
}
/************************************************************************/
/* PROCEDURE: Update_Index_Page									        */
/*																		*/
/* 更新索引文件                                                         */
/* 位置:第0x0000FB扇区                                                 */
/*																		*/
/* Input:																*/
/*		None									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void Update_Index_Page(void)
{
    Sector_Erase(0xFB);
    Write_Index_Buf(0xFB);
}
/************************************************************************/
/* PROCEDURE: read_ini_file									            */
/*																		*/
/* 读出配置文件                                                         */
/* 位置:第0x0000FA扇区                                                 */
/*																		*/
/* Input:																*/
/*		None									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void read_ini_file()
{
		//Setup_Info_Buf[32];
		Read_Setup_Info_To_Buffer(0xFA);
		mov_buf_to_setup();
		return ;
}
/************************************************************************/
/* PROCEDURE: write_ini_file									        */
/*																		*/
/* 写入配置文件                                                         */
/*                                                                      */
/* 位置:第0x0000FA扇区												    */
/* Input:																*/
/*		None									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/

void 	write_ini_file()
{
	   mov_setup_to_buf();
       Sector_Erase(0xFA);
	   Write_Setup_Buf( 0xFA);
		return ;
}
void errcheck(void)
{
    unsigned char cnt=0,i,j,tmp,one_tmp=0,one_flag=1;
    memset((void *)Index_Info_Buf,0xff,sizeof(Index_Info_Buf));
    memset((void *)useIndex,0xff,sizeof(useIndex));
    Read_Index_Info_To_Buffer(0xFB);
    for(i=0;i<MAX_Records;i++)
    {
        for(j=0;j<MAX_Records+1;j++)
        {
            tmp =i+1;
            if(Index_Info_Buf[j]==0){Index_Info_Buf[j]=0xFF;}
            if(!one_flag && Index_Info_Buf[j]==one_tmp)               //把相同的去掉
            {
                Index_Info_Buf[j] =0xFF;
            }
            if(Index_Info_Buf[j]==tmp)
            {
                 one_flag = 0;                                      //表示对应有个数据
                 one_tmp = tmp;
                 Index_Info_Buf[j]=tmp-cnt;
            }
        }
        if(one_flag)                                      //如果没有
        {
            cnt++;
        }
        one_flag=1;
    }
    Sector_Erase(0xFB); 
    Write_Index_Buf(0xFB);
}
/************************************************************************/
/* PROCEDURE: Get_Count_Index_Oldindex_order							*/
/*																		*/
/* 获取记录条数,当前空白扇区索引,最旧的记录扇区索引 ,排序信息        */
/*                                                                      */
/* 位置:第0x0000FA扇区												    */
/* Input:																*/
/*		None									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void Get_Count_Index_Oldindex_order(void)
{
    unsigned char cnt=0,i,tmp,errflag=0;
    errcheck();
    memset((unsigned char *)Index_Info_Buf,0xff,sizeof(Index_Info_Buf));
    memset((unsigned char *)useIndex,0xff,sizeof(useIndex));
    Read_Index_Info_To_Buffer(0xFB);
    for(i=0;i<MAX_Records+1;i++)
    {
        if(Index_Info_Buf[i]==0){Index_Info_Buf[i]=0xFF;}
        if(Index_Info_Buf[i]>Record_count){errflag=1;}
        if(Index_Info_Buf[i]<=MAX_Records && Index_Info_Buf[i]>0)
        {
            cnt++;
        }
        else
        {
            Record_index = i;
        }
        if(1==Index_Info_Buf[i])
        {
            Record_index_old = i;   
        }
    }
    if(cnt>=MAX_Records) 
    {
        Record_count =MAX_Records;
    }   
    else
    {
        Record_count =cnt;
    }

 //   if(errflag) {errcheck();}    

    for(i=0;i<MAX_Records+1;i++)
    {
        if(Index_Info_Buf[i]<=MAX_Records && Index_Info_Buf[i]>0)
        {
            tmp =Record_count-Index_Info_Buf[i];
            useIndex[tmp] = i;
        }
    }
    Sector_Erase(Record_index<<1);
    delay_ms(50);  
    Sector_Erase((Record_index<<1)+1);
    return ;
}
/************************************************************************/
/* PROCEDURE: ModifyData									            */
/*																		*/
/* 修改一条记录  并重新排序                                             */
/*                                                                      */
/*                  												    */
/* Input:																*/
/*		None									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void ModifyData(unsigned char Index)
{                             //page /index
    unsigned long index;
    unsigned long tmpindex;
    unsigned char i,tmp;
    tmpindex = Index;          //需要上锁的记录索引
    mov_record_to_buf();
    index = Record_index;      //当前空闲的记录索引
    Record_index = Index;
    Sector_Erase(index<<1);
    delay_ms(50);
    Sector_Erase((index<<1)+1);  
    delay_ms(50);
    TranECG_Sector_to_Sector(tmpindex,index);
    Write_Record_Buf(index);
    Index_Info_Buf[index]=Index_Info_Buf[Index];
    Index_Info_Buf[Index] =0xFF;
    Sector_Erase(0xFB); 
    Write_Index_Buf(0xFB);
    memset((unsigned char *)useIndex,0xFF,sizeof(useIndex));
    for(i=0;i<MAX_Records+1;i++)
    {
        if(Index_Info_Buf[i]<=MAX_Records && Index_Info_Buf[i]>0)
        {
            tmp =Record_count-Index_Info_Buf[i];
            useIndex[tmp] = i;
        }
    }
    Sector_Erase(Record_index<<1);  
    delay_ms(50);
    Sector_Erase((Record_index<<1)+1); 
}

/************************************************************************/
/* PROCEDURE: GetOneData									            */
/*																		*/
/* 获取一条记录信息                                                     */
/*                                                                      */
/*                  												    */
/* Input:																*/
/*		Index									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void GetOneData(unsigned char Index)
{
    Read_Record_Info_To_Buffer(Index);
    mov_buf_to_record();
}

/************************************************************************/
/* PROCEDURE: DeleteOneIndex									        */
/*																		*/
/* 删除一条记录                                                         */
/*                                                                      */
/*                  												    */
/* Input:																*/
/*		Index									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void DeleteOneIndex(unsigned char Index)
{
    unsigned long index;
    index = Index;
    Index_Info_Buf[Index] =0xFF;
    Sector_Erase(0xFB); 
    Write_Index_Buf(0xFB);

    Get_Count_Index_Oldindex_order();

    Record_index = Index;
    Sector_Erase(index<<1);
    delay_ms(50);
    Sector_Erase((index<<1)+1);
    delay_ms(50);
    Sector_Erase(Record_index<<1);  
    delay_ms(50);
    Sector_Erase((Record_index<<1)+1);  
    delay_ms(50);
    display_record(); 
}

/************************************************************************/
/* PROCEDURE: DeleteAllIndex									        */
/*																		*/
/* 删除所有没有上锁的记录                                               */
/*                                                                      */
/*                  												    */
/* Input:																*/
/*		None									           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/

void DeleteAllIndex(void)
{
    unsigned char i;
    for(i=0;i<Record_count;i++)                        //检查上锁,并删除
    {
        GetOneData(useIndex[i]);
        if(!gDataMsg.Lock)
        {
            Index_Info_Buf[useIndex[i]]=0xff;
            Record_index = useIndex[i];
        }
    }
    Sector_Erase(0xFB); 
    Write_Index_Buf(0xFB);

    Get_Count_Index_Oldindex_order();

    Sector_Erase(Record_index<<1);
    delay_ms(50);
    Sector_Erase((Record_index<<1)+1);  
    delay_ms(50);
    display_record(); 
}

/************************************************************************/
/* PROCEDURE: AddOneIndex								               	*/
/*																		*/
/*  如果flag_sure是1,则存储,否则,不存储                              */
/*                                                                      */
/* 															            */
/* Input:																*/
/*		flag_sure								           	            */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void AddOneIndex(unsigned char flag_sure)
{
    unsigned char  i;
    unsigned char  r_i_o;
    if(!flag_sure) 
    {
        Sector_Erase(Record_index<<1);
        delay_ms(50);
        Sector_Erase((Record_index<<1)+1);
        return; 
    }
    r_i_o =Record_index_old;
    
    Write_Record_Buf(Record_index); //将用户信息存放到相应的扇区中

    if(Record_count>=MAX_Records)
    {
        for(i=0;i<MAX_Records+1;i++)
        {
            if(Index_Info_Buf[i]<=MAX_Records && Index_Info_Buf[i]>0)
            {
                Index_Info_Buf[i]--;
                if(1==Index_Info_Buf[i]){Record_index_old =i;}
            }
        }
        Index_Info_Buf[Record_index] = MAX_Records;
        Index_Info_Buf[r_i_o]        =0xFF;
        Sector_Erase(r_i_o);
        
        for(i=MAX_Records-1;i>0;i--)
        { 
             useIndex[i]=useIndex[i-1];
        }
        useIndex[0]= Record_index;
        Record_index = r_i_o;
    }
    else
    {
        Record_count++;
        for(i=MAX_Records-1;i>0;i--)
        { 
             useIndex[i]=useIndex[i-1];
        }
        useIndex[0]= Record_index;
        Index_Info_Buf[Record_index] =Record_count;
        for(i=0;i<MAX_Records+1;i++)
        {
            if(Index_Info_Buf[i]>MAX_Records)
            {
                Record_index =i;
            }
        }
    }

    //display_record(); 
}
/************************************************************************/
/* PROCEDURE: setupinit								               	    */
/*																		*/
/* 初始化配置信息                                                       */
/* 初始化索引信息                                                       */
/* 初始化FLASH															*/
/* Input:																*/
/*		NONE								           	                */
/*																		*/
/* Returns:																*/
/*		Nothing													        */
/************************************************************************/
void  setupinit(void)
{    
    	g_setup.measure_mode     =1;
		g_setup.lanuage_mode     =0;
		g_setup.filter_mode      =1;
		g_setup. beep_mode       =1;
		g_setup. gain_mode       =1;   //
 		g_setup. bandwidth_mode  =2;
		g_setup. light_mode      =1;
		g_setup.power_mode       =4;
		g_setup.translate_mode   =1;  
		g_setup.nouse            =0;
    	g_setup.limit_low        =0;
    	g_setup.limit_high       =240;
    	g_setup.user_id          =1;
    	g_setup.sw_alarm         =0;
    	g_setup.toleration       =0; //new add
    	g_setup.regist_flag      =0;
    	g_setup.sys_ini          =1;
    	g_setup.contrast_mode    =2;
    	g_setup.adjust_baseline  =100;
    	g_setup.initflag         =0x5d;
    	g_setup.password = 20;
		g_setup.datNO = 1;


    write_ini_file();
    //memset(Index_Info_Buf,0xFF,sizeof(Index_Info_Buf));
    
}















	  	

⌨️ 快捷键说明

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