|Subject:||Re: [avr-gcc-list] Macro to read /write long to eeprom|
|Date:||Wed, 10 Aug 2005 07:46:36 +0200|
Slightly off-topic but a handy tip:
For eeprom, perform a read before write, every byte takes 9milisec (Mega128) to write.
So, if you have sequential writes you could spend waiting quite a bit.
We have large structures in eeprom, parts of which are saved/updated regularly. Doing a read before write saved us seconds in wait time.
In my case I implemented simple calls like eeprom_rwb (read-write-byte), the stack & code size overhead are trivial compared to the time saved.
>>> "Royce Pereira" <address@hidden> 09/08/2005 21:36 >>>
On Wed, 10 Aug 2005 00:41:20 +0530, Dave Hansen <address@hidden> wrote:
> From: "Royce Pereira" <address@hidden>
>> Is there a macro to read or write a long word (32 bits) to eeprom?
>> For the last hour I've been trying to write one unsuccessfully.
> Not directly, but you can do something like
> #include <avr/eeprom.h>
> inline void eeprom_write_long(long *dest, long val)
> eeprom_write_block(&val, dest, sizeof(val));
> inline long eeprom_read_long(long *src)
> long retval;
> eeprom_read_block(&retval, src, sizeof(retval));
> return retval;
> WARNING: untested code, but it should be close. Note that (IMHO)
> eeprom_write_block's parameters are backwards, but that's what's been
Actually I managed something with the existing word rd/wr macros. But I've
yet to see how the code size compares with the read/write block method..
uint32_t eeprom_read_long( uint16_t *loc)
num = eeprom_read_word((uint16_t *)(loc+1));
num |= eeprom_read_word((uint16_t *)loc);
void eeprom_write_long(uint16_t *loc, uint32_t val)
eeprom_write_word(loc, val & 0xffff);
eeprom_write_word(++loc, val >>16);
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
AVR-GCC-list mailing list
This message is subject to the CSIR's copyright, terms and conditions and e-mail legal notice.
Views expressed herein do not necessarily represent the views of the CSIR.
CSIR E-mail Legal Notice
CSIR Copyright, Terms and Conditions
For electronic copies of the CSIR Copyright, Terms and Conditions and the CSIR Legal Notice
send a blank message with "REQUEST LEGAL" in the subject line to CSIR HelpDesk
|[Prev in Thread]||Current Thread||[Next in Thread]|