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

📄 passdata.c

📁 电力行业必备。有错的地方
💻 C
字号:
#include "passdata.h"



/*********************************************************************************************************
** 函数名称: pass_process
** 功能描述: 过日任务数据处理
** 输   入: 无
** 输   出: 无
********************************************************************************************************/
void pass_process(void)
{
	INT8U i,m,time_wd,time_wm; 
	INT32U n,j;
	INT16U cur_year,cur_month,cur_day,cur_hour,cur_minute,cur_week,cur_second;
	INT16U count;
	INT8U buf[20*1024];//用于存放FLASH1中移动数据的缓存;
	for(i=0;i<32;i++)
	{
		//如果要求采样的数据点数不足一天的时间,在过日时如何处理,应该只能把有效的数据点写到FLASH1中,
		//因为在FLASH1中只分配了不到一天的存储空间;
		
		if(RAM1_TaskDataFat[i].State)
		{
			
			//对于采样时间的单位是时和分的情况;
			if((RAM1_TaskDataFat[i].IntervalSample[0]==HOU)||(RAM1_TaskDataFat[i].IntervalSample[0]==MINU))
			{
			
			
			//EraseWriteFlash(INT32U *data,INT32U addR,INT32U len);
			//移动FLASH1中的数据,每次向前移动一日时间内的数据点数;
			count = (RAM1_TaskDataFat[i].NumTotal)/(RAM1_TaskDataFat[i].DayNum);
			for(m=0;m<count-1;m++)
			{
				for(n=0;n<(RAM1_TaskDataFat[i].DayNum)*(RAM1_TaskDataFat[i].ByteNum_p);n++)
					buf[n] = *((volatile unsigned char *)((RAM1_TaskDataFat[i].AddStartFlash)+
								(m+1)*(RAM1_TaskDataFat[i].DayNum)*(RAM1_TaskDataFat[i].ByteNum_p)+n));
								
				EraseWriteFlash(buf,
								(RAM1_TaskDataFat[i].AddStartFlash)+m*(RAM1_TaskDataFat[i].DayNum)*(RAM1_TaskDataFat[i].ByteNum_p),	
								(RAM1_TaskDataFat[i].DayNum)*(RAM1_TaskDataFat[i].ByteNum_p));				
			}
			//把SRAM1中当日的有效任务的数据保存到FLASH1中的最后一日的空间;
			EraseWriteFlash(&TaskData[RAM1_TaskDataFat[i].AddStart],
			     		    (RAM1_TaskDataFat[i].AddStartFlash)+m*(RAM1_TaskDataFat[i].DayNum)*(RAM1_TaskDataFat[i].ByteNum_p),	
							(RAM1_TaskDataFat[i].DayNum)*(RAM1_TaskDataFat[i].ByteNum_p)); 
			
			}//if((RAM1_TaskDataFat[i].IntervalSample[0]==HOU)||(RAM1_TaskDataFat[i].IntervalSample[0]==MINU))
			
			
			
			else if(RAM1_TaskDataFat[i].IntervalSample[0]==DAY) 
			{	
				DateTimeRead(&cur_year,&cur_month,&cur_day,&cur_week,&cur_hour,&cur_minute,&cur_second);
				//time_wd = *((volatile unsigned char *)((RAM1_TaskDataFat[i].AddStartFlash)+(RAM1_TaskDataFat[i].NumTotal-1)*(RAM1_TaskDataFat[i].ByteNum_p)+3);
				time_wm = *((volatile unsigned char *)((RAM1_TaskDataFat[i].AddStartFlash)+(RAM1_TaskDataFat[i].NumTotal-1)*(RAM1_TaskDataFat[i].ByteNum_p)+2));
				time_wd = *((volatile unsigned char *)((RAM1_TaskDataFat[i].AddStartFlash)+(RAM1_TaskDataFat[i].NumTotal-1)*(RAM1_TaskDataFat[i].ByteNum_p)+3));
				time_wd += RAM1_TaskDataFat[i].IntervalSample[1]+1;
				
					switch(time_wm)
					{
						case 1:
						case 3:
						case 5:
						case 7:
						case 8:
						case 10:{
									if(time_wd>=32)	time_wd -= 32;
										
								}
								break;
						case 12:{
									if(time_wd==32)	time_wd -= 32;								
								}
								break;
						case 4:
						case 6:
						case 9:
						case 11:
								{
									if(time_wd==31)	time_wd -= 31;
								}
							    break;
						case 2:{
									//if(((pre_year[i]%4==0)&&(pre_year[i]%100!=0))||(pre_year[i]%400==0))		//闰年
									//{
									//	if(pre_day[i] == 30) 
									//	{
									//		pre_day[i] -= 30;
									//		pre_month[i]++;
									//	}
									//}
									//else 
									//{
									    if(time_wd == 29) 	//不闰年
									    {
											time_wd -= 29;
											//pre_month[i]++;
										}
									//}
								}
								break;
							default:break;
						}//switch(pre_month[i])
						
					  
						
				if(time_wd==cur_day)		
				{
					count = (RAM1_TaskDataFat[i].NumTotal-1)*(RAM1_TaskDataFat[i].ByteNum_p);
					for(n=0;n<count;n++)
						buf[n] = *((volatile unsigned char *)((RAM1_TaskDataFat[i].AddStartFlash+RAM1_TaskDataFat[i].ByteNum_p+n)));
					count = RAM1_TaskDataFat[i].ByteNum_p;
					for(j=0;j<count;j++)
					{
						buf[n+j] = TaskData[RAM1_TaskDataFat[i].AddStart+j];
						TaskData[RAM1_TaskDataFat[i].AddStart+j] = 0;			//当日数据存放到写FLASH1的缓冲后,对响应的区域清零
					}			
					EraseWriteFlash(buf,RAM1_TaskDataFat[i].AddStartFlash,(RAM1_TaskDataFat[i].NumTotal)*(RAM1_TaskDataFat[i].ByteNum_p));
				}
			
			}
			
			else if(RAM1_TaskDataFat[i].IntervalSample[0]==MON) 
			{
			
			
			}
			
		}
	
	
	}

}

/*********************************************************************************************************
** 函数名称: copy_data
** 功能描述: 对FLASH1中的历史数据,在过日是移动并存储当日数据。
** 输   入: addw,写入数据的首地址,必须为偶数;
**			 addr,读出数据的首地址,必须为偶数;
**           len,数据长度;
** 输   出: 无
********************************************************************************************************/
/*
void copy_data(INT32U addw,INT32U * addr,INT32U len)
{
	EraseWriteFlash(addr,addw,len);


}
*/

⌨️ 快捷键说明

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