Hallo, ich hätte eine Frage. Ich habe den Mikrocontroller ATxmega256A3U. Der Mikrocontroller besteht aus 2 Seiten, je 64Kb, also insgesamt 256 Kb. Die Anwendungssoftware befindet sich auf Seite 1. Ich würde gerne, um den Speicherbereich auf Seite 1 zu schonen, einige Funktionen auf Seite 2 verlagern. Das bedeutet ich rufe von meiner Seite 1 irgendeine Funktion auf, die sich auf der Seite 2 sich befindet. Diese Funktion erledigt etwas und geht genau dahin wieder auf Seite 1 hin, woher sie aufgerufen wurde. Da ich mich nicht so sehr mit Assembler von AVR kenne würde ich mich freuen wenn ihr mir helfen würdet. Wenn das ganze in C zu realisieren könnte wäre es noch besser. Gruß gc
Güney Can schrieb: > Ich würde gerne, um > den Speicherbereich auf Seite 1 zu schonen, einige Funktionen auf Seite > 2 verlagern. Wieso möchtest du das machen? Poste mal deinen Sourcecode!
Hallo, weil auf der Seite 1 Speicher voll ist und Seite 2 gar nicht benutzt.
Die AVRs sind linear adressierbar, also brauchst Du Dich um Seiten nicht zu kümmern. Der Compiler nimmt schon die richtigen Call-Befehle. Bei Flash >128kB werden 3 Bytes auf den Stack gepusht und beim RET wieder gelesen (siehe Instruction set). Nur für Funktionspointer wird ein Trampolin eingerichtet, damit 2Byte-Pointer ausreichen.
:
Bearbeitet durch User
Hallo Peter, danke für dein Antwort. Hättest du vielleicht ein Beispiel? z.B. befindet sich meine Funktion auf der 2. Seite auf Adresse 0x10000. Bin in der Sache noch ein Anfänger. Wie kann ich dahin springen? Muss ich irgendwo definieren, das meine Funktion func2() sich auf der Addresse 0x10000 befindet? Wenn ja wie definiere ich es? Was meinst du mit Trampolin und wie werden sie errichtet?
Güney C. schrieb: > weil auf der Seite 1 Speicher voll ist und Seite 2 gar nicht benutzt. Ist das nicht egal? Technisch scheint mir das egal zu sein. Ich sehe da irgendwelche "Locken". Ich rate dir dazu, dich von dieser "Locke" abzuwenden, und um die wichtigen Dinge dieser Welt zu kümmern. Güney C. schrieb: > Wie kann ich dahin springen? Funktionspointer Güney C. schrieb: > Was meinst du > mit Trampolin und wie werden sie errichtet? Das macht der Compiler/Linker für dich. Und in dessen Unterlagen findest du das auch.
Güney Can schrieb: > Ich würde gerne, um den Speicherbereich auf Seite 1 zu schonen, einige > Funktionen auf Seite 2 verlagern. Du solltest unbedingt nochmal das Datenblatt des Controllers in dieser Hinsicht genauer ansehen. Denn das Lesen bedeutet für das Flash keinen Stress. Nur das Löschen und Neubeschreiben nutzt ihn ab und ist deshalb begrenzt.
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Nur das Löschen und Neubeschreiben nutzt ihn ab und ist deshalb > begrenzt. Und selbst dafür sind mindestens 10000 Zyklen angegeben. Und diese Anzahl an Programmänderungen muss man erstmal zusammen bekommen. Und selbst wenn man das ausnahmsweise nach einigen Jahren Arbeit mal schaft sind halt 5€ für einen neuen µC fällig. Im verhältnis zu den zig tausenden Arbeitstunden die man benötigt um die 10000 änderungen überhaupt zu erreichen also nicht.
Irgend W. schrieb: > Und diese Anzahl an Programmänderungen muss man erstmal zusammen > bekommen. Mir ist noch keiner meiner AVR Prototypen an Flash Versagen verreckt.
@ Güney Can Möglicherweise wäre es nützlich, wenn Du erklärst, warum Du einen bestimmten Speicherbereich "schonen" willst. (Was, nach allgemeiner Auffassung, sowieso zu einer "gut" gestellten Frage gehört. Siehe Netiquette). Ich denke, dass es im Allgemeinen nicht sinnvoll ist, sowas zu tun. Es mag besondere Fälle geben, aber liegt solch ein Fall hier vor? Vorausgesetzt, eine bestimmte Funktion wird wiederholt geändert und neu geflasht, so wird entweder der eine oder der andere Speicherbereich beansprucht. Irgendwann ist die Anzahl der Schreibzyklen ausgeschöpft. Ob nun die Funktion in diesem oder jenem Bereich liegt, ist dabei egal.
Theor schrieb: > Vorausgesetzt, eine bestimmte Funktion wird wiederholt geändert und neu > geflasht, so wird entweder der eine oder der andere Speicherbereich > beansprucht. Nöö... Üblicher Weise wird das ganze Programm beim flashen geschrieben und nicht nur Teile davon und das fängt eben immer mit der Interrupt Sprungleiste an. Ohne ganz ganz viele Klimmzüge, und Abweichung vom Üblichen, gibts da kein schonen.
Arduino Fanboy D. schrieb: > Üblicher Weise wird das ganze Programm beim flashen geschrieben Vor allem wird dafür jedes Bit zuerst auf '1' gelöscht und die ggfs. mit '0' übergeschrieben.
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.