[En-Nut-Discussion] Non reproduceable reboots on 1.3H
Coleman Brumley
cbrumley at gopolar.com
Mon Aug 31 18:36:05 CEST 2009
I don't think you were using realloc correctly.
Shouldn't that have been as follows?
void LoadEEString(int offset, int length, char* buffer)
{
buffer = realloc(buffer,length+1);
if(buffer)
{
memset(buffer,(char)0,length);
// Load from EEPROM
NutEnterCritical();
NutNvMemLoad(offset, buffer, length);
NutExitCritical();
// Get sure that we can use the buffer for I/O functions
buffer[length] = '\0';
}
}
- Coleman
> -----Original Message-----
> From: en-nut-discussion-bounces at egnite.de [mailto:en-nut-discussion-
> bounces at egnite.de] On Behalf Of Daniel
> Sent: Monday, August 31, 2009 11:00 AM
> To: Ethernut User Chat (English)
> Subject: Re: [En-Nut-Discussion] Non reproduceable reboots on 1.3H
>
> Hi,
>
> Thiago, thanks for the answer. But this was not the problem.
>
> For reading from eeprom i used following function:
>
> void LoadEEString(int offset, int length, char* buffer)
> {
> realloc(buffer, length+1);
> memset(buffer, '\0', length+1);
>
> // Load from EEPROM
> NutEnterCritical();
> NutNvMemLoad(offset, buffer, length);
> NutExitCritical();
> // Get sure that we can use the buffer for I/O functions
> buffer[length] = '\0';
> }
>
> With this implementation my function shows the strange behaviour and
> stucks after 3-5 times called.
>
> Now I stopped using "realloc" and everything works:
>
> void LoadEEString(int offset, int length, char* buffer)
> {
> // Load from EEPROM
> NutEnterCritical();
> NutNvMemLoad(offset, buffer, length);
> NutExitCritical();
> // Get sure that we can use the buffer for I/O functions
> buffer[length] = '\0';
> }
>
> Is there any know bug about "realloc" or do I have an error in usage of
> this function?
>
> Best regards,
> Daniel
>
> Thiago A. Corrêa schrieb:
> > Hi,
> >
> > On Mon, Aug 31, 2009 at 8:47 AM, Daniel<ziu82 at gmx.de> wrote:
> >
> >> Hi Thiago,
> >>
> >> Thanks for the fast reply. It's the onboard eeprom.
> >>
> >> You say "I haven't checked if ethernut does that, but I do that on
> my
> >> own code before calling ethernut functions.". Can you tell me the
> >> functions for disabling/enabling interrupts? I found nothing in the
> API.
> >> So I can test if it works with disabled interrupts.
> >>
> >>
> >
> > NutEnterCritical and NutExitCritical disables and reenables
> > interrupts, respectively. I've wrapped my code between those calls.
> >
> > Kind Regards,
> > Thiago A. Correa
> > _______________________________________________
> > http://lists.egnite.de/mailman/listinfo/en-nut-discussion
> >
> >
>
> _______________________________________________
> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
More information about the En-Nut-Discussion
mailing list