Reply by Steve Trigero January 14, 20052005-01-14

--- moises_colin <moises_colin@mois...> wrote:

>
> I will do that.
>
> Other question: My Serial Port Interrupt is also
> big, should be
> broken up, too?

Absolutely! Interrupt routines need to be kept as
short as possible. You should only do what is
absolutely necessary in the isr.
Why aren't you using the built-in serial interrupt
routines?

Steve >
> Moises
>




Reply by moises_colin January 14, 20052005-01-14

I will do that.

Other question: My Serial Port Interrupt is also big, should be
broken up, too?

Moises

--- In rabbit-semi@rabb..., Steve Trigero <seecwriter@y...>
wrote:
> This may be my own prejidice, but I think your
> procedure is way too big. IMO it should be broken up
> into two or three procedures.
> Be that as it may, why are you checking for valid
> entries in "amt" when tm_rd() returns a -1? You can't
> rely on anything in "amt" under that condition.
>
> Steve > --- moises_colin <moises_colin@y...> wrote:
>
> >
> > How do you validate if RTC reading is good?
> >
> > nodebug
> > void maxrrtc(void)
> > {int bok,Bandok;
> > struct tm amt;
> >
> > hitwd();
> > Bandok='Y';
> >
> > bok=tm_rd(&amt);
> >
> > // printf232("maxrrtc Result clock= %d\r",bok);
> > //maxinota
> >
> > if (bok==(-1))
> > {if (amt.tm_mon==1 && amt.tm_mday==1 &&
> > amt.tm_year= &&
> > amt.tm_hour==0 && amt.tm_min==0 && amt.tm_sec==0)
> > {//DATE:
> > hitwd();
> > switch (Current.Time.tm_mon)
> > {case 1: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>31) Bandok='N'; break;
> > case 2: if ((Current.Time.tm_year%4)==0)
> > {if (Current.Time.tm_mday<1 ||
> >
> > Current.Time.tm_mday>29) Bandok='N';}
> > else
> > {if (Current.Time.tm_mday<1 ||
> >
> > Current.Time.tm_mday>28) Bandok='N';}
> > break;
> > case 3: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>31) Bandok='N'; break;
> > case 4: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>30) Bandok='N'; break;
> > case 5: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>31) Bandok='N'; break;
> > case 6: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>30) Bandok='N'; break;
> > case 7: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>31) Bandok='N'; break;
> > case 8: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>31) Bandok='N'; break;
> > case 9: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>30) Bandok='N'; break;
> > case 10: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>31) Bandok='N'; break;
> > case 11: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>30) Bandok='N'; break;
> > case 12: if (Current.Time.tm_mday<1 ||
> > Current.Time.tm_mday>31) Bandok='N'; break;
> > default: Bandok='N'; break;
> > }
> >
> > //TIME:
> > if (Bandok=='Y')
> > {hitwd();
> > if (Current.Time.tm_hour>=0 &&
> > Current.Time.tm_hour<24 &&
> > Current.Time.tm_min>=0 && Current.Time.tm_min<60 &&
> > Current.Time.tm_sec>=0 &&
> > Current.Time.tm_sec<60)
> > {maxwrtc(); goto endImaxrrtc;}
> > //MAXINOTA
> > }
> > else if (Bandok=='N')
> > {
> > mmt.tm_year4; //MAXINOTA SAME
> > DATE TO VERSION
> > mmt.tm_mon=9;
> > mmt.tm_mday=4;
> > // mmt.tm_wday=1;
> > mmt.tm_hour;
> > mmt.tm_min=0;
> > mmt.tm_sec=0;
> > maxwrtc();
> > // lastFAIL=Current.Time;
> > newRESET=Current.Time; //lupis2
> > newCLOCK=Current.Time;
> > snextDAY=Current.Time;
> >
> > }
> > }
> > }//end bok=-1
> >
> > else
> > {hitwd();
> >
> > //----- lupis
> > //DATE:
> > switch (amt.tm_mon)
> > {case 1: if (amt.tm_mday<1 ||
> > amt.tm_mday>31) Bandok='N';
> > break;
> > case 2: if ((amt.tm_year%4)==0)
> > {if (amt.tm_mday<1 ||
> > amt.tm_mday>29) Bandok='N';}
> > else
> > {if (amt.tm_mday<1 ||
> > amt.tm_mday>28) Bandok='N';}
> > break;
> > case 3: if (amt.tm_mday<1 ||
> > amt.tm_mday>31) Bandok='N';
> > break;
> > case 4: if (amt.tm_mday<1 ||
> > amt.tm_mday>30) Bandok='N';
> > break;
> > case 5: if (amt.tm_mday<1 ||
> > amt.tm_mday>31) Bandok='N';
> > break;
> > case 6: if (amt.tm_mday<1 ||
> > amt.tm_mday>30) Bandok='N';
> > break;
> > case 7: if (amt.tm_mday<1 ||
> > amt.tm_mday>31) Bandok='N';
> > break;
> > case 8: if (amt.tm_mday<1 ||
> > amt.tm_mday>31) Bandok='N';
> > break;
> > case 9: if (amt.tm_mday<1 ||
> > amt.tm_mday>30) Bandok='N';
> > break;
> > case 10: if (amt.tm_mday<1 ||
> > amt.tm_mday>31) Bandok='N';
> > break;
> > case 11: if (amt.tm_mday<1 ||
> > amt.tm_mday>30) Bandok='N';
> > break;
> > case 12: if (amt.tm_mday<1 ||
> > amt.tm_mday>31) Bandok='N';
> > break;
> > default: Bandok='N'; break;
> > }
> >
> > if(amt.tm_year < 104) Bandok='N';
> > //TIME:
> > if (Bandok=='Y')
> > {hitwd();
> > if (amt.tm_hour>=0 && amt.tm_hour<24 &&
> > amt.tm_min>=0 &&
> > amt.tm_min<60 && amt.tm_sec>=0 && amt.tm_sec<60)
> > {Current.Time=amt;
> > mmt = Current.Time;
> > lmtiempo=mktime(&Current.Time);
> > hitwd();
> > }
> > }//end if TIME
> > else
> > { mmt.tm_year4; //MAXINOTA SAME
> > DATE TO VERSION
> > mmt.tm_mon=3;
> > mmt.tm_mday=8;
> > mmt.tm_hour;
> > mmt.tm_min=0;
> > mmt.tm_sec=0;
> > maxwrtc();
> > newRESET=Current.Time;
> > snextDAY=Current.Time;
> >
> > //#endif
> > }
> >
> >
> >
> > }//end bok!=(-1)
> > //-------
> > endImaxrrtc:
> >
> > hitwd();
> > }
> >
> > void main(void)
> > {
> > while(1)
> > {
> > { hitwd();
> > mystep=3;
> > newCLOCK=Current.Time;
> > if(process485)
> > { hitwd();
> > bandcommand=0;
> > if (banswer==1)
> > proc485();
> > } //end if process485
> > mystep=4;
> > hitwd();
> >
> > checapeticion485();
> > mystep=5;
> > inierrorhardw=maxhall;
> > bhardwareok=1;
> > cdatos=0;
> > hitwd();
> > mystep=6;
> > calc_level();
> > calc_temp();
> > mystep=7;
> > calc_volume();
> > mystep=8;
> >
> > FillRegs03();
> > mystep=9;
> > maxrrtc();
> > mystep;
> > if(lmtiempo>=tdeliv)
> > { deliv_logic();
> > tdeliv=mktime(&Current.Time) +
> > Setup.delaydeliv;
> > }
> > CurrentH2OProd = Current.GH2O + TodayH2ODrain -
> > newINV.Open.GH2O;
> > CurrentOilProd = Current.GOil + TodayOilSales -
> >
> > newINV.Open.GOil - CurrentH2OProd;
> >
> > banswer=1;
> > checapeticion485();
> > printamemory();
> > b1ervuelta=0;
> >
> > }
> > }
> >
> >
> > --- In rabbit-semi@rabb..., Steve Trigero
> > <seecwriter@y...>
> > wrote:
> > > It sounds like memory is being over-run. Perhaps
> > an
> > > array buffer, or the stack.
> > > Can we see some code to see how you are using
> > tm_rd()?
> > > I use tm_rd() a lot and have never had any
> > problems.
> > >
> > > Steve
> > >
> > >
> > >
> > > --- moises_colin <moises_colin@y...> wrote:
> > >
> > > >
> > > > Does anyone has a bad experience with RTC;
> > > >
> > > > I have an application:
> > > > - We have a sensor unit based on the RCM3600.
> > > > - A customer RTU that polls our unit RS485
> > > > serially every three
> > > > seconds.
> > > >
> > > > I noticed when I enable the function tm_rd() to
> > read
> > > > the RTC.
> > > > After a while (sometimes aprox one hour,
> > sometimes
> > > > longer than that)
> > > > the boards either:
> > > > - resets
> > > > - stop to respond at all.
> > > > - goes only to the interrup(seems that
> > main
> > > > program is halt
> > > > because the calculation are not
> > updated).
> > > >
> > > > If I remove that line, I do not have that
> > problem.
> > > >
> > > > Any suggestions?
> > > >
> > > >
> > > > Moises Colin
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> >
> >
> >
> >



Reply by Steve Trigero January 14, 20052005-01-14
This may be my own prejidice, but I think your
procedure is way too big. IMO it should be broken up
into two or three procedures.
Be that as it may, why are you checking for valid
entries in "amt" when tm_rd() returns a -1? You can't
rely on anything in "amt" under that condition.

Steve --- moises_colin <moises_colin@mois...> wrote:

>
> How do you validate if RTC reading is good?
>
> nodebug
> void maxrrtc(void)
> {int bok,Bandok;
> struct tm amt;
>
> hitwd();
> Bandok='Y';
>
> bok=tm_rd(&amt);
>
> // printf232("maxrrtc Result clock= %d\r",bok);
> //maxinota
>
> if (bok==(-1))
> {if (amt.tm_mon==1 && amt.tm_mday==1 &&
> amt.tm_year= &&
> amt.tm_hour==0 && amt.tm_min==0 && amt.tm_sec==0)
> {//DATE:
> hitwd();
> switch (Current.Time.tm_mon)
> {case 1: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>31) Bandok='N'; break;
> case 2: if ((Current.Time.tm_year%4)==0)
> {if (Current.Time.tm_mday<1 ||
>
> Current.Time.tm_mday>29) Bandok='N';}
> else
> {if (Current.Time.tm_mday<1 ||
>
> Current.Time.tm_mday>28) Bandok='N';}
> break;
> case 3: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>31) Bandok='N'; break;
> case 4: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>30) Bandok='N'; break;
> case 5: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>31) Bandok='N'; break;
> case 6: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>30) Bandok='N'; break;
> case 7: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>31) Bandok='N'; break;
> case 8: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>31) Bandok='N'; break;
> case 9: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>30) Bandok='N'; break;
> case 10: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>31) Bandok='N'; break;
> case 11: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>30) Bandok='N'; break;
> case 12: if (Current.Time.tm_mday<1 ||
> Current.Time.tm_mday>31) Bandok='N'; break;
> default: Bandok='N'; break;
> }
>
> //TIME:
> if (Bandok=='Y')
> {hitwd();
> if (Current.Time.tm_hour>=0 &&
> Current.Time.tm_hour<24 &&
> Current.Time.tm_min>=0 && Current.Time.tm_min<60 &&
> Current.Time.tm_sec>=0 &&
> Current.Time.tm_sec<60)
> {maxwrtc(); goto endImaxrrtc;}
> //MAXINOTA
> }
> else if (Bandok=='N')
> {
> mmt.tm_year4; //MAXINOTA SAME
> DATE TO VERSION
> mmt.tm_mon=9;
> mmt.tm_mday=4;
> // mmt.tm_wday=1;
> mmt.tm_hour;
> mmt.tm_min=0;
> mmt.tm_sec=0;
> maxwrtc();
> // lastFAIL=Current.Time;
> newRESET=Current.Time; //lupis2
> newCLOCK=Current.Time;
> snextDAY=Current.Time;
>
> }
> }
> }//end bok=-1
>
> else
> {hitwd();
>
> //----- lupis
> //DATE:
> switch (amt.tm_mon)
> {case 1: if (amt.tm_mday<1 ||
> amt.tm_mday>31) Bandok='N';
> break;
> case 2: if ((amt.tm_year%4)==0)
> {if (amt.tm_mday<1 ||
> amt.tm_mday>29) Bandok='N';}
> else
> {if (amt.tm_mday<1 ||
> amt.tm_mday>28) Bandok='N';}
> break;
> case 3: if (amt.tm_mday<1 ||
> amt.tm_mday>31) Bandok='N';
> break;
> case 4: if (amt.tm_mday<1 ||
> amt.tm_mday>30) Bandok='N';
> break;
> case 5: if (amt.tm_mday<1 ||
> amt.tm_mday>31) Bandok='N';
> break;
> case 6: if (amt.tm_mday<1 ||
> amt.tm_mday>30) Bandok='N';
> break;
> case 7: if (amt.tm_mday<1 ||
> amt.tm_mday>31) Bandok='N';
> break;
> case 8: if (amt.tm_mday<1 ||
> amt.tm_mday>31) Bandok='N';
> break;
> case 9: if (amt.tm_mday<1 ||
> amt.tm_mday>30) Bandok='N';
> break;
> case 10: if (amt.tm_mday<1 ||
> amt.tm_mday>31) Bandok='N';
> break;
> case 11: if (amt.tm_mday<1 ||
> amt.tm_mday>30) Bandok='N';
> break;
> case 12: if (amt.tm_mday<1 ||
> amt.tm_mday>31) Bandok='N';
> break;
> default: Bandok='N'; break;
> }
>
> if(amt.tm_year < 104) Bandok='N';
> //TIME:
> if (Bandok=='Y')
> {hitwd();
> if (amt.tm_hour>=0 && amt.tm_hour<24 &&
> amt.tm_min>=0 &&
> amt.tm_min<60 && amt.tm_sec>=0 && amt.tm_sec<60)
> {Current.Time=amt;
> mmt = Current.Time;
> lmtiempo=mktime(&Current.Time);
> hitwd();
> }
> }//end if TIME
> else
> { mmt.tm_year4; //MAXINOTA SAME
> DATE TO VERSION
> mmt.tm_mon=3;
> mmt.tm_mday=8;
> mmt.tm_hour;
> mmt.tm_min=0;
> mmt.tm_sec=0;
> maxwrtc();
> newRESET=Current.Time;
> snextDAY=Current.Time;
>
> //#endif
> } >
> }//end bok!=(-1)
> //-------
> endImaxrrtc:
>
> hitwd();
> }
>
> void main(void)
> {
> while(1)
> {
> { hitwd();
> mystep=3;
> newCLOCK=Current.Time;
> if(process485)
> { hitwd();
> bandcommand=0;
> if (banswer==1)
> proc485();
> } //end if process485
> mystep=4;
> hitwd();
>
> checapeticion485();
> mystep=5;
> inierrorhardw=maxhall;
> bhardwareok=1;
> cdatos=0;
> hitwd();
> mystep=6;
> calc_level();
> calc_temp();
> mystep=7;
> calc_volume();
> mystep=8;
>
> FillRegs03();
> mystep=9;
> maxrrtc();
> mystep;
> if(lmtiempo>=tdeliv)
> { deliv_logic();
> tdeliv=mktime(&Current.Time) +
> Setup.delaydeliv;
> }
> CurrentH2OProd = Current.GH2O + TodayH2ODrain -
> newINV.Open.GH2O;
> CurrentOilProd = Current.GOil + TodayOilSales -
>
> newINV.Open.GOil - CurrentH2OProd;
>
> banswer=1;
> checapeticion485();
> printamemory();
> b1ervuelta=0;
>
> }
> } > --- In rabbit-semi@rabb..., Steve Trigero
> <seecwriter@y...>
> wrote:
> > It sounds like memory is being over-run. Perhaps
> an
> > array buffer, or the stack.
> > Can we see some code to see how you are using
> tm_rd()?
> > I use tm_rd() a lot and have never had any
> problems.
> >
> > Steve
> >
> >
> >
> > --- moises_colin <moises_colin@y...> wrote:
> >
> > >
> > > Does anyone has a bad experience with RTC;
> > >
> > > I have an application:
> > > - We have a sensor unit based on the RCM3600.
> > > - A customer RTU that polls our unit RS485
> > > serially every three
> > > seconds.
> > >
> > > I noticed when I enable the function tm_rd() to
> read
> > > the RTC.
> > > After a while (sometimes aprox one hour,
> sometimes
> > > longer than that)
> > > the boards either:
> > > - resets
> > > - stop to respond at all.
> > > - goes only to the interrup(seems that
> main
> > > program is halt
> > > because the calculation are not
> updated).
> > >
> > > If I remove that line, I do not have that
> problem.
> > >
> > > Any suggestions?
> > >
> > >
> > > Moises Colin
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
>




Reply by moises_colin January 14, 20052005-01-14

How do you validate if RTC reading is good?

nodebug
void maxrrtc(void)
{int bok,Bandok;
struct tm amt;

hitwd();
Bandok='Y';

bok=tm_rd(&amt);

// printf232("maxrrtc Result clock= %d\r",bok); //maxinota

if (bok==(-1))
{if (amt.tm_mon==1 && amt.tm_mday==1 && amt.tm_year= &&
amt.tm_hour==0 && amt.tm_min==0 && amt.tm_sec==0)
{//DATE:
hitwd();
switch (Current.Time.tm_mon)
{case 1: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>31) Bandok='N'; break;
case 2: if ((Current.Time.tm_year%4)==0)
{if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>29) Bandok='N';}
else
{if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>28) Bandok='N';}
break;
case 3: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>31) Bandok='N'; break;
case 4: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>30) Bandok='N'; break;
case 5: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>31) Bandok='N'; break;
case 6: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>30) Bandok='N'; break;
case 7: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>31) Bandok='N'; break;
case 8: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>31) Bandok='N'; break;
case 9: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>30) Bandok='N'; break;
case 10: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>31) Bandok='N'; break;
case 11: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>30) Bandok='N'; break;
case 12: if (Current.Time.tm_mday<1 ||
Current.Time.tm_mday>31) Bandok='N'; break;
default: Bandok='N'; break;
}

