"Invalid location" beim Debuggen, warum??

Gast #359695
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?!
Angehängte Dateien:
Gast #359700
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!!
Angehängte Dateien:
Gast #359705
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)
Gast #359707
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren