Forum: Mikrocontroller und Digitale Elektronik Anfänger braucht etwas start hilfe


von Alex S. (Firma: Therm.) (xxslayerxx)


Lesenswert?

Hi Leute,

ich lese seit ein paar Tagen eine menge über Mikrocontroller und finde 
das Thema wirklich sehr interessant.

Nun habe ich mir vorgenommen, mal selber etwas zu bauen.
Habe ein wenig überlegt und bin zum Entschluss gekommen, dass ich einen 
kleinen Temperatursensor mit Display in meinem PC Gehäuse einbaue.

Für das Display schneide ich dann ein Loch in mein Gehäuse und setze 
dieses dort ein.

Nun da ich ein absoluter Anfänger bin, habe ich ein paar fragen.

1. Was soll ich für einen Mikrocontroller verwenden?
Bis jetzt habe ich sehr viel über den AVR gelesen. Hilft dieser mir hier 
weiter?

Mir ist wichtig, dass ich in C++ Programmieren, da ich seit 4 Jahren die 
Sprache programmiere und sehr gut behersche.

2. Wo bekommt man Bauteile wie z.B. ein Display und alles was dazu 
gehört.
Habe schon ein wenig in Google gesucht, doch ich weiß nicht, nach 
welchem Begriff ich suchen muss. Unter welchen Begriff fällt das alles?

3. Sollte ich meine Platinen selber "ätzen" oder gibt es andere 
Möglichkeiten.

Ich möchte ungerne eine Lochplatte verwenden.
Dazu habe ich bereits ein wenig gesucht und dies gefunden:
http://www.blafusel.de/misc/platine.html

Oder ist es zu viel Aufwand, diese ganzen Sachen zu besorgen um das 
selber herzustellen?

Ich hoffe ich könnt mir bei meinen 3 Fragen etwas weiterhelfen.

Mit freundlichem Gruß
xXSlayerXx

von Magic S. (magic_smoke)


Lesenswert?

Wenn Du in C Programmieren willst und ohne Lochraster arbeiten möchtest, 
ist der µC eigentlich fast egal.

von Sukzessive A. (sukapxconv)


Lesenswert?

Für Anfänger eignen sich AVRs.
Bevor du dich über fehlgeleitete Verbindungen auf deiner Platine 
ärgerst. solltest du ersteinmal ein Arduino Board nehmen. Da hast du den 
Einstieg vom Framework mit vielen Beispielen bis zur Möglichkeit des 
Barmetal Programmierens.

Zubehör kannst du dir dann auch aus vielen Addons heraus suchen bzw. 
entscheiden sobald deine erste LED blinkt.

von Achim M. (minifloat)


Lesenswert?

Alex S. schrieb:
> Mir ist wichtig, dass ich in C++ Programmieren, da ich seit 4 Jahren die
> Sprache programmiere und sehr gut behersche.

Du kannst also auch C => Wenn du mit GCC umgehen kannst, kein Problem. 
Auch wenn man oft nicht die Objektorientierte Keule rausholen muss:
AVR-GCC-Tutorial

AVR ist in diesem Forum (noch) sehr gut vertreten, also bekommst du 
sicher immer gut Hilfestellung.

Alex S. schrieb:
> Wo bekommt man Bauteile wie z.B. ein Display und alles was dazu
> gehört.
Elektronikversender
Lokale Elektroniklieferanten
... exotische Sachen auch auf Ebay oder auch mal hier in den Markt rein 
schauen ...

Alex S. schrieb:
> Ich möchte ungerne eine Lochplatte verwenden.
Warum nicht? Löten musst du so oder so, da böte sich auch die gute alte 
Fädeldraht-Methode an: 
http://www.google.com/search?q=site%3Amikrocontroller.net+f%E4deldraht

Ansonsten Leiterplattendesign lernen (siehe Schaltplaneditoren ) und 
bei einem günstigen Einzelstückfertiger (siehe Platinenhersteller ) 
machen lassen.

PS:

