www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sprung an eine Adresse im Programmspeicher


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!!

Kann mir jemand sagen wie ich direkt in eine Speicherzelle im 
Programmspeicher springen kann? Entweder C-Code oder Assembler-Code wäre 
nett. Nutze einen Atmel T89C51AC2 mit 8051 Core und habe 32k 
Programmspeicher (7fff)

Danke,  TOM

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm - meinst Du jmp, ajmp bzw. call, acall ?
Willst Du dorthin springen, um dort die Programmausführung weiterlaufen 
zu lassen, Daten aus einer Tabelle lesen, Sprungtabelle - Mist, meine 
Glaskugel geht momentan nicht.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nun gut, war vielleicht doch etwas allgemein formuliert!!

Ich möchte aus einer Applikation heraus direkt in eine neue Applikation 
springen in dem ich an die Startadresse der 2. Applikation springe.

die 2. Applikation hab ich compiliert, und die Hex-Datei mit einem 
Parallel-Programmer direkt an eine von mir festgelegte
Adresse gesetzt.

Habe es bereist mit den Assemblerbefehlen JMP LJMP, LCALL usw. 
probiert!!

Vieleicht beginnt die Abarbeitung dieser Datei ja nicht an der 1. 
Speicheradresse??

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kann nie funktionieren !!!

Die 2. Funktion wird zwar korrekt ausgeführt, aber wenn sie zuende ist, 
weiß sie ja nicht mehr, wohin sie zurückkehren soll. Du hast sie ja mit 
einem JUMP angesprungen und nicht mit einem CALL.
Sie holt sich also die nächsten Bytes vom Stack und springt dorthin. Das 
ist aber keine Return-Adresse sondern gesicherte Variablen der 1. 
Funktion.
Sie springt also irgendwo hin.

Ein Jump (goto) ist also nur innerhalb einer Funktion zulässig.
Bzw. es gibt unter C die Möglichkeit über mehrere Instanzen zurück zu 
springen, aber nie nach vorne:

int setjmp(jmp_buf jmpb);
void longjmp(jmp_buf jmpb, int retval);



Peter

Autor: Uwe Arends (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jmp is fein, wenn, wie Peter sagt, Applikation 2 nicht zurück will oder 
mittels jmp Applikation1 zurückspringt.
Das Probelm, das ich vielmehr sehe ist: Hast du Applikation 2 für deine 
Startadresse compiliert? Wenn nicht, springt der arme uC wahrscheinlich 
kunterbunt duch seine Bytewiesen, sprich absolute Adressen in 
Applikation 2, die für Startadresse 0 compiliert wurde, verweisen jetzt 
(durch deine Verschiebeaktion) auf irgendein Ziel, mit Sicherheit aber 
nicht auf das, was gewollt war.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Uwe, das hört sich zeimlich plausibel an!!
Werds mal anders versuchen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.