📄 passdata.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 + -