Sukzessive Approximation schrieb:
> ersteinmal ein Arduino Board nehmen

Das Launchpad von TI ( http://www.ti.com/launchpad‎ ) ist günstiger als 
der Arduino, aber auch nicht unbedingt gleich einfach zu verstehen. 
Außerdem ist das kein AVR...

: Bearbeitet durch User
von Rene U. (ulmi)


Lesenswert?

> Alex S. schrieb:

>
> AVR ist in diesem Forum (noch) sehr gut vertreten, also bekommst du
> sicher immer gut Hilfestellung.


Was wird denn in Zukunft gut vertreten sein hier im Forum?

von Rene H. (Gast)


Lesenswert?

Alex S. schrieb:
> 1. Was soll ich für einen Mikrocontroller verwenden?
> Bis jetzt habe ich sehr viel über den AVR gelesen. Hilft dieser mir hier
> weiter?

AVR sind sehr pflegeleicht und verzeihen einige Fehler die man zu Beginn 
macht.

Alex S. schrieb:
> Mir ist wichtig, dass ich in C++ Programmieren, da ich seit 4 Jahren die
> Sprache programmiere und sehr gut behersche.

Wenn Du C++ auf dem PC beherrschst, dann rate ich Dir davon ab, das auch 
mit dem µC zu programmieren. Aber wenn Du C++ kannst, kannst Du auch C. 
Der Grund ist einfach, ein µC hat nicht den Speicher eines PC's und auch 
eine andere Speicher Verwaltung. Ein 'new' geht da schnell schief. Das 
heisst, Du musst Dich auf eine gewisse "Statik" einstellen wie Du den 
Speicher benutzt.

Alex S. schrieb:
> 2. Wo bekommt man Bauteile wie z.B. ein Display und alles was dazu
> gehört.
> Habe schon ein wenig in Google gesucht, doch ich weiß nicht, nach
> welchem Begriff ich suchen muss. Unter welchen Begriff fällt das alles?

Die Bauteile bekommst Du alle bei Reichelt.

Alex S. schrieb:
> 3. Sollte ich meine Platinen selber "ätzen" oder gibt es andere
> Möglichkeiten.

Ein ATMega8 auf einem Steckbrett reicht erst mal völlig. Da gibt es es 
nichts zu ätzen oder löten.


Grüsse,
René

von Alex S. (Firma: Therm.) (xxslayerxx)


Lesenswert?

Rene H. schrieb:
> Alex S. schrieb:
>> 3. Sollte ich meine Platinen selber "ätzen" oder gibt es andere
>> Möglichkeiten.
>
> Ein ATMega8 auf einem Steckbrett reicht erst mal völlig. Da gibt es es
> nichts zu ätzen oder löten.

Ich möchte ungern ein Steckbrett am Ende benutzen, da das ganze in 
meinen Pc eingebaut werden soll und das ganze halbwegs professional 
aussehen soll.

Ich denke zum beginn komme ich um kein Steckbrett herrum.

Zum Thema C++ habe ich bereits einiges gelesen. z.B. Das mit new und 
delete, dass man nur einfachvererbung verwenden kann / sollte und das 
ganze weniger oop wird.

Doch damit habe ich kein Problem.
Schlichtes C würde es natürlich auch tun.

Was meint ihr, kommen da an kosten auf mich zu, bis ich zu einem ersten 
Ergebnis komme (Temperatur Messer mit Display).
Natürlich abgesehen vok Kosten wie z.B. Lötkolben usw, was jeder Hobby 
Handwerker im Keller hat.

von Achim M. (minifloat)


Lesenswert?

Alex S. schrieb:
> Was meint ihr, kommen da an kosten auf mich zu, bis ich zu einem ersten
> Ergebnis komme (Temperatur Messer mit Display).
> Natürlich abgesehen vok Kosten wie z.B. Lötkolben usw, was jeder Hobby
> Handwerker im Keller hat.

Lies das hier mal durch: Absolute Beginner

Und "How to set up an electronics lab" vom mehr oder auch viel weniger 
geliebten Dave Jones ansehen:
http://www.youtube.com/watch?v=R_PbjbRaO2E

PS:
Rene U. schrieb:
> Was wird denn in Zukunft gut vertreten sein hier im Forum?

ARM Cortex M ist doch allgemein stark im Kommen, vor allem, da die 
Dinger inzwischen zum selben Preis wie 8bitter zu bekommen sind. 
Komisch, wenn der µC weniger Pins als interne Busbreite hat; kränkstes 
Beispiel sind einige LPC800 von NXP: 32bitter im 8pin DIP Gehäuse :D 
http://www.nxp.com/products/microcontrollers/cortex_m0_m0/series/LPC800.html

Now, better stop that off-topic and messing up this thread

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Alex S. schrieb:

> Doch damit habe ich kein Problem.
> Schlichtes C würde es natürlich auch tun.
Damit würd ich anfangen.

> Was meint ihr, kommen da an kosten auf mich zu, bis ich zu einem ersten
> Ergebnis komme (Temperatur Messer mit Display).
> Natürlich abgesehen vok Kosten wie z.B. Lötkolben usw, was jeder Hobby
> Handwerker im Keller hat.

Ach Kosten. Die sind gering. Die Kosten werden dein kleinstes Problem.

Controller: 2 Euro.
1-Wire Temp Sensor DS18B20: 2 Euro
Display: max. 10 Euro.
Lochrasterplatine + kleinkram: max. 5 Euro
Gehäuse: 5 Euro
ISP-Programmer: 15 Euro.

Falls du ne richtige PCB haben willst, die wird je nach dem wo du 
kaufst,
zwischen 15$ und 60 Euro kosten.

Bis dahin musst du dich nur noch in die Elektronik einarbeiten, in den 
Microcontroller den du nehmen willst, in die Feinheiten von AVR-GCC 
(wenn du C++ wirklich bereits kannst) und in ein PCB-Tool deiner Wahl 
(wenn du eine echte Platine haben möchtest).

Und dein Projekt ist irgendwie sehr Booooring.
Thermometer fürn PC, gibts alles für kein Geld. Und als "Projekt" alles 
andere als Spannend.


gruß cyblord

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

Alex S. schrieb:
> Rene H. schrieb:
>> Alex S. schrieb:
>>> 3. Sollte ich meine Platinen selber "ätzen" oder gibt es andere
>>> Möglichkeiten.
>>
>> Ein ATMega8 auf einem Steckbrett reicht erst mal völlig. Da gibt es es
>> nichts zu ätzen oder löten.

Lass dir bloss nicht diese alte Gurke aufschwatzen.

> Ich möchte ungern ein Steckbrett am Ende benutzen, da das ganze in
> meinen Pc eingebaut werden soll und das ganze halbwegs professional
> aussehen soll.

Klar. Niemand baut ein Steckbrett irgendwo ein.

> Ich denke zum beginn komme ich um kein Steckbrett herrum.

Das muss nicht unbedingt sein. Für 9 € gibt es beim Chinamann einen 
Arduino Uno. Da schmeisst du den Arduino-Rotz runter und hast ein 
wunderbares Board, das du auch später in deinen PC einbauen kannst.

> Zum Thema C++ habe ich bereits einiges gelesen. z.B. Das mit new und
> delete, dass man nur einfachvererbung verwenden kann / sollte und das
> ganze weniger oop wird.
>
> Doch damit habe ich kein Problem.
> Schlichtes C würde es natürlich auch tun.

Typisch macht man das ohne OOP in C.

> Was meint ihr, kommen da an kosten auf mich zu, bis ich zu einem ersten
> Ergebnis komme (Temperatur Messer mit Display).
> Natürlich abgesehen vok Kosten wie z.B. Lötkolben usw, was jeder Hobby
> Handwerker im Keller hat.

Kommt drauf an, was das für ein Hobbyhandwerker ist. Gibt ja auch Leute, 
die Dachrinnen löten. Für Elektronik brauchst du schon was ordentlches. 
Fängt glaube ich bei 70 € an. Bei Highend steht dann Weller drauf und 
kostet ca. ab 300. Manchmal wird hier so einer aber auch im Markt 
gebraucht angeboten. Kann man bedenkenlos kaufen. Da musst du aber 
schnell sein.

Um deine Controller zu programmieren, brauchst du einen 
Programmieradapter. Der einzig wahre, AVRISPMKII, kostet ca. 35 €. Geht 
auch wesentlich billiger. Die meisten, die so einen Billigprogrammer 
haben, behaupten, daß die sogar funktionieren. Natürlich funktionieren 
die. Meistens. Wenn du allerdings nie Ärger haben willst, nimmst du den 
AVRISP. Ein AVR-Dragon, 45 €, ist auch nicht schlecht. Der besteht aber 
nur aus einer nackten Platine und stellt erstmal eine bastlerische 
Herausforderung dar.

Wenn du so ein Arduino-Board nimmst, brauchst du ertmal nur einen 
Programmer. Genau genommen brauchst du nicht einmal den, sondern kannst 
den Arduino-Bootloader zum Programmieren verwenden. Das ist das, was ich 
mit Arduino-Rotz meine. Es soll auch möglich sein, aus dem AVR-Sudio 
heraus normale Programme über den Bootloader darauf zu brennen.

Wenn du Weihnachten soweit bist, daß die LED auf dem Board 
timergesteuert blinkt und du weisst auch, warum sie das tut, dann kannst 
du dir so langsam ein Steckbrett zulegen. Ne Taste kriegst du an das 
Ding auch so rangeklemmt.

Und dann geht es ganz langsam ans Projekt.

Du kannst das auch abkürzen, indem du komplett auf Arduino setzt. Da 
gibt es für deine Anwendung sicher alles fertig als Download. Wenn das 
allerdings nicht dein Anspruch ist, machst du die Ochsentour. "Hello 
World" heisst auf dem Controller "LED blinkt".

mfg.

von die Alternative (Gast)


Lesenswert?

Rene H. schrieb:
> AVR sind sehr pflegeleicht und verzeihen einige Fehler die man zu Beginn
> macht.

Und vor allem die Fuses sind völlig problemlos für Anfänger. lol

Es gibt von verschiedenen Herstellern billige EVAL Boards. Die nötigen 
Signale sind auf Pfostenstecker geführt und können so einfach später auf 
eigene Trägkarte aufgesteckt werden. Das sieht auch professionell aus. 
;-)

