Moinsen eine newbie-frage: macht es sinn einen µC teilweise mit assembler und teilweise mit c++ zu programmieren? z.b. würde ich gerne die ganze datenabwicklung (geschaufel von a nach b etc.) mit assembler schaukeln wollen und mit c++ einen tollen webbrowser programmieren? da peter
Das interfacing zw. ASM und C++ ist wegen der Calling Convention etwas frickelig... Einfacher: alles als C++ machen, ASM-Code als inline-asm einbinden...
Wozu braucht man Klassen, Mehrfachvererbung, Polymorphie usw auf einem µC??? Reicht da nicht auch reines C mit Inline ASM?
"tollen Webbrowser programmieren" Ein Device mti Webbrowser in c++ programmieren und die Datenschauffelei mit ASM...interessant.Im Allgemeinenen stehen aktuelle Compiler in dem Ruf durchaus recht gut optimierten Code zu prodzieren. Deiner Frage nach zu urteilen bist du wohl noch Anfänger? Da wird der Compilercode wahrscheinlich nicht viel schlechter als dein ASM werden. Vielleicht kannst du ja alles in c++ machen, dann sparst du dir das Koppeln.
Lese Dir das hier mal durch und schaue dann, ob Du wirklich als Newbie den Einstieg als C + ASM Variante gestalten willst: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Assembler-Dateien_2 ... glaub ich nicht. ;) Erstmal bei C oder ASM bleiben. Bei einfachen Sachen bevorzuge ich nach wie vor ASM (weil man dann wenigstens 100% weiß, was passiert). Bei größeren Sachen - und ein Webbrowser (falls das ernst gemeint war) IST groß - lieber C. Ab einer bestimmten Größe von Proggis (meinetwegen 4 kByte) finde ich stellen sich die Optimierungsalgorithmen von AVR-GCC zu 99% schlauer an als man es als Normalsterblicher Hobbyisten-ASM-Programmierer je könnte. Können solltest Du irgendwann beides. Manche Probleme in GCC lassen sich nur mit ASM Kenntnissen bewältigen. Größere Geschichten (Finite state machines bspw.) sind in C viiiiihiiiiel übersichtlicher und damit bug-unanfälliger zu programmieren.
danke für den link... newbie bin ich was die sache mit µC angeht, daher auch meine frage. Gibt es sowas für reinen c++ - Code auch?
Andere Alternative: Erstmal alles in C++ programmieren, und wenn dann was zu langsam ist, das gezielt in inline-ASM umsetzen. Ggf kannst du dir auch den vom Compiler erzeugten ASM-Code ansehen und von Hand optimieren, wenn da wirklich noch signifikant was rauszuholen sein sollte. @Christian R.: > Wozu braucht man Klassen, Mehrfachvererbung, Polymorphie usw auf einem > µC??? Man kann C++ auch sinnvoll einsetzen, ohne jedes einzelne mögliche Feature verwendet zu haben. Auf vielen µCs gibt's kein Dateisystem. Darf ich dann C nicht einsetzen, weil man ja fopen nicht braucht? > Reicht da nicht auch reines C mit Inline ASM? Welchen Vorteil hat C denn deiner Meinung nach gegenüber C++?
>Lese Dir das hier mal durch und schaue dann, ob Du wirklich als Newbie >den Einstieg als C + ASM Variante gestalten willst: Also ich bin auch Newbie und hab mit C + ASM angefangen. Sehe da kein großes Problem.Allerdings hatte ich die Variante bevorzugt da ich anfangs kein Plan von C hatte.Mittlerweile (ca 3 Wochen später) mach ich fast alles in C und hab fast den gesamten ASM code ersetzt.Nun bin ich dabei meinen C Code zu verbessern also mehr mit Arrys, Zeigern, Switch usw. zu arbeiten(mein Code war sehr if verseucht :-) ).Also zum lernen find ich C + ASM super, da ich anfangs so mein Programm zum laufen bekommen habe was ich mit reinem C vermutlich nicht geschafft hätte.Aber ich denke wenn man von C/C++ mehr Ahnung als von ASM hat macht es wenig Sinn bei größer Sachen ASM zu verwenden, das ständige push..push..push und pop...pop..pop ist lästig und irgendwann verliert man total den Überblick.
ich hab mal versucht einfach die zeile
1 | while (!(SPSR & (1<<SPIF))); //warte auf SPIF |
durch folgenden assembler code zu ersetzen.
1 | asm volatile ("loop1: \n\t" |
2 | "sbis spsr,spif \n\t" |
3 | "rjmp loop1 \n\t" |
4 | ::); |
natuerlich klappt das nicht. aber warum? laut AVr-LibC: "You can use the same assembler instruction mnemonics as you'd use with any other AVR assembler." und ATMELs source code:
1 | Wait_transmit:
|
2 | sbis spsr,spif |
3 | rjmp Wait_transmit |
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.