PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ist Assembler noch wichtig?



Mercator
09.02.2006, 19:26
Ich würde mir gerne ein oder mehrere Bücher über Elektronik/Robotik und den Umgang mit Mikrocontrollern kaufen. (https://www.roboternetz.de/phpBB2/viewtopic.php?p=156064#156064)

Ich würde die Controller am liebsten in Assembler (am aller liebsten in c++, aber bei 8-bit.Controllern wird das schwierig) beschreiben, da ich glaube, dass das Vorteile in Bezug auf Geschwindigkeit, Speicherplatz und zeitkritischen Anwendungen (bei RISC mit genau einem Assemblerbefehl/Takt ist das gut abschätzbar) bringt. Besonders bei 8-bit-Controllern könnte das einen Vorteil bringen.
Ist das wirklich so, oder ist heute Assembler eher hinderlich und unproduktiv im Gegensatz zu einfacheren Sprachen wir C oder gar BASIC?
Verliert man in Assembler bei größeren Programmen leicht den Überblick?

Diese Buch scheint wirklich toll zu sein:
http://www.amazon.de/exec/obidos/ASIN/3907857046/qid=1139513349/sr=1-1/ref=sr_1_10_1/302-9816553-3628061
Aber was ist der Nachteil von Bascom?

chr-mt
09.02.2006, 20:02
Hi,
Aua, jetzt kommt gleich wieder ein Glaubenskrieg :D


Aber was ist der Nachteil von Bascom?
kommt drauf an, was du machen willst.
Wenn dir Geschwindigkeit über alles geht, geht wohl kaum ein Weg an Assembler vorbei.
Mir BASCOM kann man allerdings schon sehr viel erreichen, wenn es denn nicht absoluter Highspeed sein muß.
Und das ganze geht auch noch recht einfach.
Jede Menge fertiger Funktionen nehmen dir viel Arbeit ab.
Und wenn es unbedingt mal schneller gehen soll, dann kann man auch Assembler Befehle einbinden.
Nachteil bei Bascom :
sowas geht nicht: X=a/b+c*d
Das muß man immer stückchenweise aufdröseln.
Warum das nicht geht, keine Ahnung. Das konnte damals schon mein ZX81 ;)

Ich bin jedenfalls trotzdem sehr zufrieden mit Bascom.
Ich hätte einige Projekte nicht rechtzeitig fertigbekommen, wenn ich mich mit anderen Sprachen hätte rumschlagen müssen.

Mit "C" habe ich mich auch mal befasst, aber irgendwie ging das nicht an mich. Ich fand das umständlicher und komplizierter als Assembler.
Geschmacksache. Ich habe jedenfalls nach einigem probieren aufgegeben, da ich ja mit Bascom eine einfache Alternative habe.
Warscheinlich gewöhnt man sich auch schnell an die "C" syntax, wenn man genug Energie reinsteckt.


oder ist heute Assembler eher hinderlich und unproduktiv im Gegensatz zu einfacheren Sprachen wir C oder gar BASIC?
Naja, das kommt eben wieder auf das Einsatzgebiet an.
Die Produktivität ist bei Bascom eben enorm, da man mit einem Basic-Zehnzeiler eben schneller fertig ist, als mit einem 100 Zeilen-Assemblercode. ;)

Bei Bascom muß man sich um viele Sachen eben nicht selber kümmern.
Das geht einfach so.

Wenn man allerdings nicht mit Bascom weiterkommt (ging mir noch nicht so) , weil zB. Timingprobleme auftauchen, dann ist es schön, noch eine andere Sprache zu beherrschen.

Gruß
Christopher

izaseba
09.02.2006, 20:26
Aber was ist der Nachteil von Bascom?

Die Antwort ist ganz einfach,
solltest Du nur Bascom verwenden und den Blick über den Tellerrand scheuen, wirst Du nie verstehen, was in Deinem AVR vorgeht, und über jedes Problem, wozu es keine Befehle in Bascom gibt stolpern.

Solltest Du schnell zum Erfolg kommen wollen, nimm Bascom, aber versuche es auch mit Assembler, C damit Du weißt, wie man es anders machen kann wenn es Problemme gibt.

