Forum: Mikrocontroller und Digitale Elektronik Suche Infos


von TheMason (Gast)


Lesenswert?

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

von Ale (Gast)


Lesenswert?

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)

von TheMason (Gast)


Lesenswert?

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 ...

von A.K. (Gast)


Lesenswert?

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.

von Kola (Gast)


Lesenswert?

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.

von TheMason (Gast)


Lesenswert?

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 ?

von TheMason (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.