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


von Stefanie (Gast)


Angehängte Dateien:

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?!

von Stefanie (Gast)


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??

von Stefanie (Gast)


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

von Ronny (Gast)


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

von Ronny (Gast)


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?

von Stefanie (Gast)


Angehängte Dateien:

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!!

von Ronny (Gast)


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.

von Stefanie (Gast)


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)?

von Stefanie (Gast)


Angehängte Dateien:

Lesenswert?

Sorry, mein Anhang!!!

von Stefanie (Gast)


Angehängte Dateien:

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.

von Stefanie (Gast)


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)

von crazy horse (Gast)


Lesenswert?

leg doch mal den albernen nick ab, hier gibts keinen Tittenbonus.

von Ronny (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.