Forum: Mikrocontroller und Digitale Elektronik Sprungaddressen ATxmega256A3U


von Güney Can (Gast)


Lesenswert?

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

von Mockerl (Gast)


Lesenswert?

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!

von Güney C. (gcan)


Lesenswert?

Ich meine natürlich das der Mikrokontroller 4 Seiten hat

von Güney C. (gcan)


Lesenswert?

Hallo,

weil auf der Seite 1 Speicher voll ist und Seite 2 gar nicht benutzt.

von Peter D. (peda)


Lesenswert?

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.

von Güney C. (gcan)


Lesenswert?

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?

von Einer K. (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

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.

von Einer K. (Gast)


Lesenswert?

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.

von Theor (Gast)


Lesenswert?

@ 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.

von Einer K. (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.