|
我想请问下高手们!我这里有个问题,中断不是要越短越好!但是我这里有个难题,那就是
我要实时的记录数据,并存储到EEPROM中,实时存储数据有两个操作,要把原来的数据读取出来
然后计算出现在的数据和原来的数据相加,然后再存储到EEPROM中,这个计算很简单,但是程序会
比较长,放在主函数中,起不到实时记录的功能!不知道我该怎么办
void Update_Power(void)
{
int updata_flag = 0;
union Data
{
unsigned long ldata;
struct
{
unchar c1;
unchar c2;
unchar c3;
unchar c4;
} cdata;
} powert_lc;
if(power_uflag == 1)
{
//////////////////获取原始数据//////////////////////////////
powert_lc.cdata.c1=BQ3287_gettime(ds_powert04);
powert_lc.cdata.c2=BQ3287_gettime(ds_powert03);
powert_lc.cdata.c3=BQ3287_gettime(ds_powert02);
powert_lc.cdata.c4=BQ3287_gettime(ds_powert01);
//////////////////////////////////////////////////////////////////
if(IAC>15
{
VAC &= 0x0fff;
IAC &= 0x00ff;
temp1 = 0;
temp1 = IAC;
temp1 = temp1*VAC;
temp1 = temp1&0x000fffff;
}
else
{
IDC=IDC&0x00ff;
temp1 = 0;
temp1 = IDC;
temp1 = temp1*VDC;
temp1 = temp1&0x000fffff;
if(temp1 < 1500) temp1 = 0;
else temp1 -= 1500;
}
powert_lc.ldata += temp1;
/////////////////计算并d得出现在的数据/////////////////////////////////
if(powert_lc.ldata > 360000000)
{
updata_flag=1;
powert_lc.ldata -= 360000000;
BQ3287_writecmd(ds_powert01,powert_lc.cdata.c4);
BQ3287_writecmd(ds_powert02,powert_lc.cdata.c3);
BQ3287_writecmd(ds_powert03,powert_lc.cdata.c2);
BQ3287_writecmd(ds_powert04,powert_lc.cdata.c1);
power_uflag = 0;
}
////////////////大于1W记录//////////////////////////////
if(updata_flag==0)
{
BQ3287_writecmd(ds_powert01,powert_lc.cdata.c4);
BQ3287_writecmd(ds_powert02,powert_lc.cdata.c3);
BQ3287_writecmd(ds_powert03,powert_lc.cdata.c2);
BQ3287_writecmd(ds_powert04,powert_lc.cdata.c1);
power_uflag = 0;
}
////////////没大于1W则继续//////////////////////////////
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|