mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik "Invalid location" beim Debuggen, warum??


Autor: Stefanie (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
mein Code setzt beim Debuggen ziemlich schnell aus und zwar:

C-File:

..
int main(void)
{
  struct com_buf test;
  struct com_buf buffer, *packet;
  packet = &write_txfifo;

  buffer.len = write_txfifo.len;     HIER!!!

das steht noch im eingebundenen Headerfile:
struct com_buf {
  uint8_t len;
  uint8_t buf[128];
};

static struct com_buf write_txfifo = {
                              /* LEN, FCF0, FCF1, DSNo,  */
         .buf = { 0x3E, 0x0F, 0x61, 0x88, 0x01, DEST_PANID1, \
                  DEST_PANID0, DEST_SHORTADR1, DEST_SHORTADR0, \
                  SHORTADR1, SHORTADR0, 0xde, 0xad, 0xbe, 0xef},
         .len = 15,
};

In der Watch im AVR-Studio steht die Meldung wie im Anhang

Ich versteh nicht, was der für Probleme hat?!

Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann sich den niemand vorstellen, woher so ein komischer Fehler kommen
könnte. Mein Atmega arbeitet ja und das ist noch nur intern, warum
sollte er da Probleme haben??

Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub mein ATmega16 funktioniert nicht richtig!!

Kann es sein, da er so komische Fehler macht?? Woran kann ich sicher
testen, dass er kaputt ist??

Danke Stefanie

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal im Datenblatt des Atmega16 auf Seite 17 (Internal SRAM
Locations).

Da steht das der interne SRAM von 0x60...0x45F liegt.Dürfte also mit
dem ATmega alles Ok sein.Gruss,

Ronny

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:

Irgendwie muss der Compiler auf die Idee kommen,in Bereiche oberhalb
von 0x460 noch Daten ablegen zu können.Hast du vielleicht ein
verkehrtes Device(z.B atmega128) ausgewählt?

Autor: Stefanie (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Im Makefile steht ATmega16. Also, ich compiliere im "DOS-Fenster" und
öffne dann mit dem AVR-Studio meine .elf-Datei oder die .asp-Datei und
debugge den Code.
Dann klicke ich noch an, dass ich ein JTAG ICE mkII habe und einen
ATmega16.

Die eingestellten Fusebits habe ich mal angehängt.

Ich habe vorher immer mit einem atmega128 gearbeitet, kann es sein,
dass das noch "irgendwo" drin ist??

DANKE schon mal für deinen Tipp Ronny!!

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich denkemal das Problem liegt beim Compiler.Welchen benutzt du
den?

WinAVR ist eigentlich recht günstig,zumal man aus der AVRSTudio raus
programmieren kann und sich nicht mit Kommandozeilen rumärgern muss.

Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze eigentlich WinAVR.

Nun hab ich mit AVR compiliert und er brachte mir folgende Meldung
(siehe Anhang).
Heißt das, dass mein Headerfile zu groß ist (da dort viele #defines
drin sind)?

Autor: Stefanie (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, mein Anhang!!!

Autor: Stefanie (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe Data nun auf 77,2% gebracht, doch als Fehlermeldung bekomme ich
immer noch "Invalid location"

Kann das nicht doch an dem Atmega liegen, da der Code OK ist, der läuft
auch auf einem Atmega128.

Autor: Stefanie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bzw. kann es sein, dass mein ATmega nach dem er ein Objekt buffer diesen
Typs

struct com_buf {
  uint8_t len;
  uint8_t buf[128];
};

allokieren soll, dass er dann voll ist, wenn beim Compilieren folgender
Memory Usage angezeigt wird:

Device: atmega16

Program:    3466 bytes (21.2% Full)
(.text + .data + .bootloader)

Data:        791 bytes (77.2% Full)
(.data + .bss + .noinit)

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leg doch mal den albernen nick ab, hier gibts keinen Tittenbonus.

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber scheinbar einen Bonus für mangelnde Manieren....

Gibt es einen konkreten Grund weshalb du nicht wieder  den ATmega128
nehmen kannst?Ansonsten müsstest du dir dann wohl überlegen,wie du mit
weniger RAM auskommst.Kannst du auf irgendwelche Variablen
verzichten?Oder etwas zusammen fassen?Hast du ein Int[] was auch mit
char[] funktionieren würde?

Übrigens ist es keine allzugute Idee mit new/delete bzw malloc()
Speicher dynamisch zu reservieren,da bei dem kleinen uC der RAM recht
schnell fragmentiert.

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.