Wenn dir ARM zur groß für den Einstieg vorkommt, schau dir den MSP430 
und das Launchpad an. Die Doku von TI ist so gut, dass hier wenig 
Probleme im Forum aufkommen.

von Rene H. (Gast)


Lesenswert?

die Alternative schrieb:
> Und vor allem die Fuses sind völlig problemlos für Anfänger. lol

Wenn ein Anfänger mit den Fuses nicht klar kommt, hilft ihm Arduino auch 
nicht weiter.

Vielleicht sollte man den "Anfänger" nicht derart unterschätzen.

Thomas Eckmann schrieb:
> "Hello
> World" heisst auf dem Controller "LED blinkt".

Lass mich raten, Du programmierst sonst Java?

Grüsse,
René

von Thomas E. (thomase)


Lesenswert?

die Alternative schrieb:
> Rene H. schrieb:
>> AVR sind sehr pflegeleicht und verzeihen einige Fehler die man zu Beginn
>> macht.
>
> Und vor allem die Fuses sind völlig problemlos für Anfänger. lol

Wenn man nicht völlig verblödet ist, passiert das Malheur genau einmal.
Und wenn man sich nicht den Resetpin weggeschossen hat, kriegt man den 
Conroller auch wieder zum Laufen.

> Wenn dir ARM zur groß für den Einstieg vorkommt, schau dir den MSP430
> und das Launchpad an.