Gruß Sebastian

Florian
09.02.2006, 20:50
Hallo Mercator!
Vielleicht kann ich Dir mit dem folgenden Link weiterhelfen und dem Glaubenskrieg aus dem Weg gehen bzw. ihn verkürzen! ;o)
https://www.roboternetz.de/wissen/index.php/Gegen%C3%BCberstellung_Assembler_und_Hochsprache

chr-mt
09.02.2006, 21:06
Hi,
das mit dem "Glaubenskrieg" war sowieso nur Spaß ;)
Macht eh' keinen Sinn.
Man sollte sich alles mal angucken und dann sehen, was einem besser liegt, bzw. was für das Projekt besser geeignet ist.
Über den Tellerrand schauen hat sowieso noch nie geschadet.
Kann nur positiv sein.

Gruß
Christopher

Mercator
09.02.2006, 22:01
Danke für eure Hilfe. Ich werde wahrscheinlich weiter in C programmieren, da es vom Komfort und Leistung ungefähr die Mitte darstellt.
Kennt ihr Bücher, die sich mit der allgemeinen Handhabung von Mikrocontrollern, EEPROMS, Übertragungselektronik (also alle elektronischen Themen zum Roboterbau) beschäftigen? Denn wenn ich bei Amazon suche, dann weiß ich oft nicht welches Buch nun zu weit führt (ich möchte das Buch auch verstehen, wenn ich das Fach nicht studiere) und welches überhaupt die Themen durchnimmt, die mich interessieren.

Vogon
09.02.2006, 23:13
... oder ist heute Assembler eher hinderlich und unproduktiv im Gegensatz zu einfacheren Sprachen wir C oder gar BASIC ...
Wenn du den Assembler beherscht, kannst du dich mit dem Prozessors in seiner Muttersprache unterhalten.
Aber da liegt auch das Problem, denn jeder Prozessortyp, beim AVR genauso wie bei Intel, AMD, Motorola usw hat seinen eigenen Dialekt. Um die Feinheiten zu kennen brauchst du Übung und die richtigen Datenblätter.

Das soetwas aber unproduktiv ist, hat man schon vor langer Zeit gemerkt. :-&

Die erste gute Abhilfe war und ist immer noch C. C ist (für mich) ein Assemblerersatz mit dem man sehr nahe an die Ergebnisse des Maschinenspezifischen Asembeler kommt. Wenn du irgendwann einen anderen Prozessor nehmen willst, sollte dein C-Programm dort auch laufen. Der C-Compiler ist der Dolmetscher und übersetzt in die Muttersprache des richtigen Prozessors. Wenn er gut ist, kennt er auch die Feinheiten des richtigen Dialekts. Wie gut er wirklich ist, kannst du dir an dem von C erzeugten Asembler-Programm anschauen. (wenn man was davon versteht :-b )

