Moin moin,
bevor ich jetzt ins Wochenende gehe, hätte ich gerne von euch noch ein
"Wie blöd bist du denn" gehört ;)
Ich habe - neben vielem anderen - in meinem Code folgende Schnipsel:
1 | #include <inttypes.h>
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <avr/eeprom.h>
|
5 |
|
6 | uint8_t eeLCDBacklight EEMEM = 50;
|
7 |
|
8 | uint8_t LCDBacklight;
|
9 |
|
10 | void sendToEEPROM(void)
|
11 | {
|
12 | // funktioniert nicht
|
13 | // eeprom_write_block(&LCDBacklight, &eeLCDBacklight, 1);
|
14 | // funktioniert
|
15 | eeprom_write_byte(&eeLCDBacklight, LCDBacklight);
|
16 | }
|
Die "umgekehrte Reihenfolge" der Parameter ist mMn richtig (andererseits
sitze ich auch schon länger hier vor dem Rechner) - siehe
http://www.gnu.org/savannah-checkouts/non-gnu/avr-libc/user-manual/group__avr__eeprom.html
(oder wurde das erst zwischen 1.6.2 und heute geändert?)
Wo könnte noch ein Fehler liegen, der eeprom_write_block fehlschlagen
lässt, wo eeprom_write_byte an derselben Stelle mit denselben Adressen
einwandfrei funktioniert? (Funktion bzw. Nichtfunktion nachgewiesen
durch avrdude -t ... und dann am Prompt "r eeprom")
Kompiliert wird das ganze (über WinAVR-Makefile) mit
avr-gcc -c -mmcu=atmega32 -I. -g -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=myeeprom.lst -std=gnu99 -DF_CPU=16000000
-MD -MP -MF .dep/myeeprom.o.d myeeprom.c -o myeeprom.o
Meine Version der avr-libc und des avr-gcc stehen oben.
Fällt einem von euch irgendwas typisches ein, das ich vergessen haben
könnte? EEPROM-Waitstates bei 16MHz, die von der einen Funktion
automatisch eingefügt werden, von der anderen nicht, oder sowas? Oder
ist das gar ein bekannter Bug, den ich nur beim googlen nicht gefunden
habe?
Vielen Dank für alle Anregungen,
MfG, Heiko
(Das ganze soll in eine Funktion, die eine Queue von ins EEPROM zu
schreibenden Daten zyklisch abarbeitet - um die Latenzen kürzer zu
halten, kann ich nicht sofort nach Änderung die Änderung ins EEPROM
schreiben - ansonsten könnte ich wunderbar mit eeprom_write_byte leben)