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?!
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??
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
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
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?
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!!
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.
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)?
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.
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)
leg doch mal den albernen nick ab, hier gibts keinen Tittenbonus.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.