//TIME:
if (Bandok=='Y')
{hitwd();
if (Current.Time.tm_hour>=0 && Current.Time.tm_hour<24 &&
Current.Time.tm_min>=0 && Current.Time.tm_min<60 &&
Current.Time.tm_sec>=0 && Current.Time.tm_sec<60)
{maxwrtc(); goto endImaxrrtc;} //MAXINOTA
}
else if (Bandok=='N')
{
mmt.tm_year4; //MAXINOTA SAME DATE TO VERSION
mmt.tm_mon=9;
mmt.tm_mday=4;
// mmt.tm_wday=1;
mmt.tm_hour;
mmt.tm_min=0;
mmt.tm_sec=0;
maxwrtc();
// lastFAIL=Current.Time;
newRESET=Current.Time; //lupis2
newCLOCK=Current.Time;
snextDAY=Current.Time;

}
}
}//end bok=-1

else
{hitwd();

//----- lupis
//DATE:
switch (amt.tm_mon)
{case 1: if (amt.tm_mday<1 || amt.tm_mday>31) Bandok='N';
break;
case 2: if ((amt.tm_year%4)==0)
{if (amt.tm_mday<1 || amt.tm_mday>29) Bandok='N';}
else
{if (amt.tm_mday<1 || amt.tm_mday>28) Bandok='N';}
break;
case 3: if (amt.tm_mday<1 || amt.tm_mday>31) Bandok='N';
break;
case 4: if (amt.tm_mday<1 || amt.tm_mday>30) Bandok='N';
break;
case 5: if (amt.tm_mday<1 || amt.tm_mday>31) Bandok='N';
break;
case 6: if (amt.tm_mday<1 || amt.tm_mday>30) Bandok='N';
break;
case 7: if (amt.tm_mday<1 || amt.tm_mday>31) Bandok='N';
break;
case 8: if (amt.tm_mday<1 || amt.tm_mday>31) Bandok='N';
break;
case 9: if (amt.tm_mday<1 || amt.tm_mday>30) Bandok='N';
break;
case 10: if (amt.tm_mday<1 || amt.tm_mday>31) Bandok='N';
break;
case 11: if (amt.tm_mday<1 || amt.tm_mday>30) Bandok='N';
break;
case 12: if (amt.tm_mday<1 || amt.tm_mday>31) Bandok='N';
break;
default: Bandok='N'; break;
}

if(amt.tm_year < 104) Bandok='N';
//TIME:
if (Bandok=='Y')
{hitwd();
if (amt.tm_hour>=0 && amt.tm_hour<24 && amt.tm_min>=0 &&
amt.tm_min<60 && amt.tm_sec>=0 && amt.tm_sec<60)
{Current.Time=amt;
mmt = Current.Time;
lmtiempo=mktime(&Current.Time);
hitwd();
}
}//end if TIME
else
{ mmt.tm_year4; //MAXINOTA SAME DATE TO VERSION
mmt.tm_mon=3;
mmt.tm_mday=8;
mmt.tm_hour;
mmt.tm_min=0;
mmt.tm_sec=0;
maxwrtc();
newRESET=Current.Time;
snextDAY=Current.Time;

//#endif
}
}//end bok!=(-1)
//-------
endImaxrrtc:

