Spin - zerlegen und zusammensetzen

Fragen zu Programmiersprachen und Software für den Hive und die Propellerchips
Antworten
Benutzeravatar
hacktick
Beiträge: 15
Registriert: Mi 27. Mai 2009, 17:33
Kontaktdaten:

Spin - zerlegen und zusammensetzen

Beitrag von hacktick »

Ich versuche nun mal Spin etwas auseinander zu nehmen und es wieder zusammenzusetzen, sollte ich dabei Fehler irgendeiner Art machen, korrigiert mich, bitte.

Bisher habe ich mich auf die Tutorials aus der Hilfe des Propeller Tools, sowie einige andere Sources beschränkt. Ohne Chip etwas Programmieren ist unsinnig
Für alle die bereits programmiert haben sollte es relativ einfach sein den sources zu folgen.

Nun, was haben wir in Spin .. Spin beherscht Objekte was denke ich jeden freuen wird der diese zu schätzen weiß.
Variablendeklaration lass ich links liegen, das sollte jedem klar sein
Modular ist Spin auch, für mich fast schon etwas zu übertrieben ist die Kapselung der Objekte ..
Wir haben konstanten, variablen, funktionen und methoden .. was will man mehr

Funktionen .. haben wir die wirklich? Ich für meinen Teil bin der Meinung das alle Programmteile aus Objekten besteht, ergo -> keine Funktionen, nur Methoden

Also .. alles Objekte!
Schön!
Nun beginnt allerdings der Trugschluß. Die Methoden der Objekte werden nur wenn das Objekt instanziert ist wie gewohnt angesprochen [Objekt.Methode(arg1,arg2)]
Innerhalb des Objektes wird die Methode wie eine gewöhnliche Funktion angesprochen. Und jetzt immer schön im Hinterkopf behalten, auch wenn es INNERHALB des Objektes wie eine Funktion behandelt wird, es ist keine.
Die Methoden kennen Private und Public, zu verwenden wie üblich
Vererbung fehlt komplett, meines erachtens aber nicht weiter tragisch.

Eine Besonderheit die der Kapselung der Objekte etwas widerspricht ..
Mit VAR und CON deklarierte Symbole sind GLOBAL verfügbar
Was mir dabei nicht ganz klar ist, wie lange sind diese Symbole verfügbar? Bis die Instanz des Objektes in der sie deklariert sind geschlossen ist?

Kontrollstrukturen .. Nun, wir haben alles was das Herz begehrt .. Schleifen und Kontrollabfragen

case .. nur ordinaltypen ? scheint so .. lasse mich aber gerne eines besseren belehren ;)
selbst wenn, wer ist denn schon besseres gewohnt :)
Nagut, ich, aber was solls ;)
Das ist für mich eh ein Treppenwitz der Geschichte .. schimpfen sich Hochsprachen und können nur Ordinaltypen in einem switch-case Block abarbeiten :)


Was mir persönlich nicht an den Kontrollstrukturen gefällt ist der vollständige Verzicht auf Klammern jeglicher Art.
Anstelle von Klammern werden die zu einer Kontrollstruktur gehörenden statements um 2 Leerzeichen eingerückt
Gut, auch in anderen Sprachen wird nur eingerückt, allerdings ist das wohl eher Geschmackssache.
Immerhin, man muss zugeben, macht das Propeller Tool als IDE seinen Job gut so das man eigentlich auf den ersten Blick verstehen kann welche Statements zu welcher Kontrollstruktur gehören


Der DAT Teil von Spin spricht eigentlich auch für sich selbst.
Allerdings stellt sich mir und bestimmt auch anderen die Frage:
Muss man sich PASM nun auch noch antun oder kann man darauf weitestgehend verzichten?
Zum besseren und schnelleren Verständnisses des Sources wäre das schon nicht schlecht ..
Und es macht einen unterschied ob man sich in eine oder zwei Sprachen einarbeitet die im Prinzip die selbe Hardware ansteuern und somit das gleiche tun
(eigentlich!)

mfg hacktick
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Spin - zerlegen und zusammensetzen

Beitrag von drohne235 »

> Muss man sich PASM nun auch noch antun oder kann man darauf weitestgehend verzichten?

