Forum: Mikrocontroller und Digitale Elektronik Programm aus Seriellem EE-Prom ausführen


von Freddy (Gast)


Lesenswert?

Hallo,

für meinen selbstgebauten Datenlogger mit Atmel ATmega32L habe ich
einzelne Messmodule zum anstecken an den Datenlogger gebaut. Auf ihnen
befindet sich jeweils ein kleiner serieller EE-Prom (SPI-Bus). Zur Zeit
lege ich einfach nur die Abgleichdaten auf den EE-Proms ab. Jedoch
hatte ich nun die Idee evtl. auch gleich die kleinen, Modulspezifischen
Messroutinen mit auf dem EE-Prom abzulegen und diesen halt etwas größer
zu wählen. Es hätte einfach den Vorteil, Programmspeicher beim
ATmega32L einzuspaaren, daher sich das sonst doch schon ganz schnell
mal hochsummiert. Ich programmiere den Datenlogger in GNU-C, jedoch
habe ich derzeit keine ahnung, wie ich es realisieren könnte, eine im
externen EE-Prom gespeicherte Messroutine auszuführen.

Aus der Assembler-Programmierung hatte ich noch so etwas in erinnerung,
das man die Software erst einmal in den RAM kopiert und dann einfach
den Programmzeiger auf die neue Adersse im RAM herumbiegt und somit das
Programm welches im RAM liegt ausführt.
Wie so etwas jedoch mit GNU-C realisierbar ist weis ich nicht

Hat jemand so etwas oder etwas ähnliches schon einmal gemacht und
könnte mich da mal aufklären, wie dies realisierbar ist.


MfG Freddy

von ape (Gast)


Lesenswert?

ein AVR kann keinen externen Code ausführen.
Die Archtitektur ist dafür nich ausgelegt.
Die einzige Möglichkeit besteht darin mittels Bootloader das Programm
ins Flash zu schreiben aber das geht nich beliebig oft.

von Rahul (Gast)


Lesenswert?

Dass der AVR nicht einfach so neu programmierbar ist, findet man auch in
anderen Threads.
Die Version mit dem RAM und Adressbereich umbiegen stammt noch aus
8051er Zeiten.
Ich weiss ja nicht, wie deine Messroutinen aussehen. Vielleicht könnte
man eine Art Interpreter schreiben, der sich dann die seinen Messablauf
quasi zeilenweise aus dem EEprom holt, ihn dann bearbeitet und dann die
nächste Anweisung holt. Dann müsste man sich einfach einen Befehlssatz
ausdenken. Nicht anders haben damals der C64 und der Apple II
gearbeitet (im Basic-Modus). Man hätte also quasi einen
Software-Prozessor auf dem AVR laufen (dafür gibt es bestimmt auch
einen anderen Begriff, Informatiker mögen mir verzeihen).
Natürlich wäre die Geschwindigkeit nicht mehr so hoch wie bei einem
maschinencodierten Programm, aber bei der Aufnahme einer Raumtemperatur
über 10 Tage (eine Vermutung) käme es auf eine Mikrosekunde mehr oder
weniger wohl nicht an...
Schönen Gruß
Rahul

----
21 ist nur die halbe Wahrheit

von Ronny Schulz (Gast)


Lesenswert?

Hmm.. vor einigen Jahren, habe ich das mal mit einem 8051 gemacht. Das
war auch in C. Natürlich sollte das genauso mit einem AVR gehen. Die
Routinen müssen dann aber so aufgebaut sein, dass es nur relative
Sprünge gibt. Oder die Adresse für das Programm ist fest eingestellt.

Ich würde das EEPROM auslesen, im Speicher ablegen und dann diese
Adresse eben aufrufen. Ein Funktion in C ist ja auch nichts anderes als
ein Zeiger. Nur müsste ich jetzt echt ganz genau überlegen, wie das
jetzt funktionierte.

von Sven (Gast)


Lesenswert?

Hi Freddy!

http://www.simreal.com/i_fuzbol.html

Scheint ein einfacher Interpreter im AVR zu sein. Schau mal, ob es für
Deine Zwecke verwendbar ist.

Sven

von Peter D. (peda)


Lesenswert?

Die 10.000 Schreibzyklen des Bootloaders dürften kein Problem sein,
wer konfiguriert schon ein Gerät 10.000 mal um.
Warscheinlich brechen auch eher die Modulstecker ab.

Aber die beiden oder mehrere C-Programme unter einen Hut zu bringen
dürfte haarig werden. Die wissen doch beide nichts voneinander, d.h. an
welche Adressen die Funktionen gelinkt werden und welcher RAM für wen
benutzt wird.

Daher würde ich auch zu einer Art SPS-Interpreter raten.


Peter

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.