PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : welche programmiersprache ist die effizienteste?



Gary
24.07.2009, 20:47
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^^

021aet04
24.07.2009, 20:57
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)

markusj
24.07.2009, 21:05
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

Willa
24.07.2009, 21:13
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.

radbruch
24.07.2009, 21:45
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

Besserwessi
24.07.2009, 21:59
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.

Nicolasfura
24.07.2009, 22:17
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.

ikarus_177
25.07.2009, 09:40
Hi Nicolasfura,

nicht nur C kann man mit Assembler mischen, auch BASCOM bietet diese Möglichkeit.

Viele Grüße

Zwerwelfliescher
25.07.2009, 09:54
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.

Besserwessi
25.07.2009, 11:04
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.

rockin_santa
25.07.2009, 11:54
Vielleicht nochmal eine andere Sichtweite:
Ich habe mit ASM angefangen und kam damit sehr gut klar, steige jetzt aber gerade auf C um, weil mein Bot vektorielle Navigation kriegen soll und ich glaube, diese Mathematik kann ich persönlich einfacher in C beherrschen.
Die Antwort auf die Frage nach der richtigen Programmiersprache fängt bei Dir und Deinem Bot an.
Was kannst Du schon? - Du hast Kenntnisse in BASIC, nutze BASCOM.
Was soll der Bot können? Gibt es zeitkritische hardwarenahe Funktionen, nimm ASM bzw. Inline-ASM. Gibt es komplexe mathematische Aufgaben, nimm C.
Worauf liegt Dein Schwerpunkt? - Willst Du hardwarenah programmieren nimm ASM.
Abstrakter Code bietet C. BASCOM liegt - glaub ich - irgendwo dazwischen.

Was soll der µC überhaupt machen?

Hat man sich für eine Sprache entschieden, und hat Übung mit dieser, kann man sicherlich auch die meisten Aufgaben der Heimrobotik in dieser Sprache besser lösen als dafür extra umzusteigen.
Ist es für Deine Aufgabenstellung überhaupt nötig, die Sprache zu wechseln?
---
Ich habe weder mit Basic noch mit BASCOM je gearbeitet. Ggf. kann ein BASCOM-Nutzer meine Ausführungen noch ergänzen

Gruß und gutes Gelingen

rockin_santa

oberallgeier
25.07.2009, 12:47
Hi,

die Diskussion um Programmiersprachen finde ich insbesondere dann lustig, wenn die konkrete Frage so eingeschränkt ist wie oben:
welche programmiersprache ist die effizienteste?
Jeder Programmierer weiß, dass es nur eine einzig wahre Computersprache gibt. Jede Woche eine andere. Im Jahr 2007 zählte Bill Kinnerlsey von der Universität in Kansas 2500 Programmiersprachen, während damals Diarmuid Piggott von der Murdcoch University in Perth auf mehr als 8500 kam. Und das ist ja nicht alles: die Diskussion der Kleinender mit den oder vielmehr gegen die Großender ist ja schon legendär (Anmerkung: Kleinender schreiben das LSB ganz rechts . . .). Und, soweit ich weiß, klärte uns Brian W. Kernighan 1981 über die Tatsache, dass die Schreibweise
x:=0; y:=x+1; z:=2
in Pascal ok, in C aber syntaktisch falsch ist, mit seiner Schrift "Why Pascal is not my favorite programming language" auf und läutete damit vermutlich den Niedergang von Pascal ein. Immerhin haben wir bei Microcontrollern nur eine begrenzte Wahl - und müssen uns keine Gedanken über imperative oder funktionale, über objektorientierte oder deklarative Sprachen machen. Und daher ist auch die etwas unklare Fragestellung im vorliegenden Kontext ganz ok *gggg*.

Ich habe mit FORTRAN Textverarbeitung und Bitmanipulation gemacht. Eines der ersten Adventurespiele ist in Fortran geschrieben. Mit Lisp habe ich mir viele Stunden Arbeit gespart durch einen Offset zu einem CAD-Programm. Nun könnte ich ja weiter in Fortran programmieren - könnte mir einen Fortran-nach-C-Compiler schreiben, der mir viel Mühe abnähme - aber das wäre radbruchs Ratschlag etwas zuuu weit getrieben. Ich habe halt für meine µController-Projektchen Assembler gelernt oder eher aufgefrischt von alten x86- und Z80-Dialekten und danach C im Hinblick auf µController gelernt. Das reicht für meine Vorhaben. Damit werde ich aber auch nie sagen, dass andere Programmiersprachen (für µController) nix taugen. Allenfalls leise andeuten, dass z.B. der Umstieg von AVR auf ARM mit C-Code etwas leichter fällt . . . . aber das ist ja oben schon angeführt.

