www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 Programm von ext. EEPROM laden


Autor: fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche gerade mit einem 8051 eine Art Mini-Computer zu bauen.
Im Moment bin ich soweit, dass ich eine kleine Lib habe mit den 
nötigsten Funktionen und die Ausgabe auf einem 20x4 Display. 
Letztendlich soll da noch eine Tastatur drankommen, TV-Out und ein 
Piepser.... aber das ist jetzt erstmal nebensächlich.

Wegen Programmen, dachte ich an einen kleinen I2C EEPROM, auf dem ich 
compilierte Programme speichere und die dann lade.
Nun zu meiner Frage, ob ich mir das so ungefähr richtig vorstelle...

Ich habe 64K Programmspeicher. Wenn ich nun die Ausgabe-Routinen, Laden 
vom EEPROM usw mit einem org irgendwo z.B. an die Adresse von 40kb setze 
und dann einfach vom externen Speicher Byte für Byte das Programm hole, 
könnte ich das dann so machen und ausführen?
(ganz grob vereinfacht....)
hole byte0 an 0x0000
hole byte1 an 0x0001
...
...

und dann, sobald alles geladen ist einfach ein:

ljmp 0x0000
Natürlich muss ich da die RAM-Benutzung beachten, Interrupt-Vektoren 
uswuswusw.

Aber vom Prinzip her, würde das so funktionieren?

Autor: Bertram S. (bschall)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt gut - aber Achtung: auf Flash & RAM Bereiche achten (write while 
exec usw.)

Autor: fragender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na das würde ich grob so lösen:
(Pseudo-Code)
"Speicher-Layout":
0x0000 ljmp @40kb
0x0003 ext int0 Interrupt Vektor
0x000B timer 0 IV
...
...
0x0053 spi IV
0x0054: start des user-programmplatzes
...
...
...
0x40kb: start des "betriebssystems":
Code für Display, UART, I2C, EEPROM, Tipse, TV-Out...
Damit umgehe ich ja das Problem, dass ich Speicher überschreibe, in dem 
mein "Betriebssystem" liegt. Er hüpft ja gleich an den Start bei 40kb 
und dann habe ich Platz von dem Ende der Interruptvektoren bis zum Start 
meines Codes, der immer da sein muss.

Also das ist nun nur ein grober Umriss vom ganzen, je mehr ich darüber 
nachdenke, umso schwieriger wird es :D aber genau das macht ja den Spass 
aus ;)

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es ist dir aber schon klar, dass 8051 eine Havard-Architektur hat, dass 
also Programm- und Datenspeicher getrennt adressiert werden? Oder hast 
du das entsprechend extern verknüpft (ich habe eine Brücke "Von 
Neumann", um den Speicherzugriff zu vereinheitlichen).

Gruss Reinhard

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.