PASM ist ca. um den Faktor 100 schneller als Spin. :) Bei bestimmten Sachen kommt man nicht dran vorbei. Man muß es aber so sehen: Es sind ja meist nur wenige Stellen in einem Programm welche zeitkritisch sind - dafür nimmt man dann kleine PASM-Routinen. Den Rest erledigt man ganz easy in Spin. Es macht schon einen Unterschied ob z.B. ein Ramtest eine Stunde oder deutlich unter einer Minute dauert. An anderen Stellen wie bei Grafikanwendungen kann man prinzipiell nicht darauf verzichten, aber da kann man dann wirklich kleine universelle PASM-Bausteine machen die man dann komfortabel mit Spin "zusammenkittet".
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
hacktick
Beiträge: 15
Registriert: Mi 27. Mai 2009, 17:33
Kontaktdaten:

Re: Spin - zerlegen und zusammensetzen

Beitrag von hacktick »

ok .. also PASM auch noch .. war klar ;)

zeitkritisch ist so einiges wenn man an ein OS denkt bzw. eine Grafikengine

sonst alles richtig was ich zu spin gedichtet habe ?
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Spin - zerlegen und zusammensetzen

Beitrag von drohne235 »

jo, ich denke im wesentlichen ist es so wie du schreibst. Es gibt übrigens einen Emulator mit dem man schon mal ein wenig ohne Propeller rumspielen kann:

gear: http://forums.parallax.com/forums/defau ... 5&m=242685
pPropellerSim: http://sourceforge.net/projects/ppropellersim

Mit gear hab ich schon mal ein wenig gespielt. Mit dem entsprechenden Plugin kann man sogar Terminal/TV/VGA simulieren.


> Was mir dabei nicht ganz klar ist, wie lange sind diese Symbole verfügbar? Bis die Instanz des Objektes in
> der sie deklariert sind geschlossen ist?

Wenn du ein Objekt einfügst wird es compiliert und der entsprechende Code inklusive der Variablen sind physisch vorhanden, egal ob es verwendet wird oder nicht. Ein Objekt wird also nicht dynamisch zur Laufzeit geöffnet oder geschlossen und damit sind alle Symbole entsprechend permanent vorhanden. Die "Lebenszeit" der Objekte ist also statisch, wenn ich das so recht verstanden habe.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
wb1
Beiträge: 29
Registriert: Mi 10. Jun 2009, 20:54

Re: Spin - zerlegen und zusammensetzen

Beitrag von wb1 »

Hallo,
Die Entwicklung von ppropellersim ruht anscheinend.
Prinzipiell funktioniert das Teil, aber es gibt Probleme beim debuggen mit Marken, oder ich mach irgendeinen trivialen Fehler.
Das compilieren bringt den richtigen Code, die generierten Sprungziele im Debugger sind jedoch falsch.
Werden die Sprungziele als direckte Adresse angegeben ist es OK
Beispiel:
PUB Beispiel1
cognew(@asm, 0)
org 0
MOV dira, #$FF ` Setzte 255 in das Richtungsregister Code:a0ffecff
MOV muster, #0 ` Löschen eines Registers a0fc2800
:rrr
MOV outa, muster ` Ausgeben des Bitmusters an P0 .. P7 a0bfe814
ADD muster, #1 ` Inkrementiere das Registers 80fc2801
JMP #:rrr 5c3c0002
muster LONG 0
Fehlerhaft

direckte Zuweisung des Sprungziels OK
PUB Beispiel1
cognew(@asm, 0)
org 0
MOV dira, #$FF ` Setzte 255 in das Richtungsregister
MOV muster, #0 ` Löschen eines Registers
:rrr
MOV outa, muster ` Ausgeben des Bitmusters an P0 .. P7
ADD muster, #1 ` Inkrementiere das Registers
JMP #$2
muster LONG 0
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: Spin - zerlegen und zusammensetzen

Beitrag von Rainer »

Hi wb1,

ich habe Deinen Code mal durch Gear gejagt.
Klappt alles so wie Du geplant hast. Propellersim scheint wohl wirklich einen Bug zu haben (Habe Propellersim noch nicht benutzt, aber gut zu wissen).
Habe den Source im Spintool kompiliert und dann in Gear laufen lassen.

Bild

Bild

Gruß.
Rainer
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Antworten