Richard
25.07.2009, 16:25
Moin moin.

Die Frage ist nicht leicht zu beantworten, jede Sprache hat seine
Vor und Nachteile auf dem Programmierer und der Hardware bezogen.

Ich habe meine ersten Erfahrungen mit ASM gemacht und da ich nichts
Anderes kannte war ich damit auch voll zufrieden. Außerdem(!!!) halte
ich ASM gerade für Anfänger für ein absolutes MUß um zu lernen wie
so ein µC überhaupt arbeitet. ASM ist halt sehr Hardwarenah, läuft
deshalb allertdings auch immer nur auf den Chip für welchen das
Prog geschrieben wurde. :-(

Man muß unter ASM allerdings die Datenblätter lesen und auch
verstehen lernen was einiges an Einarbeitung bedeutet. Dafür kann
man dann aber auch jeden einzelnen Befehl nachvollziehen, weiß
also quasie genau was der µC wann/wie macht. Nachteil man muß
wirklich alles selber "zu Fuß" schreiben. :-(

Bei Programme wie Basic u.s.w. reicht ein Print "Hallo" und Hallo
erscheint wo auch immer. Wenn nicht..tja wer weis was der
Compiler aus (Print "hallo") an Maschnencode generiert????
Soll bedeuten, der Programmierer muß sich darauf verlassen das
die Ersteller der Hochsprache keinen Mist gebaut haben! Wenn ich
da an C und seine Stack Überläufe denke.....au, au, au.

Andererseits sind Hochsprache Programme leichter zu lesen und
können auch relativ einfach für unterschiedliche Prozessoren
kompiliert werden. Das ist ein echter posetiver Zeit/Kostenfacktor.

Basc ist recht leicht zu erlernen und reicht für die meisten Anwendungen.
C ist nicht wirklich schwieriger und vor allem auch gebräuchlicher, was
für einen späteren Beruflichen gebrauch sicherlich von Nutzen sein
kann.

Aber zuletzt noch einmal!

Wenn Du echte gute Grundkentnisse erwerben willst, verstehen
lernen willst wie so ein µC intern arbeitet. Dann schreibe zumindest
am Anfang ein paar kleine ASM Programme. In z.B. Bascom ein
Print "Hallo" eintippen und das klappt dann, ist nett und macht Spaß.
Aber Du hast deshalb immer noch NULL Wissen wie der µC das
jetzt gemacht hat. :-(

Kopiere Dir alle Befehle nicht nach ABC, sondern nach Typ z.B.
Sprungbefehl..gleiches für Register und und und. Das pappst
Du dann über dem Monitor an die Wand. 1 Wochenende und
Du kannst richtig tolle kleine ASM Programme schreiben.

Ich muß allerdings zugeben das bei meinen ersten "Computern"
PC100 = (AIM65 (?)) vor ca 30 Jahren, das komplette Betriebssysten
in sehr gut beschriebenen Assembler (ca 2000 Seiten) dabei war.
ich konnte also Abschreiben und austesten ohne Ende. :-)
SO etwas grenzgeniales gibt es heute leider nicht mehr!

Grüße Richard

oberallgeier
25.07.2009, 19:10
... Man muß unter ASM allerdings die Datenblätter lesen und auch verstehen lernen ...Sollte man bei anderen Sprachen vielleicht auch? Dann wäre dieser Ratschlag vielleicht nicht nötig?

... Kopiere Dir alle Befehle nicht nach ABC, sondern nach Typ z.B. Sprungbefehl ...Zumindest sind in den Datenblättern von ATMEL die Mnemonics der Befehle schon geordnet:
ARITHMETIC AND LOGIC INSTRUCTIONS
BRANCH INSTRUCTIONS
BIT AND BIT-TEST INSTRUCTIONS
DATA TRANSFER INSTRUCTIONS
...
Zitate aus 8161C–AVR–05/09

Mnemonics dürften ja reichen, wer programmiert denn heute noch direkt in Hex?

Gary
27.07.2009, 19:07
ui das sind fiele antworten für 2 tage^^

also ich denke ich werde erstmal mit basic starten da ich es schon ein wenig behersche und auch schon ein paar programme erfolgreich damit geschrieben habe. wen die leistung von basic nicht mehr ausreicht kann ich ja immernoch eine andere sprache lehrnen, ich muss mich ja nicht gleich übernehmen.

ok, danke für die zahlreichen antworten^^

MFG Gary