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