?? 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 + -