-
-
welche programmiersprache ist die effizienteste?
ich bescheftige mich erst seit kurzem mit microkontrollern und finde es echt toll was man alles damit anstellen kann, allerdings verfüge ich über keinerlei programmierkenntnisse. ich habe zwar mit dem tutorial von roboternetz ein bischen basic gelehrnt aber ein freund der zurzeit informatik studiert hat mir von basic dringend abgeraten, ich sollte lieber C und C++ lehrnen. ich habe auch beiträge gesehen wo die rede von assambler ist. also was für eine sprache soll ich am besten lehrnen, welche bringt die meisten vorteile?
MFG Gary^^
-
Erfahrener Benutzer
Robotik Visionär
Das Einfachste zum erlernen ist Basic. Basic ist aber nicht so schnell, wie C oder ASM. Basic ist nicht für jeden µC verfügbar
Die nächste Stufe näher am µC ist C. Es ist etwas schneller als Basic, aber langsaer als ASM. Ich schreibe meine Programme in C.
ASM ist die schnellste der 3 Programiersprache. Sie ist allerdings auch am schwierigsten zu erlernen. ASM wird normalerweiße bei sehr zeitkritischen Anwendungen verwendet. ASM kann man meistens mit C kombinieren (Inlienassembler)
-
Erfahrener Benutzer
Roboter Genie
Man sollte noch erwähnen, dass ASM primär schnell ist, wenn man sich damit auskennt/Erfahrung hat und willens ist, da Zeit reinzustecken.
Oft ist C nicht viel langsamer, dafür ist der Code dann aber oft besser Les- und Wartbar.
Dem Compiler fallen manchmal auch abstruse Optimierungen ein, auf die du selbst nicht ohne weiteres kommen würdest ...
mfG
Markus
-
Erfahrener Benutzer
Roboter Genie
Alle schimpfen immer auf Basic.... Warum eigentlich? Gibt es echte, objektive Vergleiche der Geschwindigkeiten von kompiliertem Code aus verschiedenen Programmiersprachen?
@Gary: Ich habe einen Tricopter mit Basic programmiert. Das ist eine ziemlich zeitkritische Angelegenheit, aber es funktioniert wunderbar. Würde mich mal sehr interessieren ob der gleiche Code - in C geschrieben - schneller laufen könnte...
Außerdem sind bestimmt 90% der Roboterprojekte nicht sonderlich zeitkritisch.... Falls du lieber mit Basic programmieren willst - mach es einfach. Das funktioniert bestimmt für fast alle Projekte.
-
Moderator
Robotik Visionär
Hallo
Die effizienteste Programmiersprache ist diejenige mit der du mit dem geringsten Aufwand dein Ziel erreichst. Aufwand ist dabei alles was benötigt wird um die gewünschte Funktion in den Kontroller zu stampfen.
Wenn du Basic (Bascom?) schon kennst sehe ich keinen Grund eine andere Sprache zu wählen. Und wenn du irgendwann mal selbst einen Grund finden solltest, kannst du immer noch wechseln.
Übrigens ist es auch sehr effizient, wenn man die Suchfunktionktion des Forums nutzt. Zum Thema Programmiersprachenvergleich gibt es unzählige Threads.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
-
Erfahrener Benutzer
Robotik Visionär
Es ist nicht so das Basic prinzipiell langsamer ist als C. Das hängt vom Compiler ab. Tendenzmäßig sind Basiccomplier aber mehr auf Anfänger zugeschnitten, wo die Geschwindigkeit nicht so wichtig ist. So ist der BSCOM basic Compiler für den AVR nicht besonders schnell. Dagegen ist GCC schon recht gut, die kommerziellen C Compiler sollten eher noch schneller sein, sonst würde die kaum einer nutzen.
Im Wiki Bereich gibt es da ein paar Vergleiche. Es hängt aber immer sehr vom Programm ab, welcher compiler besser ist.
GCC kennt z.B. nur 32 BIT Fließkommazahlen. Mehr Auflösung müßte man von Hand machen. Auch das Rechenen mit Byte Werten ist nicht optimal: da wird oft unnötig auf 16 Bit erweitert.
Bascom hat ein ziehmlich lange Liste von speziellen Funktionen die gut optimiert sein können. In C wird man da mehr echten C Code nutzen müssen. Der andere Vorteil den ich bei Bascom sehe, ist das es da leichter ist die wirklich zeitkritischen Funktionen per inline ASM zu schreiben. Das inline ASM interface von GCC ist recht komliziert, aber auch sehr mächtig.
Dafür schreibt Bascom die Variablem immer zurück ins RAM. Sonst würde man ohne ein "volatile" zum markieren von variablen die auch in einer ISR genutzt werden auch nicht klar kommen. GCC kann Zwischenergebnisse auch im Register halten und so teilweise viel schneller werden.
Wenn man schon ein Verständniss davon hat, wie eine CPU arbeitet, dann ist ASM nicht unbedingt schwerer zu lernen. In gewisserweise ist es sogar einfacher, denn der Spachumfang ist eher begrenzt und klar begrenzt. Auch braucht man sich nicht mit Compiler BUGs rumschlagen, ein Assembler ist normalerweise ohne wirkliche BUGs, höchstens mal was in der Oberfläche. So wie ich das sehe, ist es auch nicht so schwer ein kurzes Porgramm besser als die Compiler hinzukreigen. Das Problem ist nur, das ASM Code recht schwer lesbar ist und das längere Programme deutlich erschwert.
Bis auf wenige Ausnahmen muss man längere Programme auch nicht mehr in ASM Schreiben. Der größte Teil geht über den Compliler und für wirklich Zeitkritische Dinge per INLINE ASM.
Der Vorteil von kürzerem Code in ASM (bzw. C gegen BASCOM) hat an Bedeutung verloren, seit auch µCs mit viel Speicher erschwinglich sind.
Einen weiteren Vorteil hat C noch: die Prgramme sind besser auf andere Hardware übertragbar. Auch wenn es Bascom nun gerade für AVR und die 8051 Falmilie gibt.
-
Neuer Benutzer
Öfters hier
Hallo. Ich fang jetzt auch demnächst mit µCs an. Ich habe geplant, erstmal Assembler zu lernen (um die Hardware zu verstehen) und dann auf C umzusteigen. Ich denke, bei C hat man Vorteile, wenn man Assembler mitnutzen (inline Assembler) kann.
-
Erfahrener Benutzer
Roboter Experte
Hi Nicolasfura,
nicht nur C kann man mit Assembler mischen, auch Bascom bietet diese Möglichkeit.
Viele Grüße
-
Erfahrener Benutzer
Roboter-Spezialist
Ich habe mit C an meinem Pro-Bot128 angefangen. Viele meinen, dass C schwerer ist als Assembler. In meinen Augen ist Assembler leichter. Seit das ich das Lernpacket Mikrocontroller habe programmiere ich nur noch nin Assembler.
Hier ein gutes Tutorial:
http://www.mikrocontroller.net/articles/AVR-Tutorial
MGF Flexxx
PS: Schau dir versiedene Sprachen an.
-
Erfahrener Benutzer
Robotik Visionär
Es gibt dann auch noch die C-Controll Module. Die C und Basic Versionen dafür laufen über einen Zwischencode und sind damit nochmal deutlich langsamer.
Für Viele Anwendungen ist aber die Rechengeschwindigkeit auch nicht wichtig. Wichtiger ist oft die Zeit die man braucht ein Programm zu schreiben und ggf. die Fehler zu beseitigen.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen