Sprungaddressen ATxmega256A3U

Gast #6391009
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
#6391024
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.
#6391034
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?
Gast #6391047
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.
Moderator (Firma: Titel) Persönliche Seite #6391083
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.
(Firma: egal) #6391088
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.
Gast #6391097
@ 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.
Gast #6391103
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.