hitwd();
}

void main(void)
{
while(1)
{
{ hitwd();
mystep=3;
newCLOCK=Current.Time;
if(process485)
{ hitwd();
bandcommand=0;
if (banswer==1)
proc485();
} //end if process485
mystep=4;
hitwd();

checapeticion485();
mystep=5;
inierrorhardw=maxhall;
bhardwareok=1;
cdatos=0;
hitwd();
mystep=6;
calc_level();
calc_temp();
mystep=7;
calc_volume();
mystep=8;

FillRegs03();
mystep=9;
maxrrtc();
mystep;
if(lmtiempo>=tdeliv)
{ deliv_logic();
tdeliv=mktime(&Current.Time) + Setup.delaydeliv;
}
CurrentH2OProd = Current.GH2O + TodayH2ODrain - newINV.Open.GH2O;
CurrentOilProd = Current.GOil + TodayOilSales -
newINV.Open.GOil - CurrentH2OProd;

banswer=1;
checapeticion485();
printamemory();
b1ervuelta=0;

}
} --- In rabbit-semi@rabb..., Steve Trigero <seecwriter@y...>
wrote:
> It sounds like memory is being over-run. Perhaps an
> array buffer, or the stack.
> Can we see some code to see how you are using tm_rd()?
> I use tm_rd() a lot and have never had any problems.
>
> Steve >
> --- moises_colin <moises_colin@y...> wrote:
>
> >
> > Does anyone has a bad experience with RTC;
> >
> > I have an application:
> > - We have a sensor unit based on the RCM3600.
> > - A customer RTU that polls our unit RS485
> > serially every three
> > seconds.
> >
> > I noticed when I enable the function tm_rd() to read
> > the RTC.
> > After a while (sometimes aprox one hour, sometimes
> > longer than that)
> > the boards either:
> > - resets
> > - stop to respond at all.
> > - goes only to the interrup(seems that main
> > program is halt
> > because the calculation are not updated).
> >
> > If I remove that line, I do not have that problem.
> >
> > Any suggestions?
> >
> >
> > Moises Colin
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >



Reply by Enzo Gomez January 14, 20052005-01-14
Remember when programing cable not connected, Rabbit resets when a run
time error occurs.

--
____________________
Enzo Gomez, EE



Reply by Steve Trigero January 14, 20052005-01-14
It sounds like memory is being over-run. Perhaps an
array buffer, or the stack.
Can we see some code to see how you are using tm_rd()?
I use tm_rd() a lot and have never had any problems.

Steve
--- moises_colin <moises_colin@mois...> wrote:

>
> Does anyone has a bad experience with RTC;
>
> I have an application:
> - We have a sensor unit based on the RCM3600.
> - A customer RTU that polls our unit RS485
> serially every three
> seconds.
>
> I noticed when I enable the function tm_rd() to read
> the RTC.
> After a while (sometimes aprox one hour, sometimes
> longer than that)
> the boards either:
> - resets
> - stop to respond at all.
> - goes only to the interrup(seems that main
> program is halt
> because the calculation are not updated).
>
> If I remove that line, I do not have that problem.
>
> Any suggestions? > Moises Colin




Reply by moises_colin January 14, 20052005-01-14

Does anyone has a bad experience with RTC;

I have an application:
- We have a sensor unit based on the RCM3600.
- A customer RTU that polls our unit RS485 serially every three
seconds.

I noticed when I enable the function tm_rd() to read the RTC.
After a while (sometimes aprox one hour, sometimes longer than that)
the boards either:
- resets
- stop to respond at all.
- goes only to the interrup(seems that main program is halt
because the calculation are not updated).

If I remove that line, I do not have that problem.

Any suggestions? Moises Colin