mikrocontroller.net

Forum: Compiler & IDEs ATTiny13 EEprom WinGCC und Warning


Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche in das EEprom des Tiny13 zu schreiben. Aber irgendwas will 
nicht so wie ich.
#include <avr/eeprom.h>

int main (void) {

int ee;
int wert;

ee=0;            // vollkommen egal was hier steht
wert=123;
eeprom_write_word(&ee, wert); // schreiben

while (1) {;}

}

das ausgelesene eeprom sieht dann so aus
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:10001000FFFFFFFFFFFFFFFFFFFF7B00FFFFFFFF73
:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
:00000001FF

es ist vollkommen egal wo er das hinschreiben soll machen tut er was 
anderes, wo mache ich den Fehler ?

Der Compiler gibt mir diese Warnung aus:
warning: pointer targets in passing argument 1 of 'eeprom_write_word' 
differ in signedness

Peter

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher weiss der Compiler um welchen AVR es sich handelt? Mir fehlt das
#include <avr/io.h> in deinem Quelltext.

Wichtiger: Die Funktion eeprom_write_word() erwartet als erstes Argument 
einen Pointer und keine Adresse einer Variablen!
http://www.nongnu.org/avr-libc/user-manual/group__...

Teste mal:

#include <avr/io.h>
#include <avr/eeprom.h>

int main (void) 
{
  int *ee; // ###
  int wert;

  ee = 0;  // EEPROM an Adresse 0 beschreiben
  wert = 123;
  eeprom_write_word(&ee, wert); // schreiben

  while (1) {;}
}


Anschliessend schreibst du deinen Quelltext auf die Datentypen uint16_t 
* und uint16_t aus stdint.h um, dann verschwindet auch die Warnung.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:

> Wichtiger: Die Funktion eeprom_write_word() erwartet als erstes Argument
> einen Pointer und keine Adresse einer Variablen!

Ob es die Adresse einer "int" oder eines Pointers ist spielt keine 
Rolle.

Besser so:
  eeprom_write_word(ee, wert);

Autor: Peter K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super danke das
&ee
 war Schuld.

Ich verwende das AVRStudio, dort habe ich den CPU Typ eingestellt.

Peter

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:

> Ob es die Adresse einer "int" oder eines Pointers ist spielt keine
> Rolle.
>
> Besser so:
>   eeprom_write_word(ee, wert);

Stimmt, mein Fehler das & hätte ich natürlich wegmachen müssen. Sch*ss 
Copy&Paste.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.