Bascom ist ein Basic-Dialekt für den AVR. Da hast du, wie oben geschildert, einige Erleichterungen. Oft ist mit wenigen Zeilen deine Idee in ein Programm umgesetzt. =P~ Aber er unterstützt nicht jeden Prozessseor der auf dem Markt ist. (aber das kann sich ja noch ändern [-o< ) Auch da hast du die Möglichkeit, dir das erzeugten Asembler-Programm anschauen.

Da es (vermutlich) keinen Prozessor gibt, zu dem es keinen C-Compiler gibt, ist die Zahl der Programmierer und die von ihnen geschriebenen Programme riesengross. Es ist sogar so, das es den passenden C-Compiler vor dem Prozessor gibt.
Das hatte zur Folge das C zu C++ weiter entwickelt wurde. So kann man sein Grundwissen in C weiter benützen und hat auch die Vorteile der moderneren Sprachen. :oops:

Was aber das Problem selbst betrifft.
Du brauchst erst mal eine Lösung. Die ist doch das Wesendliche. Mit welcher Programm-Sprache du es dann deinem Gerät beibringst, steht doch erst an danach an.
Wenn du in einem fremden Land Hunger hast, reichen zur Not auch die Hände. :cheesy: Die (Programm-) Sprache ist doch nicht die Lösung, sondern deine Idee und Strategie. :-({|=

Soooooo einfach zu Beantworten ist das nicht.
Ums Lernen kommts du sowiso nicht drumherum !
Was Besser, Richtig, Falsch usw ist, kannst du erst Beurteilen wenn du es kennen gelernt hast.

Sonst trifft der Spruch des zu :-$ Leute fresst Schei$$e, denn Millionen von Fliegen können sich nicht irren! [-o<

AlexAtRobo
10.02.2006, 09:00
Glaubenkrieg!!! Und wehe Ihr macht mir Karikaturen über meinen allerliebsten Assembler!!! Dann zünd ich ein paar C Fahnen an und schick das Video an CNN!

Nein, und Ernst beseite, beides hat vor und nachteile. Ich bin halt ein Anhänger von Assembler, weil wenn was nicht geht, weiß ich genau, dass es mein Fehler im Code sein muß. Und schneller ist es auch, du kannst einfach jeden Takt mitzählen. Und ich mache schon mal Zeitkritische Anwendungen wo ich jeden Takt brauche.
C ist halt einfach schöner, wenn man mit komplexeren Datentypen arbeitet. Wird schon ein bisschen mühsam, wenn du z.B. einen Temperatursensor per ADC einliest, und den Wert dann umrechnen mußt inklusive Komma - da mußt du halt im Assembler schon einige Tricks anwenden. Also ein Klassischer Fall für C mit netten Bibliotheken. Geht aber auch mit Assembler ;-).

lg

Alex

super_castle
10.02.2006, 15:21
"Glaubenkrieg!!! Und wehe Ihr macht mir Karikaturen über meinen allerliebsten Assembler!!! Dann zünd ich ein paar C Fahnen an und schick das Video an CNN!""

ich glaube, das sollte man erst mal nicht so reinbringen. Es gibt einen christlichen verein "C".

Castle

super_castle
10.02.2006, 15:24
"Geht aber auch mit Assembler"

... der c-code ist ja asm-code....der dann in hex umgewandelt wird.

Castle

AlexAtRobo
10.02.2006, 19:03
ist schon klar, das c am schluss assembler wird. Nur wenn du solche sachen in Assembler nativ programmierst, dann sieht das sicher anders aus als was der c compiler draus macht. Da nimmt man schon mal eine Abkürzung und Schummeleien um Zeit bzw. Komplexität der Routinen zu sparen. Die Routinen sind schlicht effitient, nicht schön, und wenn schnell dann nie allgemein widerverwendbar. Wenn du selbst Assembler programmierst weißt du was ich meine.

SprinterSB
13.02.2006, 12:17
Assembler zu können ist jedenfalls von Vorteil.

Etwa, wenn man mal beurteilen will, was ein Compiler so anstellt. Auch wenn man in einer Hochsprache programmiert, kann das ganz hilfreich sein. Teilweise um Fehler zu finden, oder die Güte/Dichte des Codes zu bewerten und bei kritischen Sachen Dinge anders zu implementieren.

Was Optimierungen angeht , liegt GCC weit vor BASCOM. BASCOM hingegen kommt mit einer umfangreichen Bibliothek und GUI (geht also über einen Compiler weit hinaus).

Falls es wirklich zeitkritisch wirg, kann man in C auch Assembler-Schnippsel einbauen oder ganz Assembler-Module dazutun. Damit hat man den Assembler auf die kritischen Teile beschränkt und muss sich nicht auf der tiefen Ebene plagen.

Für kleinere Module/Funktionen ist nativ implementierter Assembler C-Code überlegen. Für komplexe Sachen kann das aber anders aussehen. Nämlich dann, wenn der Assembler-Programmierer aufgrund der Komplexität den Überblick verliert oder Optimierungen schlicht übersieht...

Was bei BASCOM rauskommt sieht so aus, also würde das praktisch überhaupt nicht optimieren (hat jetzt nix mit Glaubenskrieg zu tun, ist eben so...).