Gute NAcht zusammen g Da endlich WinAVR bei mir läuft frage ich mich gerade ob der Compiler wirklich gut ist und ob es sich lohnt von Assembler auf C umzusteigen. Bieher habe ich AVRs nur in Assembler programmiert weil ich die Grundlagen hardwarenah lernen wollte. Aber jetzt werden die Ideen und Projekte komplexer und da bietet sich C ja an (evt. mit Assemblerroutinen kombiniert wenns zeitkritisch ist). Aber was taugt der WinAVR? Nehnem wir an ich schreibe ein Programm einmal in Assembler und einmal in C. Gibt es da ungefähre Anhaltspunkte inwiefern das C Programm größer und langsamer ist? Oder geht es hier nur um ein paar Prozenz die genausogut durch guten/schlechten Assemblercode entstehen können? Ist es spürbar oder eher nur messbar? Denn bevor ich mich voll auf C stürze und nachher merke dass die Programme auf einmal doppelt so groß werden oder Timings nicht mehr passen... ;)
Das kommt immer auf die Programmierer drauf an ... es gibt Leute, die schaffen mit C kompakteren Code als andere mit Assembler. Ein gut strukturiertes Programm bringt meistens mehr als die Wahl Assembler oder C. Und wenn Du C benutzt, hast Du mehr Zeit übrig, um Dir eine gute Struktur zu überlegen ;-) Bei kleinen Programmen wird es Dir sicher leicht fallen, den Compiler bzgl. Speed/Größe mit asm zu schlagen. Je größer Dein Projekt aber wird, desto unübersichtlicher wird alles, und dann wirst Du in Assembler irgendwann ineffizienter als der Compiler. Und gerade bei größeren Projekten spielt z.B. Speicherplatz ja erst eine Rolle. Ich bin übrigens von WINAVR voll überzeugt, ich habe schon wesentlich schlechtere kommerzielle Compiler gesehen. Viele Grüße, Stefan
Der Geschwindigkeitsunterschied zwischen C und ASM ist sicherlich meßbar, aber die Frage ist an welcher Stelle man überhaupt das wirklich allerletzte an Performance herausholen muss. Ins besondere wenn das Programm mit einem Benutzer interargieren muss ist die Geschwindigkeit relativ egal, die Schnittstelle Mikrocontroller/Mensch ist immer um Größenordnungen langsamer. Und wenn man mal irgendwo etwas wirklich zeitkritisches hat, kann man das ja wie du schon selbser sagtest in asm lösen. Das sollte aber nur in den seltensten Fällen nötig sein.
Der WINAVR ist schon sehr gut, ich nehme ihn auch. Allerdings hatte ich zuerst den Fehler gemacht, einen AT90S2313 programmieren zu wollen, da ich schon viele Sachen mit dem C51 auf dem AT89C2051 gemacht hatte (auch mit float). Das geht nicht, AVR Code benötigt mehr Platz als 8051-Code. Aber ab dem ATMega8 ist alles paletti, den kann man sehr gut in C programmieren. Bei den riesigen 1kB SRAM leiste ich mir sogar oft den Luxus, Textkonstanten im SRAM zu belassen, da das LPM-Macro doch etwas umständlich zu handhaben ist. Peter
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.