Moin moin, ich bin jetzt schon ne ganze weile mit Programmierung in C dran und habe auch ein recht grundlegendes Verständnis von Programmierung und Mikrocontrollern. Ich möchte mir nun einen ByteCode-Interpreter (ähnlich der Java-VM) schreiben mit dem man dann bequem Programme erstellen kann und diese in den Controller laden. Das ganze wird auf einem MSP laufen sollte aber (bei anpassung der Low-Level-Treiber auf jedem anderen Prozessor laufen können) Bei einem Interpreter ist mir schon klar das ich : - gekapselte zugriffe auf die hardware - speicher-verwaltung - monitor-programm - betriebssystem (timer, fifos, scheduler, usw.) benötige. Bis auf die Meine Frage zielt nun eher darauf : - Wie erstelle ich mir eine kleine Speicherverwaltung ? Wo gibt es weiterführende Infos ? Ich habe schon einige sachen dazu gelesen (-> Garbage-Collection, Best-Fit/Quick-Fit) aber noch nicht umgesetzt. - Wie gestalte ich den ByteCode (welche Befehle machen was mit welchen parametern und wie sind diese abgelegt) Gibt es irgendwo im Netz freie Infos wie man sich sowas am besten aufbaut (speziell die Gestaltung des ByteCodes und die Speicherverwaltung) ? Kurzum : Wie erstelle ich mir einen ByteCode Interpreter ? Ist vielleicht etwas allgemein gehalten, aber ich dachte daran mir mal anzuschauen wie der ByteCode bei Java und beispielsweise Forth aufgebaut ist um mir dann eigene sachen zu basteln. Da vielleicht noch die Frage : Welche ByteCode-Interpreter-Sprachen gibt es sonst noch (außer dem C64-Basic :-)) die relativ leicht zu verstehen sind aber dennoch einige Möglichkeiten bieten ? Gruß Rene
Die Waba (wie Java aber klein) Quelle can viel dich helfen: http://www.wabasoft.com/download/wabavm-src.10.zip Ich habe es gesehen in eine T-92 Taschenrechner, Es gibt auch p-Code Interpreters und Comilers (http://de.wikipedia.org/wiki/P-Code http://en.wikipedia.org/wiki/P-Code)
hallo ale, erstmal danke für die links. also die waba dürfte etwas groß sein. p-code wäre schonmal ein ansatz. vor allem geht es sich darum wie man sowas am besten aufbaut. ich habe nicht zwingend vor kompatibel zu anderen system zu sein (java ist ja nicht wirklich für kleine uCs geeignet, obwohl es ja eine gute implementierung ->nanovm gibt). aber ich möchte es noch etwas kleiner halten, zumal ich ja auch einen compiler schreiben muß. forth wäre auch noch interessant, muß ich mich aber erst mal mit auseinander setzen, und schauen wie denn der ram-verbrauch aussehen würde (wenn ich das richtig habe wird das dictionary ja im ram gehalten oder liege ich da falsch ?) und was damit sonst noch alles zu machen ist. für weitere anregungen offen ...
Das Verhalten von Systemen mit dynamischer Speicherverwaltung ist insbesondere bei knappem Speicher praktisch nicht reproduzierbar, somit auch nicht zuverlässig überprüfbar. Dynamische Speicherverwaltung ist bei Microcontrollern also schon im Ansatz problematisch, ob mit garbage collection oder ohne. Controller sollen ja üblicherweise dauerhaft funktionieren und nicht irgendwann mit "out of paging space" den Betrieb einstellen. Daher ist die Frage nach einer sinnvollen Speicherverwaltung für Controller einfach zu beantworten: so statisch wie möglich.
Andere interpretierte Sprachen mit ByteCode: Smalltalk und C (auf einem Casio PB-2000C) Wie du die Parameter ablegst: Am einfachsten ist die Stack-form. Der Befehl "Add" addiert die beiden obersten Stackelemente. Etwas schwerer (aber besser zu optimieren) ist die 2-RegisterForm, oder 3-RegisterForm. Für ein Hobbyprojekt würde ich auf jeden fall die Stackform wählen.
hallo a.k. mir ist schon klar das es bei (beispielsweise) 2k schon sehr grenzwertig ist eine sinnvolle speicherverwaltung überhaupt implementieren zu wollen. nur versuche ich die (wenigen) vorhandenen ressourcen so gut es geht zu nutzen und würde dann eh einen speicherbereich fest definieren der mir quasi meinen zu verwaltenden speicher enthält (sprich das ich von den 2k 1.5k abzwacke und diesen verwalte) mir ging es auch erstmal nur um die einfachste form das ich ein alloc und free realisiere (ist ja erstmal egal ob das free dann irgendwie automatisch arbeitet oder nicht) es gibt ja die möglichkeit mit bitmaps zu arbeiten (feste blocklänge und dann pro block 1 bit -> ineffizient bei großen speichern, u.u effizienter bei kleineren speichern) oder halt die blöcke über listen verwalten (->overhead bei vielen kleinen blöcken, und problem der fragmentierung, hierbei gerade auf mikrocontrollern ein problem) daher hätte ich die frage der speicherverwaltung erst auf die organisation des speichers richten sollen, z.b. was es ausser diesen beiden methoden sonst noch gibt und für uCs in frage kommt ?
@kola also einen daten-stack (ähnlich forth) werde ich wohl implementieren, zumal es für die opcode-gestaltung einfacher ist und das ganze flexibler macht wenn ich es an andere controller anpasse bzw. den stack größer/kleiner machen möchte. dementsprechend werde ich wohl auch die UPN (umgekehrte polnische notation) verwenden.
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.