Die MSP-Jünger sind wieder am missionieren.

> Die Doku von TI ist so gut, dass hier wenig Probleme im Forum aufkommen.
Daß das hier kaum Probleme gibt, liegt daran, daß den kaum einer 
benutzt.

mfg.

von Thomas E. (thomase)


Lesenswert?

Rene H. schrieb:
> Lass mich raten, Du programmierst sonst Java?
>
Lass mich raten, du nimmst Drogen?

mfg.

von die Alternative (Gast)


Lesenswert?

Rene H. schrieb:
> Vielleicht sollte man den "Anfänger" nicht derart unterschätzen.
Thomas Eckmann schrieb:
> Wenn man nicht völlig verblödet ist, passiert das Malheur genau einmal.

Das las sich in den anderen Threads aber ganz anders.


Thomas Eckmann schrieb:
> Die MSP-Jünger sind wieder am missionieren.

Genanu wie die AVR Jünger und die hatten den ersten Aufschlag.

Thomas Eckmann schrieb:
> daß den kaum einer
> benutzt.

kaum ein Hobby-Bastler.

von cppler (Gast)


Lesenswert?

Also welchen µC Du nimmst bleibt Dir überlassen, definiere Deine 
Notwendigkeiten (I/Os, Timer, PWm, DAC, ADC usw. usf.) und nimm den der 
Dir am besten paßt.
C++ Compiler vorausgesetzt geht auch das ohne Probleme, da wird kein 
Meagaoffset generiert auch wenn das einige behaupten/vermuten.
Wenn Du nur "einfache" Dinge realisieren willst, also LED dimmen, Motor 
ansteuern o.ä. reicht ein 8bit AVR mehr als aus.
Nimm Dir einen USBAsp Clone (ab 5,-) einen passenden AVR (Mega88 sollte 
genug Resourcen haben) und lege los.

