Forum: Mikrocontroller und Digitale Elektronik µC mit assembler u. c++ befüllen


von Peter (Gast)


Lesenswert?

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

von Joe (Gast)


Lesenswert?

Aus meiner Sicht nicht !!!

von Εrnst B. (ernst)


Lesenswert?

Das interfacing zw. ASM und C++ ist wegen der Calling Convention etwas 
frickelig...
Einfacher: alles als C++ machen, ASM-Code als inline-asm einbinden...

von Christian R. (supachris)


Lesenswert?

Wozu braucht man Klassen, Mehrfachvererbung, Polymorphie usw auf einem 
µC???
Reicht da nicht auch reines C mit Inline ASM?

von Stefan (Gast)


Lesenswert?

"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.

von payce (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

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++?

von Sajuuk (Gast)


Lesenswert?

>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.

von Patrick K. (kaplan)


Lesenswert?

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
Noch kein Account? Hier anmelden.