Hallo liebe Leute, ich hätte eine kleine Frage an die Community: Ich würde für einen ATmega gerne eine art minimal "OS" schreiben mit dem ich Applikationen von einer SD laden und ausführen kann. Ich habe leider schon lesen müssen dass die ATmegas zumeist RISC sind, heißt nicht von einem externen Medium bootbar ist. Eine Idee wäre jetzt ein interpretieren von Zahlen als befehle...das ist aber recht mühsam und außerdem hätte es dann einen sehr kleinen "Wortschatz". Kennt ihr eventuell ATmegas bzw. ähnlich leicht zu programmierende MCUs mit dem das möglich werden? Oder hat jemand eine Möglichkeit die RISC-Architektur "auszutricksen" und die Werte in den Programm-Memory zu laden Herzlichen Dank und Alles Liebe, Paul
Andreasp. schrieb: > zumeist RISC sind, heißt nicht von > einem externen Medium bootbar ist. Was hat das eine mit dem anderen zu tun. Wer hat Dir diesen Bockmist erzählt? Dass die Atmegas nicht von Hause aus booten, dürft doch klar sein, oder? Andreasp. schrieb: > Ich würde für einen ATmega gerne eine art minimal "OS" schreibe Das passt nicht zusammen, wenn Du eine OS schreiben willst, dann sollte Dir klar sein, wie so ein Atmega wirklich funktioniert. Ein Atmega ist kein Rpi. Erst denken, dann posten!
Der AVR kann architekturbedingt nur Code vom internen Flash ausführen. Es gibt daher - meines Wissens - nur zwei Möglichkeiten, wenn man Programme von einer SD-Karte laden und ausführen möchte: 1) Der Mikrocontroller beherbergt nur einen Bootloader, der das Programm von der SD-Karte einliest und dann in den Anwendungsbereich des Flash-Speichers schreibt. Problem dabei ist die relativ begrenzte Lebensdauer des Flash (etwa 10.000 Zyklen garantiert). 2) Der Mikrocontroller beinhaltet einen Interpreter, der die Programme von der SD-Karte lädt und die nativen Instruktionen softwaremäßig auf den AVR übersetzt. Problem dabei: langsam und ineffizient. SRAM ist ja nur sehr begrenzt verfügbar. Es gibt aber Leute, die z.B. einen Z80-Interpreter auf einem AVR zum laufen gebracht haben und damit CP/M ausführen...
:
Bearbeitet durch User
Interessant. Ich hab mich in das datasheet eingelesen: Es gibt einen Bootloader der das Sketch aus dem Flash lädt. BOOTEN geht von SD auch aber ich will nicht booten ich will eine Application in den SRAM laden und von dort ausführen. In einem 3d-Array werden die Programmdaten gespeichert und ein entsprechender Dispatchersystemen sorgt für ein vernünftiges scheduling. Es sollen maximal 16 Tasks gleichzeitig ausführbar sein und wenn es geschlossen wird wieder auf mein System zurückfallen. Ob ich von wo anders booten kann war nicht die Frage sondern ob ich von wo anders ein Programm LADEN kann, das ist ja so allgemein der sinn eines OS sonst wäre es ja nur ein bootloader... Hast du dafür einen eventuell Vorschlag ich häng damit leider irgendwie ;( Erst lesen, denken dann posten bitte ;)+ Lg
Das lesen, denken dann posten richtet sich an Herrn Codix. Danke euch anderen für die brauchbaren und tollen Antworten, Alles Liebe;)
Ein AVR ist für die Anwendung recht ungünstig, da er keinen Code aus dem RAM ausführen kann. Wenn Du einen anderen µC verwendest, der Code aus dem RAM ausführen kann (und nicht allzuwenig davon hat), dann kannst Du Deine Idee umsetzen - der im Flash-ROM untergebrachte Bootlader lädt eine Datei von der SD-Karte ins RAM und springt dann eine festgelegte Adresse im RAM an ... wenn alles klappt, läuft dann schon Dein von der Karte geladenes Programm. Umsetzen lässt sich das z.B. mit einem ARM, oder auch (eher theoretisch) mit einem MSP430 (die haben halt eher ziemlich wenig RAM), oder rein prinzipiell sogar mit einem MCS-51.
Wie genau würde so ein Interpret laufen? Würde es nur die basics können oder könnte ich z.B.: auch einen Driver für etwas an der IC2 laden(und wäre das schnell genug)?
Andreasp. schrieb: > ich will eine Application in den > SRAM laden und von dort ausführen. Geht halt nicht bei AVR. Mit dem STM32F103 wäre es zum Beispiel machbar. Der führt Code aus dem RAM sogar etwas schneller aus, als aus dem Flash. http://stefanfrings.de/stm32/index.html
Das sieht gut aus danke für den guten Tipp ;) Gute Nacht allerseits, alles liebe
Andreasp. schrieb: > Wie genau würde so ein Interpret laufen? > Würde es nur die basics können oder könnte ich z.B.: auch einen Driver > für etwas an der IC2 laden(und wäre das schnell genug)? Ein Interpreter würde genau das können was du ihm als Teil deines "OS" beibringst. Der Code der vom Interpreter verarbeitet wird, wird i.d.R. ja kein Nativer Code sein der auch direkt auf dem Prozessor laufen würde (Basic, Java, etc). Insofern kannst du dem Interpreter natürlich Befehle beibringen die einen I2C-Transfer durchführen. Das geht auch schnell genug denn die Kommunikation mit Bus macht der Interpreter. Im Programm hast du nur ein paar Befehle die die Kommunikation auslösen. Sascha
Hallo, auf CP/M auf einem Mega88 wurde ja oben schon hingewiesen: Beitrag "CP/M auf ATmega88" Das zeigt einerseits die Möglichkeiten und andererseits die Grenzen. Du kannst auf diese Art sicher auch ein eigens OS bauen, Du brauchts eben nur viel Geduld, weil vermutlich die effektive Taktrate ziemlich gering werden wird. Das eine Havard-Architektur wie der AVR eben keinen Programmcode direkt im Ram ausführen kann, wurde ja auch schon gesagt. Gruß aus Berlin Michael
Andreasp. schrieb: > Eine Idee wäre jetzt ein interpretieren von Zahlen als befehle...das > ist aber recht mühsam und außerdem hätte es dann einen sehr > kleinen "Wortschatz". Soetwas war schon 1978 mit einem 6502 möglich. Der Basic-Interpreter beim Superboard II benötigte inkl. Monitorprogramm (I/O über Tastatur/Bildschirm und Magnetband) 8kByte im ROM, heutzutage dann Flash.
Andreasp. schrieb: > Eine Idee wäre jetzt ein > interpretieren von Zahlen als befehle...das ist aber recht mühsam und > außerdem hätte es dann einen sehr kleinen "Wortschatz Eigentlich garnicht. Sowas hat man früher an der Uni in Compilerbau-Vorlesungen gerne als Übung gemacht... Zuerst den "Taschenrechner" mit Klammern, Punkt-vor-Strich usw. als rekursiver Top-Down-Parser, dann den "echten Compiler" mit Code-Ausgabe für eine simple Stack-Maschine. Die kriegt man auch problemlos auf den AVR, der Compiler bleibt am PC. Genau wie Forth am AVR in der Praxis eher weniger Sinnvoll, aber man lernt viel.
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.