von Einsteiger (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Rene H. schrieb:
>> Lass mich raten, Du programmierst sonst Java?
>>
> Lass mich raten, du nimmst Drogen?
>
> mfg.

rofl

Grüsse,
René

von Thomas E. (thomase)


Lesenswert?

die Alternative schrieb:
> Rene H. schrieb:
>> Vielleicht sollte man den "Anfänger" nicht derart unterschätzen.
> Thomas Eckmann schrieb:
>> Wenn man nicht völlig verblödet ist, passiert das Malheur genau einmal.
>
> Das las sich in den anderen Threads aber ganz anders.

Dann zeig doch mal die Threads, wo sich einer das zeite Mal vom Takt 
abgenabelt hat.

>
> Thomas Eckmann schrieb:
>> Die MSP-Jünger sind wieder am missionieren.
>
> Genanu wie die AVR Jünger und die hatten den ersten Aufschlag.

Das ist hier ein AVR-Forum. Hier schlafen fast alle Atmel-Bettwäsche.

> Thomas Eckmann schrieb:
>> daß den kaum einer
>> benutzt.
>
> kaum ein Hobby-Bastler.

Ahh, der Profi. Warum empfiehlst du den dann einem Hobbybastler, wenn 
den kaum ein Hobbybastler benutzt? Ist doch irgendwie widersinnig.

mfg.

von die Alternative (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Warum empfiehlst du den dann einem Hobbybastler, wenn
> den kaum ein Hobbybastler benutzt?

Weil die Hobbyaner das gute Stück sonst nicht kennen (lernen). Mit dem 
Launchpad hat TI etwas eingeleitet, hinter dem andere jetzt herhächeln.

Thomas Eckmann schrieb:
> Dann zeig doch mal die Threads, wo sich einer das zeite Mal vom Takt
> abgenabelt hat.

SuFu nutzen und lesen: Stapel von Hobbyanern mit verfuseten AVRs sind in 
der jünsten Zeit aufgeschlagen. Und die Reaktion der "Profis": Man muss 
wissen, was man tut. Profis haben kein Problem damit, ..., bla bla bla.

Ich kennen beide Familien und mir viel der Einstieg bei MSP430 leichter. 
Die Dokumentation von TI ist super.

von Dr. Sommer (Gast)


Lesenswert?

Jetzt geht das wieder los dass diese ETechniker von C++ abraten weil sie 
es nicht können/kennen und sich einbilden, es sei "ineffizient" oder 
würde "mehr Speicher brauchen". Das ist natürlich Unsinn. Außerdem ist 
der Umstieg C++ -> C schmerzhaft da man viele schöne Dinge vermisst. 
Wenn man C++ beherrscht gibt es praktisch keinen Grund C zu verwenden, 
auch auf Mikrocontrollern, es sei denn man hat sich eine so exotische 
Plattform ausgesucht dass es keinen C++ Compiler dafür gibt. Für u.a. 
AVR und ARM gibt es den GCC und damit auch den g++ C++ Compiler. Auf 
einige Dinge wie Exceptions, RTTI, new/delete sollte man verzichen bzw. 
sich ganz genau überlegen ob man sie wirklich braucht, aber das was 
übrig bleibt ist immer noch weit von der beschränkten Sprache C 
entfernt. Daher rate ich dir als erfahrenem C++ Programmierer, weiterhin 
C++ zu verwenden. Man muss natürlich nicht sofort alle OOP-Features 
nutzen, aber es gibt da ja bekanntlich auch eine ganze Reihe "kleiner" 
Dinge die glücklich machen...

von die Altgernative (Gast)


Lesenswert?

Dr. Sommer schrieb:
> oder
> würde "mehr Speicher brauchen".

hmmmh, eine VMT braucht C nicht, oder?

von Dr. Sommer (Gast)


Lesenswert?

die Altgernative schrieb:
> hmmmh, eine VMT braucht C nicht, oder?
Falls du damit die vtables meinst:
Wenn man Polymorphie/Single-Dispatching verwendet braucht C das 
natürlich auch, und C++ braucht es genau dann wenn man eben das 
verwendet. Nur dass das in C++ viel einfacher, kürzer, eleganter, 
fehlersicherer ist.

von Rene H. (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Jetzt geht das wieder los dass diese ETechniker von C++ abraten weil sie
> es nicht können/kennen und sich einbilden, es sei "ineffizient" oder
> würde "mehr Speicher brauchen".

Das hat in diesem Thread keiner gesagt. Man kann aber nicht C++ Coden 
auf einem µC wenn man nicht im Speicher denkt. Deshalb mein Hinweis mit 
PC. Eine Linked List funktioniert auf einem µC nun mal begrenzt, wenn 
man nicht dessen Eigenschaften bedenkt, STL oder boost ist auch nicht.
Ich programmiere die µC's auch in C++.

Mit C hat man als Anfänger das Wissen der Sprache und macht weniger 
Fehler. Wie gesagt, auf einem µC.

Und das hat nichts mit der Sprache zu tun, sondern mit dem Wissen wie 
Speicher funktioniert!

Grüsse,
René

von die Alternative (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Falls du damit die vtables meinst

Ich meine das: http://de.wikipedia.org/wiki/Tabelle_virtueller_Methoden
Und das kostet Speicher.

Mein C kann das nicht.

von Dr. Sommer (Gast)


Lesenswert?

Rene H. schrieb:
> Das hat in diesem Thread keiner gesagt.
Dann habe ich das wohl alles falsch verstanden.

Rene H. schrieb:
> Man kann aber nicht C++ Coden
> auf einem µC wenn man nicht im Speicher denkt.
Das kann man weder in C noch in C++ sowohl auf µC als auch auf PC.

Rene H. schrieb:
> Eine Linked List funktioniert auf einem µC nun mal begrenzt, wenn
> man nicht dessen Eigenschaften bedenkt
Was hat das mit C++ zu tun? Das gilt gleichermaßen für C wie C++.

Rene H. schrieb:
> STL oder boost ist auch nicht.
Ach nicht? Warum soll zB std::array<uint8_t,7> nicht funktionieren? Oder 
std::numeric_limits<int>::max () ?
Teile von boost funktionieren auch ganz wunderbar, wie zB die MPL.

Rene H. schrieb:
> Mit C hat man als Anfänger das Wissen der Sprache und macht weniger
> Fehler. Wie gesagt, auf einem µC.
Da er kein Anfänger in C++ ist, hat er das Problem nicht.

Alex S. schrieb:
> Mir ist wichtig, dass ich in C++ Programmieren, da ich seit 4 Jahren die
> Sprache programmiere und sehr gut behersche.
^-- Das klingt so als wüsste er was er tut. Auch in Bezug auf...
Rene H. schrieb:
> sondern mit dem Wissen wie
> Speicher funktioniert!
... denn sonst kommt man auch in C++ nicht weit.

die Alternative schrieb:
> Ich meine das: http://de.wikipedia.org/wiki/Tabelle_virtueller_Methoden
> Und das kostet Speicher.
Richtig, exakt genausoviel wie das C-Äquivalent.
> Mein C kann das nicht.
Dann machst du was falsch. In C ists halt ziemlich explizit und lang, in 
C++ implizit und kompakt. Der Ressourcenverbrauch ist der selbe. Wenn 
man das Feature in C++ nicht verwendet, kostet es auch nichts (wie 
vieles in dieser Sprache).

von die Alternative (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Dann machst du was falsch.

Ich will gerne lernen, wie läuft das mit virtuellen Mehtoden unter C?

Dr. Sommer schrieb:
> Wenn
> man das Feature in C++ nicht verwendet, kostet es auch nichts (wie
> vieles in dieser Sprache).

Genau, wenn man die Sparache nicht verwendet spart man am meisten. ;-P

C++ finde ich auch besser als C, aber nicht auf einem Mini-µC.

von Dr. Sommer (Gast)


Lesenswert?

die Alternative schrieb:
> Ich will gerne lernen, wie läuft das mit virtuellen Mehtoden unter C?
in C so:
http://ideone.com/hwpTfF
in C++ so:
http://ideone.com/eKlNzu

Die C-Variante ist doppelt so lang und mindestens doppelt so hässlich... 
Beide Varianten dürften exakt gleich viel Speicher benötigen.

Das ganze Konstrukt (= Polymorphie) kann man zur Abstraktion und 
Entkopplung von Funktion & Interface verwenden. In C wird das nicht so 
oft verwendet (da Tipparbeit), aber wo man es in C nicht braucht braucht 
man es in C++ auch nicht. Oder man verwendet es doch, weil es da so 
einfach ist und man einfacheren, wartbaren, wiederverwendbaren Code 
erhält.

die Alternative schrieb:
> Genau, wenn man die Sparache nicht verwendet spart man am meisten. ;-P
An Nerven jedenfalls nicht, dank der Einschränkungen von C...
> C++ finde ich auch besser als C, aber nicht auf einem Mini-µC.
Verstehe ich nicht, wie gesagt ist eine große Zahl der C++ Features 
Laufzeit-gratis und kann auch auf einem winzigen µC verwendet werden.

von die Alternative (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Die C-Variante ist doppelt so lang und mindestens doppelt so hässlich...

und hat in C überhaupt keine Bewandnis.

Klassen, Objekte, Methoden, Datenkapselung, polymorphe Hierachien und 
was davon abhängt sind doch der Unterschied zwischen einer prozeduralen 
und objektorientierten Programmiersprache.
Es macht null Sinn, dass mit C nachzuahmen!

Und noch einmal: Wenn ich die Resourcen habe, ziehe C++ reinem C vor. 
Auf einem kleinen µC reichts dafür nicht.

von Dr. Sommer (Gast)


Lesenswert?

die Alternative schrieb:
> Es macht null Sinn, dass mit C nachzuahmen!
Ah. Dann kannst du auch nicht behaupten, dass C++ da grundsätzlich mehr 
Speicher bräuchte. Außerdem wird sowas sehr wohl in C gemacht, mit 
fraglichem Sinn.
Wenn man in C Datenkapselung und abstrakte Interfaces programmiert, 
braucht das genau so viele Resourcen wie in C++. Wenn man das in C++ 
nicht macht braucht es genauso wenig Resourcen wie C. Dies ist also 
auf keinen Fall ein Argument gegen C++.

> Und noch einmal: Wenn ich die Resourcen habe, ziehe C++ reinem C vor.
> Auf einem kleinen µC reichts dafür nicht.
Und noch einmal, das ist Unsinn. Ganz kleines Beispiel:
C:
1
#define SIZE 1024 // "const" kann hier in C nicht verwendet werden
2
int array[SIZE];
3
// ... viel code...
4
void someFunction () {
5
  // bis hierhin vergessen dass der Name "SIZE" schon vergeben ist
6
  int SIZE = 7; // <-- ulkiger compiler error
7
}
C++:
1
const size_t SIZE = 1024;
2
int array [SIZE];
3
// ... viel code...
4
void someFunction () {
5
  // bis hierhin vergessen dass der Name "SIZE" schon vergeben ist
6
  int SIZE = 7; // <-- macht nix, funktioniert trotzdem, das äußere "SIZE" wird verdeckt
7
}
Die C++ Version braucht kein byte mehr Speicher und keine Instruktion 
mehr Rechenleistung als die C Version, hat aber den Vorteil dass die 
globale Konstante gescoped ist was den gezeigten Fehler vermeidet. 
Allein für solche Sachen (davon gibts noch mehr) lohnt es sich C++ zu 
verwenden, auch auf winzigen µC's, da es kein bisschen mehr Ressourcen 
als C braucht!

von die Alternative (Gast)


Lesenswert?

Du solltest mehr schlafen, dann verstehst du auch andere Beiträge. ;-)

Natürlich kann ich C Code über einen C++ Compiler schicken. Es bleibt 
aber trotzdem C Code. Und C++ halbherzig anzuwenden, ist wie mit der 
Titanic in der Badewanne zu fahren.

Ergo, um C++ zu nutzen braucht man Ressourcen. Zu den obigen Themen 
fällt mit noch das Error Handling ein. Du compilierst den Speicher 
einfach mit ein?  :-P

von Dr. Sommer (Gast)


Lesenswert?

die Alternative schrieb:
> Du solltest mehr schlafen, dann verstehst du auch andere Beiträge. ;-)
Vielleicht solltest DU dir mal ansehen was C++ außer Klassen & "new" 
noch so hat.

die Alternative schrieb:
> Ergo, um C++ zu nutzen braucht man Ressourcen.
Ein großer Teil der Features von C++ geschehen komplett zur Compilezeit 
und brauchen daher wenn schon Resourcen auf dem PC auf dem das Programm 
kompiliert wird. Mit templates, constexprs's, uniform initialization, 
lambda's kann man viele schöne und auf µC definitiv nützliche Dinge tun 
die in C viel länger & hässlicher, aber genauso resourcenfressend sind. 
Im Beitrag "Re: atomic-lib für stm32" noch ein kleines 
Beispiel.

die Alternative schrieb:
> Und C++ halbherzig anzuwenden, ist wie mit der
> Titanic in der Badewanne zu fahren.
Wieso sollte man nicht alles an Features nutzen was man kriegt? Nur weil 
man auf new verzichtet muss man doch nicht auf echte Konstanten (s.o.), 
templates, constexpr, ... verzichten? Nach der Logik sollte man auch 
kein C verwenden, da malloc(),"volles" printf() & scanf(), die ganzen 
float-Funktionen etc. nicht so gut für kleine µC geeignet sind.

die Alternative schrieb:
> Zu den obigen Themen
> fällt mit noch das Error Handling ein.
Ja, Exceptions deaktiviert man typischerweise. Aber das muss einen ja 
nicht davon abhalten die anderen schönen Dinge zu nutzen...

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.