Forum: Mikrocontroller und Digitale Elektronik Wozu übertrieben schnelle Microcontroller?


von Andreas (Gast)


Lesenswert?

Hätte da ein paar grundsätzliche Fragen:
Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?
Wann muss man was schnelleres einsetzen als ein Atmega?
Hab 3 Teensy 4.0 hier und ja die sind schnell aber für meine Anwendungen 
reicht auch ein Arduino Uno wenn man den Code optimiert und man spart 
nebenbei Strom.. :)

:
von olaf (Gast)


Lesenswert?

> Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?

Zum Beispiel wenn du etwas machst was schnell sein muss. :-)

Motorsteuerungen koennen so ein Fall sein.

Oder komplizierte Mathematik (FFTs)

Filter fuer Audiokram, Synthesizer. Oder aufwendiges Grafikzeugs.
MP3-Player

Man muss die Schnelligkeit auch nicht nutzen. Es ist kein Problem
so einen Controller langsamer laufen zu lassen. Die Geschwindigkeit 
eines
Controllers ist ein Nebeneffekt seines Herstellungsprozess. Wenn man
auf einen moderneren Prozess geht weil der weniger Chipflaeche braucht,
oder weil man auf derselben Flaeche wie schon immer mehr Funktionalitaet
haben will (z.B mehr internes Ram) dann bekommt man die Geschwindigkeit
gleich mit.

Ausserdem gibt es die Tendenz der Leute aus Bequemlichkeit unwissend
zu bleiben und dann Sprachen wie Phyton einzusetzen die 10x langsamer
sind als gutes C.

Olaf

von A-Freak (Gast)


Lesenswert?

damit man ineffiziente Programmiersprachen mit aufgeblähten Bibliotheken 
benutzen kann

von Ralf (Gast)


Lesenswert?

A-Freak schrieb:
> damit man ineffiziente Programmiersprachen mit aufgeblähten Bibliotheken
> benutzen kann

Mich amüsiert da immer die Leistungs-Anhimmelung z.B. bei 
Apple-Produktshows.
Wieder soundsoviel % mehr Leistung hier und da. Das lässt euphorische 
Fans zurück- während sich die Entwickler ins Fäustchen lachen, daß sie 
die in ihren neuesten Software-Kreationen, durchaus auch aus Gründen der 
Bequemlichkeit, wieder wunderbar verbraten können.
Interessant auch der Hinweis in der neuesten c't, wonach für den 
flüssigen Lauf allein des (Windows)-Betriebssystems neuerdings schon 6 
CPU Kerne anzuraten sind.

von M$ (Gast)


Lesenswert?

Ralf schrieb:
> Interessant auch der Hinweis in der neuesten c't, wonach für den
> flüssigen Lauf allein des (Windows)-Betriebssystems neuerdings schon 6
> CPU Kerne anzuraten sind.

Windows kann mehrere CPUs vernünftig nutzen?

von Gustl (Gast)


Lesenswert?

> Wozu übertrieben schnelle Microcontroller?

Also ich finde, dass man keine übertrieben schnellen Mikrocontroller 
verwenden sollte. Am besten ist, man nimmt genügend schnelle 
Mikrocontroller.

von PittyJ (Gast)


Lesenswert?

Ich habe die Aufgabe, die Maschinensicherheit von Robotern mit 
Radarsensoren zu gewährleisten. Dazu sind mehrere Radar Chips über SPI 
mit dem Controller verbunden, die permanent bedient und ausgewertet 
werden müssen.
Der 400MHz Controller wird dabei komplett ausgelastet.

Manche manchen doch etwas mehr, als nur LEDs blinken zu lassen.

von olaf (Gast)


Lesenswert?

> Windows kann mehrere CPUs vernünftig nutzen?

Ich finde dieses Microsoftbashing unertraeglich! Soviel schlechter wie 
ein modernes Unix ist Microsoft nicht. Hier mal ein Beispiel:

Erster Core: Grafikoberflaeche!

Zweiter Core: Word

Dritter Core: Spitzeldaten nach Redmond und NSA verschieben.

Vierter Core: Fuer Viren und Verschluesselungssoftware die unauffaellig
              im Hintergrund laufen soll.

Fuenter Core: Diskette formatieren ohne das die Maus ruckelt.

Wenn man dann noch bedenkt das es Leute gibt die Excel nutzen oder im 
Internet nach Sachen suchen muessen die sie in ihre eigene Programme 
reinkopieren koennen um produktiv zu sein dann sollte klar sein das so 
ein 6-core praktisch Minimalausstattung ist! Das System soll sich doch 
wenigstens so anfuehlen
wie ein moderner Linuxrechner.

Olaf

von Norbert (Gast)


Lesenswert?

olaf schrieb:
> Ich finde dieses Microsoftbashing unertraeglich!

Aber ein paar Beiträge weiter oben dann Python bashing, ohne jedoch in 
der Lage zu sein Python richtig zu schreiben…

von Falk B. (falk)


Lesenswert?

Ralf schrieb:
> Interessant auch der Hinweis in der neuesten c't, wonach für den
> flüssigen Lauf allein des (Windows)-Betriebssystems neuerdings schon 6
> CPU Kerne anzuraten sind.

https://de.wikipedia.org/wiki/Bloatware
https://de.wikipedia.org/wiki/Wirthsches_Gesetz

von Falk B. (falk)


Lesenswert?

PittyJ schrieb:
> Ich habe die Aufgabe, die Maschinensicherheit von Robotern mit
> Radarsensoren zu gewährleisten. Dazu sind mehrere Radar Chips über SPI
> mit dem Controller verbunden, die permanent bedient und ausgewertet
> werden müssen.
> Der 400MHz Controller wird dabei komplett ausgelastet.

Hmm. Mit einem kleinen FPGA würde man das sicher entspannter und mit 
deutlich geringerem Takt hinkriegen. Viele Wege führen nach Rom.

von olaf (Gast)


Lesenswert?

> Aber ein paar Beiträge weiter oben dann Python bashing,

Es ist nicht 10x langsamer wie C?

Und du hast einen Sinn fuer Humor und mein Posting verstanden?

Olaf

von Martin S. (sirnails)


Lesenswert?

Andreas schrieb:
> Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?

Die Frage ist in etwa so: Wozu ein Auto mit 100PS, wenn wir doch früher 
auch mit 25 PS ans Ziel gekommen sind?

Weil der Prozessor mit 200 MHz einfach 25 mal so schnell ist, wie ein 
Prozessor mit 8 MHz, und häufig der Mehrverbrauch von ein paar mA nicht 
ins Gewicht fällt. Also anstatt Fertigungstechnologien der letzten 30 
Jahre zu supporten, nimmt man was aktuelles, schnelles, kommt bei 
gleichen Kosten ans gleiche Ziel, und freut sich, dass der Prozessor 
jetzt halt 25 mal so viele NOPs machen kann.

von Karl (Gast)


Lesenswert?

olaf schrieb:
> Es ist nicht 10x langsamer wie C?
>
> Und du hast einen Sinn fuer Humor und mein Posting verstanden?
>
> Olaf

Hast du die deutsche Grammatik eines Fragesatzes verstanden?

von Rolf M. (rmagnus)


Lesenswert?

Andreas schrieb:
> Hab 3 Teensy 4.0 hier und ja die sind schnell aber für meine Anwendungen
> reicht auch ein Arduino Uno

Dann müsstet du deine Frage doch selbst beantworten. Wenn du die 
Leistung der Teensys nicht annähernd brauchst, warum hast du dann drei 
davon gekauft?

M$ schrieb:
> Ralf schrieb:
>> Interessant auch der Hinweis in der neuesten c't, wonach für den
>> flüssigen Lauf allein des (Windows)-Betriebssystems neuerdings schon 6
>> CPU Kerne anzuraten sind.
>
> Windows kann mehrere CPUs vernünftig nutzen?

Dass es sie braucht, heißt nicht zwangsläufig, dass es sie auch 
vernünftig nutzen kann.

Gustl schrieb:
>> Wozu übertrieben schnelle Microcontroller?
>
> Also ich finde, dass man keine übertrieben schnellen Mikrocontroller
> verwenden sollte. Am besten ist, man nimmt genügend schnelle
> Mikrocontroller.

Ich finde, man sollte Mikrocontroller nutzen, die die Anforderungen 
erfüllen. Es kann dann auch passieren, dass man einen "übertrieben 
schnellen" µC nutzt, weil der irgendetwas anderes kann, das man braucht.

von Bottle (Gast)


Lesenswert?

Wenn sich Dein Controller langweilt, mach SLAM:
https://www.roboternetz.de/community/threads/76871-SLAM-auf-dem-ESP32

von Programmierer (Gast)


Lesenswert?

olaf schrieb:
> Ausserdem gibt es die Tendenz der Leute aus Bequemlichkeit unwissend
> zu bleiben und dann Sprachen wie Phyton einzusetzen die 10x langsamer
> sind als gutes C.

Wenn dein Chef hinter dir steht und sagt "wir haben dem Kunden eine 
innovative Sensor Fusion Technologie mit GUI und Cloudanbindung 
versprochen, bis nächsten Montag. Ich hab gelesen dass das mit 
CircuitPython total einfach geht. Und unser erster Prototyp mit Arduino 
war auch schnell fertig. Also kein Problem, oder?!" ... was will mann 
dann machen? Sagen dass man kein CircuitPython kann und alles in C macht 
was viel länger dauert? Dann findet der Chef jemanden der es kann!

von René H. (mumpel)


Lesenswert?

Martin S. schrieb:
> Weil der Prozessor mit 200 MHz einfach 25 mal so schnell ist, wie ein
> Prozessor mit 8 MHz

Der Prozessor mag schneller sein. Aber deshalb sind es die Programme 
noch lange nicht. Ich hatte mal vor langer Zeit einen Test gemacht. Eine 
(umfangreiche) Berechnung in einer Excel-Datei war auf einem Rechner aus 
2003 schneller fertig als auf einem Rechner aus 2008. Man sieht also, 
dass es nicht reicht, nur einen schnelleren Prozessor einzubauen. Denn 
ein Rechner ist immer nur so schnell wie sein schwächstes Glied.

von (prx) A. K. (prx)


Lesenswert?

Programmierer schrieb:
> Dann findet der Chef jemanden der es kann!

Er versucht es. Und klagt kurz darauf über Fachkräftemangel.

von Ingenieur oder Codierschwein, das ist die Frage! (Gast)


Lesenswert?

Andreas schrieb:
> Hätte da ein paar grundsätzliche Fragen:
> Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?

Werden sie nicht, das ist ein Problem mit Begriffsbildung und 
Berufsbezeichnung.

Für schnelle Sachen wie Motorsteuerung, Video nimmt man DSP oder FPGA. 
Weil aber der Coder-Grünschnabel nur Mikrocontroller kann, muss man ihm 
irgendwas vorsetzen was nach Mikrocontroller aussoeht. Und die die 
DSP/FPGA aga signal processing können/gelernt haben sind in der 
Minderheit.

von (prx) A. K. (prx)


Lesenswert?

Gustl schrieb:
> Also ich finde, dass man keine übertrieben schnellen Mikrocontroller
> verwenden sollte. Am besten ist, man nimmt genügend schnelle
> Mikrocontroller.

Es ist jedoch bedeutend leichter, einen zu schnellen µC einzusetzen, als 
einen zu langsamen. Statistisch ergibt sich daraus, dass sie meist 
deutlich schneller sind als nötig. Worauf sich jemand fragt, weshalb das 
so sei.

: Bearbeitet durch User
von Bottle (Gast)


Lesenswert?

So what?
Nimm den Schnellsten, den Du finden kannst und takte ihn herunter.

von Falk B. (falk)


Lesenswert?

(prx) A. K. schrieb:
>> Dann findet der Chef jemanden der es kann!
>
> Er versucht es. Und klagt kurz darauf über Fachkräftemangel.

<indischer akzent>
Yeeeees, no ploblem, we make fast and cheap, we understand.
</indischer akzent>

von PittyJ (Gast)


Lesenswert?

Falk B. schrieb:
> PittyJ schrieb:
>> Ich habe die Aufgabe, die Maschinensicherheit von Robotern mit
>> Radarsensoren zu gewährleisten. Dazu sind mehrere Radar Chips über SPI
>> mit dem Controller verbunden, die permanent bedient und ausgewertet
>> werden müssen.
>> Der 400MHz Controller wird dabei komplett ausgelastet.
>
> Hmm. Mit einem kleinen FPGA würde man das sicher entspannter und mit
> deutlich geringerem Takt hinkriegen. Viele Wege führen nach Rom.

Gut, dass du dich besser mit meinen Applikationen auskennst, als ich 
selber.

Dann hilft mir doch mal, wie ich die 60 KByte Closed Source Arm 
Bibliothek des Radarherstellers in ein FPGA übersetzt bekommen. VHDL 
Sourcecode wäre schon gut.
Chip und Hersteller kennst du ja.

von Horst G. (horst_g532)


Lesenswert?

Rolf M. schrieb:
> Dass es sie braucht, heißt nicht zwangsläufig, dass es sie auch
> vernünftig nutzen kann.

Es steht nur nirgends, dass sechs Kerne zwingend gebraucht werden; 
lediglich, dass sechs Kerne zur optimalen Schwuppdizität empfohlen 
werden.
Es ist eben nicht mehr 1982, wo man vor dem Sanduhr-Mauszeiger des 
blockierten Systems sitzt, während Windows versucht, auf irgendeine 
Hardware zuzugreifen, um z. B. ein File zu laden oder zu speichern – 
zumindest in der realen Welt außerhalb dieses Forums. Da sind sechs 
Kerne übrigens auch schon lange nichts Besonderes mehr, und in 20, 30 
Jahren sowas dürfte das somit auch bei den Teilnehmern dieses Forums 
Standard sein.

von Programmierer (Gast)


Lesenswert?

(prx) A. K. schrieb:
> Programmierer schrieb:
>> Dann findet der Chef jemanden der es kann!
>
> Er versucht es. Und klagt kurz darauf über Fachkräftemangel.

Leute die Python können findet man. Das wird ja sogar mittlerweile an 
Schulen gelernt. Viele Studiengänge in Naturwissenschaften und 
Ingenieursfächern ebenso. Und Tutorials im Netz gibt es in Massen. Man 
wird viel mehr Python-Programmierer finden als Leute die das C89 können 
was so diverse proprietäre uC-Compiler verlangen...

von olaf (Gast)


Lesenswert?

> Weil der Prozessor mit 200 MHz einfach 25 mal so schnell ist, wie ein
> Prozessor mit 8 MHz, und häufig der Mehrverbrauch von ein paar mA nicht
> ins Gewicht fällt.

Leider ist Stromverbrauch doch sehr oft sehr wichtig. Aber man kann dann 
ja seine Aufgaben mit 200Mhz erledigen und lange sleepen.

> Wenn dein Chef hinter dir steht und sagt "wir haben dem Kunden eine

Mein Chef sagt hoechstens: Denk dran das der Compiler SIL zertifiziert 
ist da der Source hinterher noch vom Tuev geprueft wird und achte darauf 
wegen der Atex-Zulassung nicht zuviel Strom zu verbrauchen. .-)


> Für schnelle Sachen wie Motorsteuerung, Video nimmt man DSP oder FPGA.

Und da wird die Diskussion interessant. Ich sehe in der Firma in vielen 
aelteren Sachen DSPs, FPGAs oder CPLDs. Mittlerweile koennte man da 
vieles von mit so einer modernen Hochleistungs-MCU direkt machen. Klar 
noch kein Videozeugs, aber so die Mittelklasse in der Messtechnik wird 
langsam erreichbar. Zumal der Uebergang der schnellen MCUs zu DSPs 
sowieso fliessend ist. Ich sehe da jedenfalls mit freudiger Erwartung in 
die Zukunft. Ich meine ein RP2040 in Einzelstueckzahlen fuer 1Euro fuer 
Endverbraucher! Was bekommt man da wohl in der Firma in Stueckzahlen? 
.-)

Olaf

von MaWin (Gast)


Lesenswert?

Programmierer schrieb:
> Leute die Python können findet man.

$Sprache können != Programmieren können

von Norbert (Gast)


Lesenswert?

MaWin schrieb:
> Programmierer schrieb:
>> Leute die Python können findet man.
>
> $Sprache können != Programmieren können

Wenn man mit Asm/C/C++ aufgewachsen ist, dann kann man später in jeder 
Programmiersprache in C programmieren ;-)

von Ingenieur oder Codierschwein, das ist die Frage! (Gast)


Lesenswert?

PittyJ schrieb:
> Dann hilft mir doch mal, wie ich die 60 KByte Closed Source Arm
> Bibliothek des Radarherstellers in ein FPGA übersetzt bekommen. VHDL
> Sourcecode wäre schon gut.
> Chip und Hersteller kennst du ja.

Warum nimmste nicht eine von den tausend freien FPGA-CPU-Core's?  oder 
zahlst die Lizenzgebühren für den ARM-Core?

 Engstirmig + mittellos = Unfähig

von Programmierer (Gast)


Lesenswert?

MaWin schrieb:
> Programmierer schrieb:
>> Leute die Python können findet man.
>
> $Sprache können != Programmieren können

Stimmt, nur weil man vor 20 Jahren mal gelernt hat wie man in C89 
Tripelpointer verwendet kann man noch lange nicht programmieren. Wer 
jedoch (Anti-)Patterns, Modularisierung, Wiederverwendbarkeit, 
Requirements Engineering, Debugging, Automatisierte Tests usw. mit 
Python gelernt hat und praktische Erfahrung damit hat, schon.

von olaf (Gast)


Lesenswert?

> Man wird viel mehr Python-Programmierer finden als Leute die das
> C89 können was so diverse proprietäre uC-Compiler verlangen...

Programmieren im Firmenumfeld ist etwas anderes als das was wir
zuhause machen. Wer das kann der wechselt beliebig zwischen C
und Python hin und her.

Ich koennte sicherlich problemlos in Python programmieren wenn
ich mir noch dieses Zusatztool auf den Schreibtisch stelle:

https://www.medicalexpo.de/prod/ddc-dolphin/product-68168-1036680.html


Aber Leute, ein bisschen Pythonbashing als Witz ist IMHO okay aber 
niemand wird das Embedded fuer produktives Zeugs einsetzen. Fuer etwas 
tooling okay aber nicht im verkauften Controller.

Da koennte man sogar noch eine andere Frage aufwerfen. Diese schnellen 
Microcontroller sind ja nicht nur schnell, du hast da ja auch gerne 
Flash bis zum abwinken. Wenn du den mit immer komplexerer Software 
fuellst, waere da nicht mal sowas wie C++ angesagt? Das wuerde ich 
besser finden. Aber die Branche ist leider extrem konservativ.

Olaf

von olaf (Gast)


Lesenswert?

> Wenn man mit Asm/C/C++ aufgewachsen ist, dann kann man später in jeder
> Programmiersprache in C programmieren ;-)

Da sagst du was! Notfalls schreiben wir uns eine Metacompiler der
echtes C in Python uebersetzt und keiner merkt was. :-D

Olaf

von Martin S. (sirnails)


Lesenswert?

olaf schrieb:
>> Weil der Prozessor mit 200 MHz einfach 25 mal so schnell ist,
> wie ein
>> Prozessor mit 8 MHz, und häufig der Mehrverbrauch von ein paar mA nicht
>> ins Gewicht fällt.
>
> Leider ist Stromverbrauch doch sehr oft sehr wichtig. Aber man kann dann
> ja seine Aufgaben mit 200Mhz erledigen und lange sleepen.

Oder man sucht seine Hardware den Anforderungen entsprechend aus. Das 
sollte man Elektrotechniker beherrschen. Und genau dafür gibt es ja noch 
massenhaft alte Fabs, die in grobschlächtigen Strukturen 
schwachbrüstige, aber sparsame Winzlinge produzieren.

Mikroprozessorsysteme sind inzwischen nahezu überall verbaut. Aber außer 
bei Batterieanwendungen kommt es doch auf den Realverbrauch kaum an. Im 
professionellen Umfeld spielt halt viel mehr herein - z.B. ob man eine 
vergleichbare Entwicklung portieren kann, und wieviel Aufwand dahinter 
steht. Da darf dann ein Prozessor auch gerne mal einen Euro teurer pro 
Stück sein, wenn man schlussendlich das Zigfache in der Entwicklung 
spart.

>> Für schnelle Sachen wie Motorsteuerung, Video nimmt man DSP oder FPGA.
>
> Und da wird die Diskussion interessant. Ich sehe in der Firma in vielen
> aelteren Sachen DSPs, FPGAs oder CPLDs. Mittlerweile koennte man da
> vieles von mit so einer modernen Hochleistungs-MCU direkt machen. Klar
> noch kein Videozeugs, aber so die Mittelklasse in der Messtechnik wird
> langsam erreichbar. Zumal der Uebergang der schnellen MCUs zu DSPs
> sowieso fliessend ist. Ich sehe da jedenfalls mit freudiger Erwartung in
> die Zukunft. Ich meine ein RP2040 in Einzelstueckzahlen fuer 1Euro fuer
> Endverbraucher! Was bekommt man da wohl in der Firma in Stueckzahlen?

Das Problem ist doch eher, dass man ganz viele Dinge komfortabel im µC 
erreichen kann, für die man ansonsten die übelsten VHDL-Würgereien 
machen müsste. Wie oben schon geschrieben: Auch die Entwicklung kostet 
und wenn diese Kosten aus dem Ruder laufen, spielt der Euro für den Chip 
keine Rolle mehr. Und dann ist halt auch die Frage, ob die Firmen ihr 
Knowhow wirklich auf zwei Beine stellen wollen, denn wenn man gute 
Mitarbeiter will, braucht man halt mindestens einen für C und mindestens 
einen für VHDL (oder Konsorten). Da ist dann auch eine Überlegung, ob 
man die runden 150.000 Euro pro Jahr (Lohn + Arbeitsplatzkosten) 
tatsächlich investieren will, nur um eine Aufgabe dann etwas effizienter 
oder schneller auf einem FPGA rödeln zu lassen.

von Joachim B. (jar)


Lesenswert?

Ralf schrieb:
> Mich amüsiert da immer die Leistungs-Anhimmelung z.B. bei
> Apple-Produktshows.
> Wieder soundsoviel % mehr Leistung hier und da.

damit die bei Akkuschwäche per Update zurückgenommen werden kann, so das 
der geneigte Anwender nicht merkt das der Akku unterdimensioniert ist.

von Georg M. (g_m)


Lesenswert?

Andreas schrieb:
> für meine Anwendungen reicht auch ein Arduino Uno

Es gibt aber auch andere Anwendungen.

https://en.wikipedia.org/wiki/Missile_defense

von Yalu X. (yalu) (Moderator)


Lesenswert?

Andreas schrieb:
> Hab 3 Teensy 4.0 hier und ja die sind schnell aber für meine Anwendungen
> reicht auch ein Arduino Uno wenn man den Code optimiert und man spart
> nebenbei Strom.. :)

Schau doch einfach mal nach, welche Anwendungen der Hersteller des auf
dem Teensy verbauten Mikrocontrollers damit anvisiert:

  https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/i-mx-rt-crossover-mcus/i-mx-rt1060-crossover-mcu-with-arm-cortex-m7-core:i.MX-RT1060#relatedApplications

Wenn dich keine davon interessieren, dann ist der Controller für dich
natürlich übertrieben.

Ich wäre bereit, dir die Teensies abzunehmen, ohne dass für dich dabei
Entsorgungskosten anfallen ;-)

von m.n. (Gast)


Lesenswert?

Vor einiger Zeit wurde in der c't ein Einplatinen-Rechner mit 1 GHz µC 
vorgestellt. Als Anwendungsbeispiel wurde gezeigt, wie man damit eine 
LED exakt 1 s einschaltet und 1 s wieder ausschaltet.

Das hat überzeugt, das braucht jeder!
Diese Zeitschrift lese ich "leider" nicht mehr ;-)

von Falk B. (falk)


Lesenswert?

PittyJ schrieb:
>>> Der 400MHz Controller wird dabei komplett ausgelastet.
>>
>> Hmm. Mit einem kleinen FPGA würde man das sicher entspannter und mit
>> deutlich geringerem Takt hinkriegen. Viele Wege führen nach Rom.
>
> Gut, dass du dich besser mit meinen Applikationen auskennst, als ich
> selber.

Tu ich nicht. Es ist eine Vermutung, basierend auf anderen Erfahrungen.

> Dann hilft mir doch mal, wie ich die 60 KByte Closed Source Arm
> Bibliothek des Radarherstellers in ein FPGA übersetzt bekommen.

Gar nicht. Aber ist das nicht bäääää, closed source? ;-)

von olaf (Gast)


Lesenswert?

> Mikroprozessorsysteme sind inzwischen nahezu überall verbaut. Aber außer
> bei Batterieanwendungen kommt es doch auf den Realverbrauch kaum an.

Nein, es gibt schon noch ein paar mehr Sachen. Beispiele?

4-20mA Systeme wo du ueblicherweise 3.6mA/12V zur Verfuegung hast.

Atex/Ex Sachen wo du Leistungsbeschraenkt bist.

Preiswerte Sachen, also Kondensatornetzteil oder nur ein LP2985 anstatt 
eines schnieken Schaltregler. (auch weniger EMV-Stress)

Empfindliche Messtechnik wo die schnelle MCU oder deren Schaltregler 
lustig in deinen Analogkram rumhustet. Kann man natuerlich was gegen 
tun, 1-2 Lagen mehr, ein Layout zusaetzlich, ein Abschirmblech. Kostet 
aber alles.

Aber klar, es gibt Anwendungen wo der Stromverbrauch eher egal ist. Aber 
es gibt auch sehr viel wo er das nicht ist. Was mich z.B am RP2040 am 
meisten abtoernt ist sein extrem schlechter Sleepmode.

Olaf

von Martin S. (sirnails)


Lesenswert?

Aber das ist doch das schöne: Für all diese Zwecke gibt es Prozessoren, 
die nicht mit 200 MHz takten (wobei das sowieso blos der interne Takt 
ist).

Die Frage vom TO impliziert ja, dass man nur lahmarschige Gurken braucht 
und ich sage nichts anderes, dass es halt auf die Kosteneffizienz 
ankommt und da ist der µC nur einer von sehr vielen Teilen in der Kette.

von J. S. (jojos)


Lesenswert?

TFT mit hübscher GUI brauchen auch etwas mehr Power als ein AVR bietet.

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

> Hätte da ein paar grundsätzliche Fragen:
> Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?
> Wann muss man was schnelleres einsetzen als ein Atmega?

Optimiere grob nach:

Gesamtkosten = A x €/Taktfrequenz + B x €/Bitbreite + C x 
€/Designsupport + D x Entwicklungsstunden x €/Stunde + E x Stück x 
Materiakosten/Stück + eine Menge weitere Faktoren

Da ist in vielen Projekten der Faktor A und B sehr klein. Daher ist es 
fast egal (nur) hier zu optimieren.

Am entscheidendsten ist die Gesamtstückzahl. Davon hängt ab ob man 
Entwicklungsaufwand oder Materialkosten optimieren muß. Wenn ersteres, 
dann nimmt man einen "überdimensionierten" Controller den man bereits 
beherrscht. Nur bei hohen Stückzahlen sucht man das Billigste was die 
Anforderungen so gerade noch erfüllt.

Ich nehme für meine Projekte (mit geringen Stückzahlen) meist einen 
Linux-fähigen Controller (Cortex A*). Da komme ich am schnellsten mit 
Toolchain, Verfügbarkeit usw. zurecht und kann den Code oft sogar auf 
direkt dem Zielsystem übersetzen oder mit ein paar Scripts testen. Oder 
den Code auf einen anderen Controller (selbst andere Hersteller) 
portieren. Aber das hängt eben von den o.g. Faktoren ab, die sogar 
zwischen 2 Projekten sehr unterschiedlich ausfallen.

In manchen Projekten steht der Stromverbrauch im Vordergrund, egal 
wieviel das kostet...

D.h. "grundsätzlich" kann man die Frage gar nicht beantworten, sondern 
nur das Entscheidungsprinzip für jeden Einzelfall.

: Bearbeitet durch User
von Markus F. (mfro)


Lesenswert?

olaf schrieb:
> Ich finde dieses Microsoftbashing unertraeglich!
Ich auch. Ich finde, über Microsoft sollte man gar nicht reden.

> Soviel schlechter wie
> ein modernes Unix ist Microsoft nicht.

Wenn Du hier die ersten drei Worte wegstreichst, werden wir uns einig.

von W.S. (Gast)


Lesenswert?

Andreas schrieb:
> Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?

Wann? nun denn, wenn man die Rechenleistung braucht, vor allem für 
solche Sachen wie digitale Signalbearbeitung.

Ansonsten werden solche µC gebraucht (im Sinne von 'benutzt'), um damit 
anzugeben oder als Ausgleich für zu dumme Programmierer, die sich eben 
keinen guten Algorithmus ausdenken können oder gerade mal eben nur eine 
Programmiersprache können, die in der Ausführung dann eben langsam ist - 
zu interpretierende Sprachen vor allem. Oder Zeugs, bei dem man zwar 
eine Programmiersprache benutzt, die einen ausreichend schnellen 
Maschinencode erzeugen KÖNNTE, aber anstatt sie derart zu benutzen, wird 
für jeden Furz eine ellenlange Bibliotheksfunktion aufgerufen und damit 
das Ganze wieder schön langsam gemacht.

W.S.

von EAF (Gast)


Lesenswert?

Nikolaus S. schrieb:
> D.h. "grundsätzlich" kann man die Frage gar nicht beantworten,
Das finde ich nicht!

> Wozu übertrieben schnelle Microcontroller?
Meine Antwort ist da klar: Unfug!
Wobei "Übertrieben", bei mir, bedeutet: Schneller als man braucht.

Also eher eine typische Trollfrage, die die Antwort schon als Bias 
enthält.

von Peter Bumsen (Gast)


Lesenswert?

Norbert schrieb:
> olaf schrieb:
>> Ich finde dieses Microsoftbashing unertraeglich!
>
> Aber ein paar Beiträge weiter oben dann Python bashing, ohne jedoch in
> der Lage zu sein Python richtig zu schreiben…

Und damit bestätigst du ihn doch.

Python Anwendungen sind oft übelste Frickelware weil die Leute es eben 
nicht können.

von M. K. (sylaina)


Lesenswert?

Ob ein Mikrocontroller übertrieben schnell ist oder nicht ist eine Frage 
der Anwendung, in der er eingesetzt wurde. +200 MHz für einen 
Mikrocontroller kann übertrieben schnell sein, kann aber auch elendig 
lahm sein. Die Frage ist halt, was soll der Mikrocontroller machen. Je 
nach Antwort auf diese Frage können auch 1 MHz übertrieben schnell sein. 
Bedenkt doch mal, vor +30 Jahren waren mehr als 10/20 MHz CPU-Takt im 
Computer schon sehr schnell ;)

von Totomitharry (Gast)


Lesenswert?

Ich hantiere viel mit Displays..

Zuerst mit dem Uno, dann mit stm32, dann mit dem esp8266 und jetzt mit 
dem esp32, ein Pico zum testen der Städtemachines auf quadspi und 8080 
liegt auch schon hier.. es ist schon Recht unkompliziert Oberflächen zu 
designen.

Wenn man so ein Display mit zum Beispiel 40-80 MHz spi ansteuern möchte 
müssen Berechnungen, die RAM zugriffe, und Flash Zugriffe je nach 
Anwendung auf der mcu ausgeführt werden.

Der esp32 war eigentlich schon für mich die eierlegende Wollmilchsau mit 
seinen 2*240Mhz, integriertem Flash Controller etc..

von EAF (Gast)


Lesenswert?

Totomitharry schrieb:
> ....

Wenn ich es besser könnte, würde ich dich loben, aber so bleibt mir nur 
die Bewunderung.

von olaf (Gast)


Lesenswert?

> Ansonsten werden solche µC gebraucht (im Sinne von 'benutzt'), um damit
> anzugeben oder als Ausgleich für zu dumme Programmierer,

Ach du oller Miesepeter schon wieder. Es findet sicher gerade ein
Generationswechsel bei den Controllern statt. Genau so wie er vor 
10Jahren beim Uebergang von 5V-8Mhz nach den 3V3-50Mhz Controllern statt 
gefunden hat.

Noch ein paar Jahre und wir werden alle >200Mhz Controller nutzen 
einfach weil die normal sind. Deshalb muessen die nicht unbedingt mit 
200Mhz laufen. Ich kenne viele Anwendungen wo 50Mhz Controller nur mit 
1Mhz laufen weil das ausreicht.

Olaf

von Rolf M. (rmagnus)


Lesenswert?

Peter Bumsen schrieb:
> Python Anwendungen sind oft übelste Frickelware weil die Leute es eben
> nicht können.

Python lädt halt auch sehr dazu ein, weil es viele Schweinereien 
erlaubt.

M. K. schrieb:
> Bedenkt doch mal, vor +30 Jahren waren mehr als 10/20 MHz CPU-Takt im
> Computer schon sehr schnell ;)

Ja, und im Vergleich zur CPU des C64 ist ein AVR eine Rakete.
Im Vergleich zu einem Cray-Supercomputer aus den 70ern hat ein aktuelles 
Smartphone etwa einen 30 mal so hohen CPU-Takt, den 1000-fachen Speicher 
und rechnet etwa 100.000 mal so schnell. Und das wird dann verwendet, um 
Candy Crush zu spielen oder Pokemons zu fangen. Ist eben immer relativ, 
was nun als "übertrieben" gesehen wird.

von Ralf (Gast)


Lesenswert?

olaf schrieb:
> Noch ein paar Jahre und wir werden alle >200Mhz Controller nutzen
> einfach weil die normal sind. Deshalb muessen die nicht unbedingt mit
> 200Mhz laufen. Ich kenne viele Anwendungen wo 50Mhz Controller nur mit
> 1Mhz laufen weil das ausreicht.

Immer wieder diese abgestandenen Prophezeiungen. Das mag ja in Deiner 
Welt so sein. Aber eben weil es so viele Anwendungen gibt denen 1MHz 
reicht werden PIC, AVR & Co noch lange koexistieren, Stand heute nach 
wie vor Jahr für Jahr in wachsenden absoluten Stückzahlen. Es gibt da 
nämlich noch ein paar weitere wichtige Kriterien, z.B. ihre simplere 
Programmierbarkeit...

von MaWin (Gast)


Lesenswert?

Ein ESP32 kostet praktisch das gleiche wie ein 8-Bit-Prozessor. 
Teilweise sind die 8-Bitter sogar deutlich teurer.
Und von der Leistungsaufnahme ist der ESP32 auch nicht unbedingt viel 
schlechter. Je nach Anwendung ist das auch vollkommen egal, wenn es 
jetzt nicht irgendeine Super-Duper-Knopfzellen-Extremanwendung ist.

Warum also in dieser Anwendung keinen ESP32 nehmen?

Und warum den nicht in Micropython programmieren, wenn es die Anwendung 
zulässt?
Micropython läuft von der Geschwindigkeit her in der gleichen 
Größenordnung wie C auf einem 16 MHz 8-Bitter.
Wenn das ausreicht, warum nicht den Komfort von Python nehmen?
Bekommt ihr Geld zurück, wenn ihr nur 10% des Prozessors verwendet?

von M. K. (sylaina)


Lesenswert?

MaWin schrieb:
> Warum also in dieser Anwendung keinen ESP32 nehmen?

Vielleicht weil das Know-How nicht da ist, einen ESP32 zu programmieren, 
aber eine erhebliche Menge Know-How da ist, um einen 8-Biter zu 
programmieren. Es gibt immer Gründe den einen oder anderen 
Mikrocontroller zu verwenden.

von Falk B. (falk)


Lesenswert?

MaWin schrieb:

> Warum also in dieser Anwendung keinen ESP32 nehmen?

Stimmt. Für Basteleien jeglicher Art ist es egal, wie ineffizient die 
Programmierung und überdimensioniert oder teuer die Hardware ist.
Für Test- und Hilfsaufbauten mit kleinsten Stückzahlen bis runter auf 1 
ebenso.
Erst wenn es durch bessere Programmierung, kleiner Hardware und 
entsprechende Stückzahlen zu ECHTEN Verbesserungen oder Einsparungen 
kommt, wird das Thema relevant.
Naja, es gibt dann auch noch das ewige Gejammer der Softwerker, daß die 
CPU zu langsam und der Speicher zu klein ist. Ist zwar in den meisten 
Fällen glatt gelogen und nur die Faulheit oder Unfähigkeit der Softis, 
aber was soll's. Das ändert auch keiner mehr. Man muss es nur 
interpretieren können.

von J. S. (jojos)


Lesenswert?

Eine erste Anwendung auf dem ESP8266 habe ich programmiert ohne je das 
Datenblatt des Controllers gesehen zu haben, braucht man da einfach 
nicht. Temperaturmessung mit SHT Sensor und die Daten per Wifi und MQTT 
gesendet. Läuft seit mehreren Jahren im Dauerbetrieb ohne Störung. Das 
teuerste daran war der SHT, das ESP Devboard hatte keine 5 € gekostet.
Was interessiert mich da mit wieviel MHz der Controller läuft?

: Bearbeitet durch User
von Gerald B. (gerald_b)


Lesenswert?

Oft ist es ja inzwischen so, das der schnellere Prozessor weniger 
kostet. Atmegas kosten inzwischen das dreifache, können deswegen aber 
trotzdem nicht mehr. Ob ich mich nun in einen neuen Atmega Chip, der 
auch modernisiert wurde, einarbeite, einen Teensy oder einen STM, ist 
ziemlich egal.
Und wenn ich für die Entwicklung verschieden umfangreicher Projekte alle 
3 lagernd vorhalten muß und der Atmega nur noch 1x im Jahr gebraucht 
wird, und ale 3 in etwa das selbe kosten, oder "der Dicke" sogar noch 
günstiger ist, wen stört es?

von Stefan F. (Gast)


Lesenswert?

Andreas schrieb:
> Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?
> Wann muss man was schnelleres einsetzen als ein Atmega?

Zum Beispiel, wenn du fancy Animationen auf einem hoch auflösenden 
Farbdisplay anzeigen willst. Das gibt es ja schon bei Kaffemaschinen und 
Kochtöpfen.

Oder generell alles, was mit Verarbeitung von Bild und Ton zusammen 
hängt.

> aber für meine Anwendungen reicht auch ein Arduino Uno wenn
> man den Code optimiert und man spart nebenbei Strom.

Niemand verbietet dir den Arduino Uno. Es ist aber nicht grundsätzlich 
so, dass modernere schnellere Controller immer teurer wären oder mehr 
Strom aufnehmen. Teilweise sind sie sogar billiger und sparsamer.

von MaWin (Gast)


Lesenswert?

Falk B. schrieb:
> Stimmt. Für Basteleien jeglicher Art ist es egal, wie ineffizient die
> Programmierung und überdimensioniert oder teuer die Hardware ist.
> Für Test- und Hilfsaufbauten mit kleinsten Stückzahlen bis runter auf 1
> ebenso.
> Erst wenn es durch bessere Programmierung, kleiner Hardware und
> entsprechende Stückzahlen zu ECHTEN Verbesserungen oder Einsparungen
> kommt, wird das Thema relevant.

Es sieht alles danach aus, als hättest du den Beitrag, auf den du 
geantwortet hast, wieder einmal gar nicht gelesen hast.

> Naja, es gibt dann auch noch das ewige Gejammer der Softwerker, daß die
> CPU zu langsam und der Speicher zu klein ist. Ist zwar in den meisten
> Fällen glatt gelogen und nur die Faulheit oder Unfähigkeit der Softis,
> aber was soll's. Das ändert auch keiner mehr. Man muss es nur
> interpretieren können.

Ja. Alle dumm, außer Falk. Kennen wir.

von Daniel (Gast)


Lesenswert?

René H. schrieb:
> Martin S. schrieb:
>> Weil der Prozessor mit 200 MHz einfach 25 mal so schnell ist, wie ein
>> Prozessor mit 8 MHz
>
> Der Prozessor mag schneller sein. Aber deshalb sind es die Programme
> noch lange nicht. Ich hatte mal vor langer Zeit einen Test gemacht. Eine
> (umfangreiche) Berechnung in einer Excel-Datei war auf einem Rechner aus
> 2003 schneller fertig als auf einem Rechner aus 2008. Man sieht also,
> dass es nicht reicht, nur einen schnelleren Prozessor einzubauen. Denn
> ein Rechner ist immer nur so schnell wie sein schwächstes Glied.

Wenn jedes Jahr bzw. bei jeder Version viel "Klickibunti Sch*ßdreck" 
dazu kommt ist es doch klar das die Prozessoren kaum hinterher kommen. 
Es gab Zeiten da lief ein Rechner mit 32 MB Grafikspeicher und 512 MB 
Hauptspeicher tadellos. Ja Windows 2000 oder XP mit der grauen 
Oberfläche und einfachem Hintergrundbild bei 1024x768er oder 1280x1024er 
Auflösung war kein Grafikwunder. Aber vielen Benutzern hat es vollkommen 
ausgereicht, sie haben alles schnell gefunden. In den Office-Programmen 
waren noch normale Schaltflächen und übersichtliche Dialoge.

Schlanke Programmierung geht scheinbar bei bezahlten Programmieren nicht 
mehr.

Dieser Text wurde auf einem Raspberry Pi 3 geschrieben.

von Falk B. (falk)


Lesenswert?

MaWin schrieb:
> Ja. Alle dumm, außer Falk. Kennen wir.

Getroffene Hunde bellen!

von Norbert (Gast)


Lesenswert?

Daniel schrieb:
> Wenn jedes Jahr bzw. bei jeder Version viel "Klickibunti Sch*ßdreck"
> dazu kommt ist es doch klar das die Prozessoren kaum hinterher kommen.
> Es gab Zeiten da lief ein Rechner mit 32 MB Grafikspeicher und 512 MB
> Hauptspeicher tadellos. Ja Windows 2000 oder XP mit der grauen
> Oberfläche und einfachem Hintergrundbild bei 1024x768er oder 1280x1024er
> Auflösung war kein Grafikwunder.

Ich möchte dir hier an dieser Stelle einmal gratulieren.
Du hast dich - sehr abenteuerlich - soweit vom ursprünglichen Thema 
entfernt, das du dessen Bedeutung noch nicht einmal mehr erkennen 
kannst.

Doppelter Daumen aufwärts…

von J. S. (jojos)


Lesenswert?

Daniel schrieb:
> Wenn jedes Jahr bzw. bei jeder Version viel "Klickibunti Sch*ßdreck"

mein Laptop bedient 3 Monitore in HD, da läuft nebenbei TV auf Kodi, ein 
Kamerabild, der Webbrowser mit vielen Tabs, ein Linux im Windows, Editor 
mit vielen offenen Dateien und der Compiler übersetzt trotzdem noch 800 
Quellcodedateien in wenigen Minuten.
Nee, ich möchte keinen RPi als Arbeitsrechner haben und schon gar kein 
XP mehr zurück. Steinzeit der EDV.

Norbert schrieb:
> Doppelter Daumen aufwärts…

genau, wenn Windows auf dem µC läuft sehen wir weiter. Und jetzt bitte 
nicht wieder mit den Cortex-A kommen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

René H. schrieb:
> Der Prozessor mag schneller sein. Aber deshalb sind es die Programme
> noch lange nicht. Ich hatte mal vor langer Zeit einen Test gemacht. Eine
> (umfangreiche) Berechnung in einer Excel-Datei war auf einem Rechner aus
> 2003 schneller fertig als auf einem Rechner aus 2008.

Ich hatte einen Laptop mit 2·2,4 GHz, der nach einen Sturz nicht mehr 
zuverlässig funktionierte, durch einen neuen mit nur 2·1,3 GHz 
ausgetauscht. Dennoch lief der neue gefühlt kein bisschen langsamer, als 
der alte.

Bei Mikrocontrollern ist das mit den MHz auch nicht so 1:1. STM32 
brauchen für die meisten Aufgaben mehr Taktzyklen, als ATmega328.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> STM32
> brauchen für die meisten Aufgaben mehr Taktzyklen, als ATmega328.

Ja, egal, am besseren Preis-Leistungsverhältnis vieler 32er ändert das 
auch nichts. Aber es geht bei der Entscheidung für den 8Bitter eben um 
mehr als nur darum. Denn zumindest da wo er die Entscheidungsfreiheit 
noch besitzt spielt der Faktor Mensch eine große Rolle.

Gerald B. schrieb:
> Atmegas kosten inzwischen das dreifache

Naja, man muß schon auf dem Laufenden bleiben.
Aktuelle PICs / AVRs eben gerade nicht.

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> Ja, egal, am besseren Preis-Leistungsverhältnis vieler 32er ändert das
> auch nichts.

Da stimme ich dir voll zu

von J. S. (jojos)


Lesenswert?

Stefan F. schrieb:
> STM32
> brauchen für die meisten Aufgaben mehr Taktzyklen, als ATmega328.

single/double precision FPU, DMA, Ethernet NIC, DSI/LTDC Display, 32 Bit 
Timer, FMC für MB an zusätzlichem Speicher, USB HS und Host,...
Welcher ATMega bietet das nochmal? Wen jucken da ein paar mehr Takte bei 
550 MHz?

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> Aber es geht bei der Entscheidung für den 8Bitter eben
> um mehr als nur darum.

Ich habe sie noch nicht aus meiner Bastelkiste verbannt, weil sie

a) Problemlos ins Steckbrett und auf Lochraster passen. Ich benutze sie 
so gerne für Experimente und Einzel-Aufbauten, für die nie eine richtige 
Platine produziert wird.

b) Sie aufgrund des geringeren Funktionsumfangs einfacher zu 
programmieren sind. Wenn sie ausreichen, ist es für mich ein Vorteil.

von Stefan F. (Gast)


Lesenswert?

J. S. schrieb:
> Wen jucken da ein paar mehr Takte bei 550 MHz?

Niemanden. Ich wollte nur sagen, dass man die Taktfrequenz nicht 1:1 
vergleichen kann.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ralf schrieb:
> A-Freak schrieb:
>> damit man ineffiziente Programmiersprachen mit aufgeblähten Bibliotheken
>> benutzen kann
>
> Mich amüsiert da immer die Leistungs-Anhimmelung z.B. bei
> Apple-Produktshows.

So pauschal würde ich das nicht sehen.

Wir haben in der Firma kürzlich einem Kunden den defekten Akku eines 
2018er Macbook ausgetauscht. Im Gespräch kamen wir darauf, dass er auf 
der Arbeit (Helmholtz Institut) kürzlich ein neues Macbook mit 
M1-Prozessor bekommen hat. Und er war voll des Lobes, dass seine 
Mathe-Modelle bzw. -Simulationen jetzt nur noch Minuten statt Stunden 
brauchen ...

Ich kenne auch einen Grafiker, der umfangreiche 3D-Szenen kreiert. Auch 
der hat ordentlich Kohle in die Hand genommen für einen neuen Mac-Pro. 
Und er ist überaus zufrieden wegen der enormen Zeit (80%), die er nun 
beim Rendern spart.

Für den gewöhnlichen Office-User oder MC-Programmierer ist das sicher 
nicht relevant, aber es gibt schon Leute, die etwas davon haben.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

J. S. schrieb:
> single/double precision FPU, DMA, Ethernet NIC, DSI/LTDC Display, 32 Bit
> Timer, FMC für MB an zusätzlichem Speicher, USB HS und Host,...
> Welcher ATMega bietet das nochmal? Wen jucken da ein paar mehr Takte bei
> 550 MHz?

Für Bitgefummel sind die Boliden nicht gebaut und oft den Kleinen 
unterlegen. SIehe Raspberry Pi. Sei es durch echte 
Hardwarebeschränkungen oder komplizierten Softwarezugang bzw. Krampf 
durch Betriebssystem.

von J. S. (jojos)


Lesenswert?

Falk B. schrieb:
> Für Bitgefummel sind die Boliden nicht gebaut und oft den Kleinen
> unterlegen.

ja, dafür haben die eben spezielle Devices damit man den schnellen Core 
nicht durch Warteschleifen lahmlegen muss. Es kommt bei diesen 
Controllern nicht nur auf die PS an, die haben eben auch schnuckelige 
Peripherie.

von Stefan F. (Gast)


Lesenswert?

A-Freak schrieb:
> damit man ineffiziente Programmiersprachen mit
> aufgeblähten Bibliotheken benutzen kann

Die Frage ist, aus wessen Sicht oder wo genau "ineffizient"?

In den 90er Jahren sollte ich Java 1.1 für eine Datenbank-Anwendung mit 
GUI evaluieren. Damals gab es noch keine kostenlosen SQL Datenbanken, 
deswegen sollte ich eine eigene programmieren. Jedenfalls lief das Java 
so quälend langsam, dass es trotz ständig schneller werdenden Computer 
nicht in Frage kam. Da war Java für mich vorläufig für einige Jahre raus 
aus dem Rennen.

Heute arbeite ich täglich an Java Programmen und erledige damit meine 
Arbeit schneller, als mit allen anderen Programmiersprachen. Die damit 
erzeugten Programme sind immer noch langsamer als C und brauchen noch 
mehr Speicher als damals. Aber das interessiert unsere Kunden nicht. 
Schnelle Rechner sind nämlich billiger als Arbeitszeit. In dem Umfeld wo 
ich arbeite (keine Massenprodukte), nimmt man vernünftigerweise das, 
womit man am schnellsten fertig wird.

Ich kenne andere, die ihren Job mit Perl und Python machen. Über 
technische Effizienz brauchen wir da gar nicht zu diskutieren. Sie 
nutzen die Sprachen gerade wegen den "aufgeblähten Bibliotheken". Da 
ersetzt man lieber vier Programmierer durch eine kostenlose Bibliothek 
und einen schnellen Computer.

Vom Mikrocontroller in Consumer Produkten bis zu meinem Job gibt es eine 
breite Spanne vom Computer-Anwendungen mit unterschiedlichsten 
Bedürfnissen. Ich denke, dass die 32 Controller zunehmend beliebt und 
sinnvoll werden. Aber noch haben sie die einfacheren 8 Bitter nicht ganz 
verdrängt.

von Peter D. (peda)


Lesenswert?

PittyJ schrieb:
> Dazu sind mehrere Radar Chips über SPI
> mit dem Controller verbunden, die permanent bedient und ausgewertet
> werden müssen.
> Der 400MHz Controller wird dabei komplett ausgelastet.

Wie langsam liefern denn die Radar Chips überhaupt neue Meßwerte maximal 
und wieviel 100 Sensoren sind denn angeschlossen?

Wenn man es sich leisten kann, Daten seriell über das SPI reintröpfeln 
zu lassen, dann langweilt sich eine 400MHz CPU nur.
Es sei den, man rotzt mal eben schnell undurchdachten Spaghetticode 
runter, ohne die Programmaufgabe vorher analysiert zu haben.

von Stefan F. (Gast)


Lesenswert?

Peter D. schrieb:
> Es sei den, man rotzt mal eben schnell undurchdachten Spaghetticode
> runter, ohne die Programmaufgabe vorher analysiert zu haben.

Im Job ist das doch oft genau so gewollt. Wenn du beim Kunden 10 Minuten 
aus dem Fenster starrst um nachzudenken, ruft der deinen Chef an und 
beschwert sich.

von Falk B. (falk)


Lesenswert?

Stefan F. schrieb:
>> Es sei den, man rotzt mal eben schnell undurchdachten Spaghetticode
>> runter, ohne die Programmaufgabe vorher analysiert zu haben.
>
> Im Job ist das doch oft genau so gewollt. Wenn du beim Kunden 10 Minuten
> aus dem Fenster starrst um nachzudenken, ruft der deinen Chef an und
> beschwert sich.

Was für ein Unsinn!

"Wenn du es eilig hast, gehe langsam."

Laotse

von Stefan F. (Gast)


Lesenswert?

Falk B. schrieb:
> Was für ein Unsinn!
> "Wenn du es eilig hast, gehe langsam."

Ich habe zum Glück einen vernünftigen Chef, der ebenso denkt. Habe aber 
auch schon andere erlebt.

von J. S. (jojos)


Lesenswert?

ich hatte gerade mit einer Igus Schrittmotorsteuerung zu tun. Sehr 
schönes Teil, hat Ethernet und eine Weboberfläche für einfache 
Konfiguration und Steuerung. Darüber können einfache Fahrprogramme 
parametriert werden, es gibt Statusanzeigen und auch ein Oszilloskop das 
Motorströme anzeigen kann. Ansteuerung auch über CAN und Modbus over TCP 
und der Motor wird aktiv geregelt über Encoder Feedback.
Darin werkelt ein einsamer STM32G4. Klar, man kann SM auch mit ATMega 
ansteuern. Der Punkt ist aber das mit den fetten Controllern wesentlich 
komfortablere Produkte möglich sind.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

J. S. schrieb:
> Darin werkelt ein einsamer STM32G4. Klar, man kann SM auch mit ATMega
> ansteuern. Der Punkt ist aber das mit den fetten Controllern wesentlich
> komfortablere Produkte möglich sind.

Das hat doch keiner bestritten. Die Frage war aber, wozu man ÜBERTRIEBEN 
leistungsstarke Controller nutzen kann/sollte/will. Deinen STM32 könnte 
man auch durch einen ATOM oder sonstigen Boliden ersetzen (Jaja, ist 
Äpfel und Birnen). Klar hat man heuten den Luxus, in fast allen 
Leistungsklassen sehr billige, oft SPOTTBILLIGE Hardware zu bekommen, 
mit denen man mit Atombomben auf Moskitis werfen kann. Ja, kann man, ist 
in bestimmten Situationen auch OK. Kostet nix, ist schnell fertig.

von J. S. (jojos)


Lesenswert?

Falk B. schrieb:
> Deinen STM32 könnte
> man auch durch einen ATOM oder sonstigen Boliden ersetzen

statt STM32 wird bei uns immer ein PC mit Software SPS eingesetzt...
Ich habe gestern eine Schulung abgehalten zur Verwendung von STM32. 
STMCubeIDE, PlattformIO mit Arduino Framework und kurz Mbed gezeigt.
Low Level wird niemand einsetzen, die Zeit dafür Hilfsmittel damit zu 
bauen wäre viel zu teuer. Mit dem Rapid Prototyping durch die genannten 
Hilfsmittel sieht das schon etwas anders aus.

von olaf (Gast)


Lesenswert?

> Wie langsam liefern denn die Radar Chips überhaupt neue Meßwerte maximal
> und wieviel 100 Sensoren sind denn angeschlossen?

Die liefern dir ueblicherweise komplexe Spektren und du kannst danach je 
nach Aufgabe wirklich anstaendig rechnen. Darueber hinausgehende Detail 
wird dir aber ohne NDA kaum einer mitteilen. Sowas kann jedenfalls sehr 
gut ein Grund fuer dicke Rechenleistung oder FPGA sein.

Olaf

von Gerhard O. (gerhard_)


Lesenswert?

Moin,

Ich bin der Meinung, daß die Wahl der uC von den Anwendungsgebieten 
abhängt. Wer graphische GUI, Netzanbindung, Digitale NF-Anwendungen 
(I2S), viele Floats Berechnungen, braucht naturbedingt für flüssige 
Performanz entsprechende schnelle und breitschultrige Architekturen.

Wer "Real World" Steuer Anwendungen realisiert die sich in der ms bis s 
Zeitskala bewegen müssen, ist auch mit 8-bittern gut bedient. Die 
früheren Nadel oder Thermische Drucker kamen damals auch mit 8-bit 
Controllern gut zurecht.

Kryptographische Anwendungen mit schnellen 8-bittern und HW AES u.ä. 
funktionieren auch damit in den meisten Fällen befriedigend.

Ich habe einen Bekannten der sich vor einem halben Jahr einen RPi-Zero 
gekauft hat und anfänglich begeistert von Python war und was er alles 
damit machen konnte. Funktionierte wunderschön solange er auf die 
Funktionalität der mitgelieferten Bibliotheken bauen konnte. Sobald er 
Sachen machen wollte die in den Bibliotheken nicht vorhanden waren, fing 
der Katzenjammer an, weil es scheinbar nicht so einfach ist, die 
notwendigen Funktionen und Bibliotheken auf HW-Ebene herzustellen. Auch 
datenblattmässig gab es da Probleme. Jedenfalls sind das für blutige 
Anfänger gewaltige Herausforderungen die mit einer steiler Lernkurve 
verbunden sind.

In solchen Fällen ist man mit C/C++ auf gut dokumentierten Plattformen 
besser bedient, weil man in der Regel mit ausführlichen uC Datenblätter 
und Appnotes arbeiten kann. Die STM32 Peripherie Bibliothek trotz ihres 
kontroversen Rufs dokumentierte wie man alle diese Sachen 
beispielsmässig verwenden könnte und waren bei der komplexen Architektur 
ein guter Ausgangspunkt für weitere Eigenentwicklungen.

Anfänger essen oft mit den Augen. Da sehen sie alle diese modernen GUI 
Anwendungen auf Smartphones und Tablets und möchten es selber tun 
können. Da vergisst man oft wie leistungsfähig heutzutage die 
zugrundeliegende Technik drin wirklich ist und die enorme interne 
Komplexität. Das ist nichts für  die meisten Wochenendprogrammierer. Man 
vergisst leicht wieviel Arbeit da drin steckt.

Wer es einigermassen übersichtlich haben will, der ist mit einfacheren 
versteckten 8-bit Anwendungen wahrscheinlich besser bedient. Wer 
wirklich programmieren kann, kann auch 8-Bitter zum Singen bringen:-)

Gute Planung mit guter Ausarbeitung und nicht blockierendes 
Programmieren verhilft auch bei 8-bit Anwendungen meist zu flüssiger 
Performanz und daran fehlt es heute oft.

R&S baute damals Ender der siebziger Jahre komplette komplizierte 
Meßgeräte mit GPIB und ein oder zwei 8039er. (Mobiltester) damals 
konzentrierte man sich auf das Wesentliche.

Was mich betrifft, spiele ich privat lieber mit 8-bittern. Das ist 
meistens besser überschaubar.

Gerhard

: Bearbeitet durch User
von Malte _. (malte) Benutzerseite


Lesenswert?

Vor ~14 Jahren habe ich mit mit einem Atmega128 einen MP3 Player gebaut 
(extnerner mp3 Decoder, externer Ethernet Chip, externer SRAM, externe 
SD Karte), der auch Internet Radio Streams kann. Das war damals ein 
absoluter Krampf das Aussetzfrei hin zu bekommen und bei der FTP 
Datenübertragung war 100KB/s das Maximum.
Hätte es damals schon einen STM32 gegeben, könnte ich den heute https 
fähig machen und das wäre damals viel entspannter gewesen.
Ich finde es toll, dass ich jetzt als Bastler "mal eben" einen >= 100MHz 
Chip verlöten kann.
Klar nicht immer braucht man so viel Rechenleistung, und zugegeben die 
AVR sind gegen die STM32 immer wieder wunderbar einfach zu verstehen und 
damit Anfängertauglich. Bleiben noch wenige echte Vorteile: 20 statt 
10mA pro IO, doppelt so hohe Gesamtbelastung über alle IOs, volle 5V 
tauglichkeit. Absolut vorhersehbar was die Ausführungszeiten pro Befehl 
angeht. Und mit 450...550nm (Hatte da verschiedene Quellen zur 
Strukturgröße gefunden) vermutlich auch ne Nummer robuster.

von Stefan F. (Gast)


Lesenswert?

Malte _. schrieb:
> vermutlich auch ne Nummer robuster.

Definitiv. Versuche mal einen AVR durch Kurz-Schließen von Ausgängen 
kaputt zu kriegen. Es geht, aber man muss es schon absichtlich drauf 
anlegen. Ein paar einzelne Pins reichen dazu nicht.

Die vertragen auch weit mehr als 5V kurzzeitig. Ich habe einen mal 
wochenlang an 6V betrieben - kein Problem. Ebenso laufen sie auch noch 
mit instabilen 2-3V an schwachen Knopfzellen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wenn man heutzutage einen µC mit vielen I/Os braucht, bekommt man viele
Megahertz oft gratis mit dazu, ob man sie braucht odder nicht. Manchmal
bekommt man dafür sogar noch etwas Geld geschenkt.

Hier ist ein Vergleich von einem Atmega2560-16AU (den kennt hier jeder)
mit einem MIMXRT1051DVL6B (das ist eine leicht abgespeckte Version des
MIMXRT1062DVL6B im Teensy 4.0, auf das sich der TE bezieht):
1
                           AVR    i.MX
2
──────────────────────────────────────────
3
Preis bei Digikey / €       18,04   16,23¹
4
I/Os                        86     127
5
Flash / KiB                256    2048¹
6
SRAM / KiB                   8     512
7
Wortbreite CPU / bit         8      32
8
Taktfrequenz / MHz          16     600
9
Rechenleistung Coremark²     8,2  2313,57
10
Max. Verbrauch CPU / mW    100     350
11
──────────────────────────────────────────
12
13
⁾) Da der i.MX kein internes Flash hat, beziehen sich die Angaben auf
14
   die Kombination mit einem externen W25Q16JVSNIM mit 2MB für 0,53€.
15
²) Quelle: https://ckarduino.wordpress.com/benchmarks/

Darüberhinaus hat der i.MX Ethernet, 2 × USB OTG, 2 × CAN, mehr Timer,
mehr PWM-Kanäle, mehr USARTs, FPU, MPU u.v.m.

Einzig im Verbrauch steht der i.MX schlechter da, zumindest in absoluten
Zahlen. Bezieht man den Verbrauch fairerweise auf die Rechenleistung,
ist der i.MX auch hier sehr deutlich im Vorteil. Wenn man nicht die
volle Rechenleistung braucht, kann man die CPU ja heruntertakten oder
zeitweise schlafen legen.

Einen ATmega2560 würde ich heute unter diesem Gesichtspunkt für
Neuentwicklungen nicht mehr einsetzen.

Ok, ein entscheidender Nachteil des i.MX darf nicht verschwiegen werden:
Die Dokumentation (Datenplatt + Referenzhandbuch) umfasst 3539 Seiten,
dazu kommen ggf. noch zwei ARM-Referenzhandbücher mit zusammen 1003
Seiten. Wenn man den Controller also wirklich beherrschen möchte, sollte
man kein Datenblattmuffel sein :)

: Bearbeitet durch Moderator
von Stefan F. (Gast)


Lesenswert?

Preisvergleiche sind seit 2021 allerdings problematisch, weil sie wild 
in die Höhe springen, falls überhaupt verfügbar.

Viele STM32 Modelle kosten heute das 10-Fache als vor 2 Jahren.

Der meisten AVR Modelle von denen ich gerade mal Stichproben genommen 
habe, kosten "nur" doppelt so viel, wie vor 2 Jahren. Vor ein paar 
Monaten hatte ich hingegen welche zum 5-Fachen Preis gesehen.

Aber das kann sich jederzeit ändern, je nach Verfügbarkeit. Ich habe de 
Eindruck, dass die alten 8Bit AVR von der Nicht-Verfügbarkeit weniger 
schlimm betroffen waren und daher auch schneller wieder auf ein normales 
Preisniveau zurück kommen.

von M. K. (sylaina)


Lesenswert?

Wenn ich das hier so lese ist es eigentlich ein Wunder, dass es 
überhaupt noch 8-Biter gibt. Eigentlich müssten die längst ausgestorben 
sein. Dass sie auch noch steigende Absatzzahlen vorweisen können 
entbehrt jeder Logik…oder aber hier liegen doch einige weit daneben mit 
ihren Ansichten…was mag wohl wahrscheinlicher sein?

Gerald B. schrieb:
> Ob ich mich nun in einen neuen Atmega Chip, der
> auch modernisiert wurde, einarbeite,

So viel muss man sich da gar nicht einarbeiten, die werden wie die 
ATXmegas programmiert. Sooo „neu“ sind die also gar nicht vom Kern her 
;)

von Stefan F. (Gast)


Lesenswert?

M. K. schrieb:
> Dass sie auch noch steigende Absatzzahlen vorweisen können
> entbehrt jeder Logik

Nein. Und warum sie noch gemocht werden, kannst du hier jede Woche 
erneut nachlesen - auch in diesem Thread. Wenn man das alles ignoriert, 
oder davon überzeugt ist, dass die ganze Welt die gleichen Bedürfnisse 
haben muss, wie man selbst, ja dann kann es einem unlogisch vorkommen.

"Warum fahren hier alle falsch?" dachte der Geisterfahrer.

von c-hater (Gast)


Lesenswert?

Stefan F. schrieb:

> Preisvergleiche sind seit 2021 allerdings problematisch, weil sie wild
> in die Höhe springen, falls überhaupt verfügbar.
[...]
> Aber das kann sich jederzeit ändern, je nach Verfügbarkeit.

Richtig, deswegen ist auch Yalus Beispiel etwas neben der "allgemeinen 
Realität". Es ist nämlich bei den AVRs genauso wie bei den anderen MCUs: 
was in vielen bestehenden Designs steckt, wurde weit überproportional 
teurer. Und das hat auch einen ganz logischen Grund: die Spekulanten, 
die heute den Markt kontrollieren, haben sich natürlich umfassend über 
den zu erwartenden Bedarf informiert, bevor sie alle Bestände aufgekauft 
haben, um den Markt zu monopolisieren und sich dabei auf die Typen 
konzentriert, die die höchste Rendite durch die künstliche Verknappung 
versprechen. Also das, was in laufenden Produkten in hoher Zahl 
eingesetzt wird.

Witzig ist, dass man nunmehr umgekehrt die Recherche-Aufwände der 
Spekulanten kostenlos nutzen kann, um (näherungsweise) herauszubekommen, 
was eigentlich so üblicherweise verbaut wird. Das ist genau das Zeug mit 
den höchsten Raten bei der Preissteigerung...

Ich muß zugeben: ich selber war etwas überrascht, dass der 2560 (der nie 
wirklich ein Schnäppchen war) trotzdem offensichtlich sehr gut lief.

von Da Baby (Gast)


Lesenswert?

J. S. schrieb:
> TFT mit hübscher GUI brauchen auch etwas mehr Power als ein AVR
> bietet.

muss heute alles nen touchdingens haben?

von Stefan F. (Gast)


Lesenswert?

Da Baby schrieb:
> muss heute alles nen touchdingens haben?

Frage das Leute aus dem Marketing. Ein Techniker würde sagen "muss 
nicht", aber das interessiert den Markt eher wenig.

von J. S. (jojos)


Lesenswert?

Da Baby schrieb:
> muss heute alles nen touchdingens haben?

wird günstiger sein als Tasten. Aber auch ohne Touch ist eine gute 
Grafik ansprechender.

von PittyJ (Gast)


Lesenswert?

olaf schrieb:
>> Wie langsam liefern denn die Radar Chips überhaupt neue Meßwerte
> maximal
>> und wieviel 100 Sensoren sind denn angeschlossen?
>
> Die liefern dir ueblicherweise komplexe Spektren und du kannst danach je
> nach Aufgabe wirklich anstaendig rechnen. Darueber hinausgehende Detail
> wird dir aber ohne NDA kaum einer mitteilen. Sowas kann jedenfalls sehr
> gut ein Grund fuer dicke Rechenleistung oder FPGA sein.
>
> Olaf

Endlich mal einer, der was davon versteht.
Pro Messung werden ca 1000 Byte zwischen CPU und Sensor verschickt. Die 
NDA Api des Herstellers rechnet auf den Werten auch noch herum (Arm M7 
mit FPU nötig). Und das Ziel sind 400 Messungen pro Sekunde. Denn der 
Roboter soll innerhalb <5ms stoppen, wenn ein Mensch zu nahe kommt.

Bei einem Atmel hätte man wohl den Robbi im Gesicht, bevor dieser 
stoppt.

von Falk B. (falk)


Lesenswert?

PittyJ schrieb:
> Endlich mal einer, der was davon versteht.
> Pro Messung werden ca 1000 Byte zwischen CPU und Sensor verschickt.

Von EINEM Sensor oder allen zusammen? Wieviele Sensoren?

> Die
> NDA Api des Herstellers rechnet auf den Werten auch noch herum (Arm M7
> mit FPU nötig).

Naja, das wird vermutlich der Löwenanteil sein. Und mit nur einem 
CPU-Kern kann man da auch nix parallel betreiben.
Hast du die Rechenzeiten mal gemessen?

> Und das Ziel sind 400 Messungen pro Sekunde.

Macht 400kB/s bzw. 3,2Mbit/s. Naja. Ist schon etwas flotter ;-)
Für ein FPGA aber Zeitlupe.

> Bei einem Atmel hätte man wohl den Robbi im Gesicht, bevor dieser
> stoppt.

Niemand sagt, daß ein popeliger Arduino ausreichend wäre ;-)
Aber generell ist immer Vorsicht angesagt, wenn Leute behaupten, Ihre 
CPU wäre total gestresst. Da steckt oft ein schlechtes Konzept oder 
schlechte Umsetzung dahinter.
Das kann man natürlich nur dann bewerten, wenn man ein paar belastbare 
Zahlen kennt.
Auf der anderen Seite ist eine 400MHz CPU heute für ein paar Euro zu 
haben, z.B. die Blackfins von Analog Devices.

von Silizionix (Gast)


Lesenswert?

< ...Endlich mal einer, der was davon versteht.
< Pro Messung werden ca 1000 Byte zwischen CPU und Sensor verschickt. 
Die
< NDA Api des Herstellers rechnet auf den Werten auch noch herum (Arm M7
< mit FPU nötig). Und das Ziel sind 400 Messungen pro Sekunde. Denn der
< Roboter soll innerhalb <5ms stoppen, wenn ein Mensch zu nahe kommt.

< Bei einem Atmel hätte man wohl den Robbi im Gesicht, bevor dieser
< stoppt...

Ich frag mich nur wer ausser in der einschlägigen Industrie solche 
Ansprüche überhaupt hätte.

Vertritt den das Forum denn nur die Industrieexperten? Irgendwie kommen 
mir manche Aussprüche im Forum oft etwas schmalspurig und hochtrabend 
vor. Die Welt der uC ist eigentlich vielseitiger und sehr nuanciert.

von Lothar (Gast)


Lesenswert?

Mit einem 20 MHz ATmega328 kann man über Pins nur VGA 20x60 Zeichen an 
einen Monitor ausgeben.

Mit einem 72 MHz 8051 EFM8LB1 gehen die kompletten VGA 80x60 Zeichen :-)

von Ein T. (ein_typ)


Lesenswert?

olaf schrieb:
>> Aber ein paar Beiträge weiter oben dann Python bashing,
>
> Es ist nicht 10x langsamer wie C?

Nein.

von Manfred (Gast)


Lesenswert?

Silizionix schrieb:
> Vertritt den das Forum denn nur die Industrieexperten?

Wohl kaum. Der Industrieexperte muß kostenoptimiert entwickeln, also 
kein MHz zuviel, wenn der µC deshalb mehr kostet. Oder auch nicht, weil 
er bei mehr Rechenleistung seine Software in der halben Zeit hinpfuschen 
kann.

> Die Welt der uC ist eigentlich vielseitiger und sehr nuanciert.

So ist das, pauschal allgemeingültige Aussagen kann man nicht treffen.

Im Zweifelsfall gilt, dass der schnelle Prozessor eben schneller warten 
kann.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

(prx) A. K. schrieb:
> Programmierer schrieb:
>> Dann findet der Chef jemanden der es kann!
>
> Er versucht es. Und klagt kurz darauf über Fachkräftemangel.

Das erinnert mich an ein Gespräch mit einem Kunden.

Er: "WAAAAS? Ich kann mir ja auch für wesentlich weniger Geld den 
Nächstbesten von der Straße holen."

Ich: "Dann mach das doch."

Er: "Der kann das aber nicht!"

Ich: "Ach, wirklich?"

Er: "Ich will, dass DU das für so wenig Geld machst! Du kassierst doch 
schon von Deinen anderen Kunden so viel Geld und kannst damit mein 
Projekt bezahlen!"

von Sportsoldat mit Adipositas (Gast)


Lesenswert?

PittyJ schrieb:
> Manche manchen doch etwas mehr, als nur LEDs blinken zu lassen.

Ich lasse meine LEDs immer mit 400 MHz blinken. Gerne auch schneller.
Mach mit. Sei auch ein Gönner!

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

A-Freak schrieb:
> damit man ineffiziente Programmiersprachen mit aufgeblähten Bibliotheken
> benutzen kann
:-)

So lustig das klingt, da ist was dran. Zu "meiner" Zeit in den 1990ern 
musste man im doppelten Sinn effektiv programmieren, also schnell und 
zugleich mit einem Ergebnis, das auf der MCU effektiv und damit dort 
dann schnell ablief - bei entsprechendem Entwicklungsaufwand.

Heute hat sich das verschoben: Es wird viel schneller und 
oberflächlicher programmiert, meist durch Zusammenklicken in 
build-Umgebungen und vorgefertige universelle Libs eingebunden, die 
nicht beliebig gut optimiert werden können, damit rasch was da ist. Um 
so effektiver und langsamer ist die entstandene Software.

Ein Kollege, der heute noch Software macht, hat mir vor einigen Jahren 
einmal ein Beispiel genannt, dass er eine MCU-Software von Ende der 90er 
in nativem C mit einem damals modernen Compiler hat laufen lassen und 
dabei angepasste Libs für einen neuen Controller genutzt hat: Das war 
dann schon 15% langsamer, als die alte Version mit dem alten Compiler 
für den alten Controller. Bei gleicher Taktfrequenz hätte der neue 
Controller also langsamer gearbeitet.

Vor allem aber gab es den interessanten Effekt, dass die Hinzunahme 
verschiedenere Ausgabemodule sofort einen dicken overhead erzeugte, und 
das System weiter runterbremste, während die versuchsweise händisch 
hinzugebauten Funktionen ohne unterstützende Libs im alten System nicht 
viel Mehraufwand erzeugten. Das wurde probiert, um ein Testsystem zu 
haben,  ohne eine neue HW bauen zu müssen.

Am Ende war es so, dass die neue Version auf einer CPU Jahrgang 2018 nur 
85% der Effizizenz des Systems 2009 hatte und gegenüber dem 1999er sogar 
nur gut 50%.

Die neue CPU arbeitet halt 5x schneller und kann jeweils 2 alte Kanäle 
absorbieren. Und: Sie ist billiger, als eine alte!

von Christoph M. (mchris)


Lesenswert?

Peda schrieb
>Wie langsam liefern denn die Radar Chips überhaupt neue Meßwerte maximal
>und wieviel 100 Sensoren sind denn angeschlossen?

Hier der Link auf einen der Radarmikrocontroller (MPC577xK):
https://www.nxp.com/products/processors-and-microcontrollers/power-architecture/mpc5xxx-microcontrollers/ultra-reliable-mpc57xx-mcus/ultra-reliable-mpc577xk-mcu-for-adas-and-radar:MPC577xK

Der Signalverarbeitungsblock in so einem Controller ist ziemlich extrem 
und war ursprünglich in FPGAs implementiert. Das ganze besteht aus dem 
Signalverarbeitungsblock und vier Power-PC Kernen. Zwei davon laufen in 
Lockstep.

von Christoph M. (mchris)


Lesenswert?

Noch ein kleiner Nachtrag: Die Controller sind teilweise tatsächlich nur 
zum LED-Blinken; nämlich der LED im Seitenspiegel, wenn ein Auto 
überholt.

von W.S. (Gast)


Lesenswert?

Ein T. schrieb:
> olaf schrieb:
>>> Aber ein paar Beiträge weiter oben dann Python bashing,
>>
>> Es ist nicht 10x langsamer wie C?
>
> Nein.

Nana... schreib es richtig herum: Man kann auch in C so programmieren, 
daß es genauso langsam läuft wie bei Python. Ja, das geht tatsächlich.


Malte _. schrieb:
> Klar nicht immer braucht man so viel Rechenleistung, und zugegeben die
> AVR sind gegen die STM32 immer wieder wunderbar einfach zu verstehen und
> damit Anfängertauglich.

Einen Nebeneffekt sieht man auch hier in diesem Thread: Es scheint so, 
als ob viele Leute (die sich Programmierer oder Entwickler nennen) außer 
AVR und STM32 kaum noch etwas anderes kennen. Entsprechend sieht dann 
deren Weltsicht auch in anderen Dingen aus.

W.S.

von Ein T. (ein_typ)


Lesenswert?

W.S. schrieb:
> Ein T. schrieb:
>> olaf schrieb:
>>>> Aber ein paar Beiträge weiter oben dann Python bashing,
>>>
>>> Es ist nicht 10x langsamer wie C?
>>
>> Nein.
>
> Nana... schreib es richtig herum: Man kann auch in C so programmieren,
> daß es genauso langsam läuft wie bei Python. Ja, das geht tatsächlich.

Das geht sogar in Assembler. Trotzdem ist die pauschale Aussage, daß 
Python "10x langsamer als C" sei, schlicht und ergreifend: falsch.

von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Es scheint so,
> als ob viele Leute (die sich Programmierer oder Entwickler nennen) außer
> AVR und STM32 kaum noch etwas anderes kennen.

ja und? Für die meisten ist es Mittel zum Zweck und nicht 'ich möchte 
mich möglichst vielen Architekturen und Tools herumschlagen'.

von Rolf M. (rmagnus)


Lesenswert?

W.S. schrieb:
> Nana... schreib es richtig herum: Man kann auch in C so programmieren,
> daß es genauso langsam läuft wie bei Python. Ja, das geht tatsächlich.

Wenn man es drauf anlegt, bekommt man alles langsam. Aber interpretierte 
Sprachen haben nun mal prinzipbedingt da Nachteile gegenüber 
compilierten.

> Einen Nebeneffekt sieht man auch hier in diesem Thread: Es scheint so,
> als ob viele Leute (die sich Programmierer oder Entwickler nennen) außer
> AVR und STM32 kaum noch etwas anderes kennen. Entsprechend sieht dann
> deren Weltsicht auch in anderen Dingen aus.

Vor allem scheinen viele sich nur ihren spezifischen Anwendungsfall 
vorstellen zu können. Da fehlt oft das Vorstellungsvermögen, dass man 
für andere Anwendungen auch andere Anforderungen haben könnte.

von A. S. (Gast)


Lesenswert?

Jürgen S. schrieb:
> Es wird viel schneller und
> oberflächlicher programmiert, meist durch Zusammenklicken in
> build-Umgebungen und vorgefertige universelle Libs eingebunden, die
> nicht beliebig gut optimiert werden können, damit rasch was da ist. Um
> so effektiver und langsamer ist die entstandene Software.

Das ist zwar richtig, ist aber kein Argument für nichts.

Vermutlich programmieren heute ähnlich viele Entwickler intensiv und 
optimiert wie früher. Es gibt nur heute wesentlich mehr Entwickler, die 
nicht dafür bezahlt werden, ein kByte oder MHz zu sparen. Das dürfte bei 
dem meisten Zeugs unter 1Mio Stück der Fall sein.

Natürlich ist es eine beachtenswerte Kunst, ein Oszilloskop per 
PIC12f675 zu realisieren https://www.dos4ever.com/uscope/uscope_e.html.

Kaufen täten das aber nur Nostalgiker.

von Malte _. (malte) Benutzerseite


Lesenswert?

Rolf M. schrieb:

>> Einen Nebeneffekt sieht man auch hier in diesem Thread: Es scheint so,
>> als ob viele Leute (die sich Programmierer oder Entwickler nennen) außer
>> AVR und STM32 kaum noch etwas anderes kennen. Entsprechend sieht dann
>> deren Weltsicht auch in anderen Dingen aus.

Das liegt vermutlich daran, dass beide Controllerfamilien sehr niedrige 
Einstiegshürden haben. Mein Limit als Schüler waren damals 10DM, die ich 
riskieren wollte. Dafür gabs bei Conrad (in der Filiale ohne 
Versandkosten) einen AT90S2313, samt Quarz und etwas Löterei für den 
Parallelport. Ich hab mich damals riesig gefreut als das Programmieren 
mit der Bascom Demo klappte und ein paar LEDs blinkten.
Mit den Arduinos ist die Einstiegshürde noch mal im Aufwand (nicht im 
Preis) gesunken. Mit den Nucleos von ST ist die Hürde ähnlich niedrig 
und mit einem USB DFU Bootloader liegen die Programmerkosten bei einem 
STM32 bei 0. Hinzu kommt die große Verbreitung mit vielen Beispielen wie 
was funktioniert. Das sieht bei vielen anderen Controllern deutlich 
schlechter aus.

> Vor allem scheinen viele sich nur ihren spezifischen Anwendungsfall
> vorstellen zu können. Da fehlt oft das Vorstellungsvermögen, dass man
> für andere Anwendungen auch andere Anforderungen haben könnte.
Stimmt, wobei anspruchsvollere Projekte echt Zeit kosten. Die kann und 
will einfach nicht jeder aufbringen. Ich hätte noch genug Ideen im Kopf, 
für die auch ein STM32 zu leistungsschwach wäre und ein Raspberry zu 
viel Strom verbrauchen würde / zu groß wäre.

von Mike (Gast)


Lesenswert?

Ich habe mal eine defekte elektrische Zahnbürste zerlegt und war 
erstaunt, dort einen 16bit-Controller (MSP430) zu finden. Das Ding hat 
drei Aufgaben: 1. Ladezustand der Batterie überwachen
2. Ladeleuchte ein/ausschalten
3. Den Motor gelegentlich mal stottern lassen, um den Ablauf der 
Putzzeit anzuzeigen.

Natürlich hätte das ein kleiner 8bit-Baustein mit ADC auch getan und das 
bei einem Massenprodukt, wo meist um einige Cent Produktionskosten 
gefeilscht wird.

Meine Vermutung:

Der Hersteller setzt den MSP auch in anderen, komplexeren Produkten ein 
und kann ihn daher günstig in großen Mengen einkaufen.

Bereits vorhandene Software (z.B: Batterieüberwachung) kann 
weiterverwendet werden und verkürzt die Zeit bis zum Markteintritt.
In der Firma sind bereits mit dem Controller vertraute Entwickler, 
wodurch Einarbeitungszeit entfällt.

Allgemein sind gerade leistungsfähige Controller immer günstiger 
geworden, natürlich mit Ausnahmen aufgrund der Verknappung in jüngster 
Zeit. Die größeren AVR sind für das was sie können stark überteuert. Für 
Neuentwicklungen nimmt die vermutlich niemand mehr.

von Ralf (Gast)


Lesenswert?

Mike schrieb:
> Die größeren AVR sind für das was sie können stark überteuert. Für
> Neuentwicklungen nimmt die vermutlich niemand mehr.

Auch für Dich nochmal: Die neueren sind nicht überteuert und sie sind 
erhältlich. So wie Microchip die Reihe attraktiv weiter/neuentwickelt 
wird es damit selbstverständlich auch weiter Neuentwicklung von 
Anwendungen geben.

W.S. schrieb:
> Einen Nebeneffekt sieht man auch hier in diesem Thread: Es scheint so,
> als ob viele Leute (die sich Programmierer oder Entwickler nennen) außer
> AVR und STM32 kaum noch etwas anderes kennen. Entsprechend sieht dann
> deren Weltsicht auch in anderen Dingen aus.

Na bloß gut Deine "Weltsicht" reicht weiter, nur weil Du vielleicht mit 
noch mehr Controllern gearbeitet hast...
Glaubst Du eigentlich man könnte seine "Weltsicht" nur auf diese 
praktische Weise erweitern? Wer Augen im Kopf hat kann sich durchaus 
auch anders informieren. Zum Beispiel in einem solchen Forum. Mein 
persönliches Ergebnis war und ist dabei stets das gleiche geblieben: Für 
meine Anwendungen reicht einer der hunderte AVR-Typen locker. Die 
meisten Controller kochen ohnehin mit demselben Wasser :)

von Stefan F. (Gast)


Lesenswert?

Wenn es stimmen würde, dass die meiste nur noch AVR und STM32 verwenden, 
warum sind dann in den meisten Produkten andere Mikrocontroller drin? 
Irgendwas kann doch nicht stimmen an dieser Schlussfolgerung.

von Gerhard O. (gerhard_)


Lesenswert?

Es kommt eigentlich mehr auf die Art der Anwendungen an. In den letzten 
24 Jahren konnten wir fast alle Produkte mit PICs oder AVRs entwickeln. 
Später kamen, wo notwendig, Cortexes dazu. Sonst hat sich nicht viel 
verändert. Dazu kam auch die Wiederverwendbarkeit von vorhergehenden 
Quellen, weil die Anwendungen oftmals sehr Artverwandt waren.

Ich habe auch einige Sachen mit anderen Marken uC gemacht und das hat 
dann hin und wieder auch seinen Reiz. Die FRAM MSP430 Versionen sind 
übrigens auch nicht ganz uninteressant. Bei jedem anderen uC kann man 
dazu lernen.

Ich bin der Ansicht, jeder soll doch mit den Typen arbeiten, die 
entweder der Chef vorschreibt, oder mit denjenigen die einem als 
zweckmäßig erscheinen. Dann kommen auch gesammelte Erfahrungen dazu. 
Wenn es schnell erfolgreich sein soll, arbeitet man besser mit der 
Technik mit der man schon jahrelang Erfahrungen sammeln konnte. Es gibt 
natürlich Ausnahmefälle wo erheblich performantere Eigenschaften eines 
neuzeitlichen uC auch eine steile Einarbeitungskurve rechtfertigen.

: Bearbeitet durch User
von Ralf (Gast)


Lesenswert?

Jürgen S. schrieb:
> Es wird viel schneller und oberflächlicher programmiert, meist durch
> Zusammenklicken in build-Umgebungen und vorgefertige universelle Libs
> eingebunden, die nicht beliebig gut optimiert werden können, damit rasch
> was da ist

Mit anderen Worten: Vom puren Hardware-Potential wird immer mehr 
verschenkt = in ineffizienter Software versenkt. Geringere 
Entwicklungszeit wird also in der Währung Soft-Ineffizienz bezahlt. Nun 
wird mit zunehmendem abstrakten Abstand zur Hardware, mit jeder weiteren 
dazwischenliegenden Software-Schicht die Gesamtkomplexität immer weiter 
aufgebläht und erfordert immer mehr erwähnte übertrieben schnelle 
Controller. Ob diese ungesunde Entwicklung noch lange weitergehen soll 
ist m.Mng. doch sehr fraglich. Sollte nicht eigentlich endlich mal die 
Hardware an Intelligenz nachziehen?

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> Mit anderen Worten: Vom puren Hardware-Potential wird immer mehr
> verschenkt = in ineffizienter Software versenkt. Geringere
> Entwicklungszeit wird also in der Währung Soft-Ineffizienz bezahlt.

Betrachte es anders herum:

Softwareentwicklung wird schneller und billiger, weil modernere Hardware 
dies ermöglicht. Jetzt sage irgendeinem Manager, dass das eine schlechte 
Sache sei. Viel Glück.

Ralf schrieb:
> Sollte nicht eigentlich endlich mal die
> Hardware an Intelligenz nachziehen?

Was soll das heißen? Das liest sich für mich so, als ob du mit deinem 
Schlusssatz den ganzen Absatz darüber widerrufen würdest. Die Hardware 
ist "Intelligenter" geworden. Da musst du nicht drauf warten.

von Philipp K. (philipp_k59)


Lesenswert?

Ich bewundere immer noch eine direkt in forth software geschriebene 
intel80 Maschine mit mehreren Terminals und über 100 IOs, live 
Abwicklung von Sensoren, 10 uarts in Dauerschleife mit den vt525 
Terminals und Objektvermessungesdaten..

Der Programmcode ist zwar aufwendig, aber manchmal haut man sich echt an 
den Kopf wie einfach und erfinderisch damals das ein oder andere 
Programmierproblem bzw. Ressourcenproblem gelöst wurde.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> Die Hardware ist "Intelligenter" geworden

In welcher Hinsicht?
Alle Peripherie ist nach wie vor kleinstteilig in Registern zu 
konfigurieren. Verwechsle hier mehr Intelligenz nicht bloß mit mehr 
Hardware-Features. Die haben sich in der Tat vermehrt. Mit mehr 
Intelligenz meine ich, ganze Abläufe (z.B. Takteinstellungen, I2C/UART 
Transfers, Berechnungen) auf höherer Ebene zu automatisieren. All das 
muß bislang mühsam und fehleranfällig in Software erfolgen.

von Stefan F. (Gast)


Lesenswert?

>> Die Hardware ist "Intelligenter" geworden

Ralf schrieb:
> In welcher Hinsicht?
>  Verwechsle hier mehr Intelligenz nicht bloß mit mehr
> Hardware-Features.

Ich wusste das das kommt. Deswegen die Anführungsstriche. Ich habe das 
nämlich nicht so formuliert. Diskutiere diese Feinheit der Linguistik 
bitte mit Philipp aus, wenn du das brauchst.

von Karl der Käfer (Gast)


Lesenswert?

Wozu ein BMW X6? Um beim Bäcker Brötchen zu hohlen reicht ein Trabant 
und auch von Karl-Marx-Stadt nach Berlin ist der Trabant bei Einhaltung 
der StVO genauso schnell. Verbrauch ist auch niedriger. Wieso nur fährt 
keiner Trabant? Warum fahren alle nur so neumodisches Zeug. Das ist 
echte Ressourcenverschwendung!
Aber die Kleingeister hier überlegen ob sie mit einer modernen CPU die 
bei x-facher Rechenleistung und geringerem Stromverbrauch nicht doch bei 
dem alten Scheiß bleiben sollen, weil sie es (meinen zu) können und 
schon immer so gemacht haben.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> Diskutiere diese Feinheit der Linguistik

Mir ging es nicht um linguistische Feinheiten.

Gerhard O. schrieb:
> Die FRAM MSP430 Versionen sind übrigens auch nicht ganz uninteressant.

Man muß die entsprechende Nichtflüchtigkeit der Daten dann aber auch 
brauchen können. Ein AVR kann sich sein Flash und EEPROM natürlich 
genauso nichtflüchtig programmieren. Was unter dem Strich bleibt ist 
dann letztlich nur die bessere Schreib- Zugriffsgeschwindigkeit.

von EAF (Gast)


Lesenswert?

Ach herrje....
Der Frosch im Brunnen und die IchPerson tun sich zusammen um den Thread 
zu kapern.

Ok, der war schon von Anfang an fürn A*sch.
Jetzt erst recht.

von J. S. (jojos)


Lesenswert?

DMA geht doch schon in Richtung 'Intelligenz', zumindest ist es ein 
automatisierter Ablauf. Mit DMA2D bei STM32 kann es auch 
Formatkonvertierungen.
SDMMC im STM32H7 hat zur Unterstützung Statemachines in HW um 
Kommandos/Daten zu übertragen. Damit sind 20 MB/s SDC
FMC generiert Signalfolgen um ext. Speicher anzusprechen. In der SW ist 
dazu nur ein einfacher Speicherzugriff nötig um das auszulösen. Das kann 
man auch nutzen um ext. ADC schnell einzulesen oder TFT Displays 
parallel anzusteuern.
Und weil STM seine Tools und einen Großteil seiner SW verschenkt kann 
ich vieles davon privat nutzen.

von Ralf (Gast)


Lesenswert?

Karl der Käfer schrieb:
> Aber die Kleingeister hier überlegen ob sie mit einer modernen CPU die
> bei x-facher Rechenleistung und geringerem Stromverbrauch nicht doch bei
> dem alten Scheiß bleiben sollen, weil sie es (meinen zu) können und
> schon immer so gemacht haben.

Wiegesagt, der Faktor Mensch.
Vorkenntnisse, Vorlieben, Fähigkeiten.
Jeder wie er kann um schnellstmöglich zum gewünschten Ergebnis zu 
gelangen.
Klein- oder großgeistig :)
Und dann gibt es da noch so technische Kleinigkeiten wie Gehäuseformen, 
5V Tauglichkeit, Robustheit, Determinismus der Codeabarbeitung.
Gewerblich entscheidend aber bleibt der Wille des Chefs.

J. S. schrieb:
> DMA geht doch schon in Richtung 'Intelligenz'

Genau. Der Anfang wäre doch gemacht. Ist aber (meistens) schon wieder 
das Ende. Der Z80 hatte da auch schon einen schönen Op-Code zum 
Umkopieren von Speicher. Nannte sich LDIR wenn ich mich recht entsinne.

von olaf (Gast)


Lesenswert?

> > Die Hardware ist "Intelligenter" geworden

> In welcher Hinsicht?

Nun z.B bekommst du heute Controller die koennen ein Byte ueber die 
serielle Schnittstelle oder den AD-Wandler empfangen waerend der gesamte 
Controller im Sleepmodus ist und wachen erst auf wenn ein Datenpaket 
komplett empfangen wurde.

Oder die Verwendung von fraktionalen Divider um den Takt fuer deine 
Schnittstelle zu generieren damit du nicht alles mit Baudratenquarzen 
machen musst.

Integration von PLLs fuer die Takterzeugung.

RC-Oscillatoren die fuer vieles genau genug sind und die du sogar auf 
Basis der internen Temperatur nachkalibrieren kannst.

Controller die fuer ihre Corespannung wahlweise ein Lowdrop oder einen 
DCDC integriert haben damit du dich zwischen Lowpower oder low noise 
entscheiden kannst.

Die PIO beim 2040.

Integration von AES256 in Hardware.

Nutzung von mehreren gleichzeitig laufenden Cores.

Es lohnt schon mal ueber den Tellerrand zu schauen.

Olaf

von J. S. (jojos)


Lesenswert?

Karl der Käfer schrieb:
> Wozu ein BMW X6?

ST hat die Leistung der X6 auch in der Größe einer Isetta. Es gibt auch 
kleine M0, oder M4 in 3x3 mm Gehäuse mit 256 kB Flash und 64 kB RAM. 0,2 
mm mehr und es passen 512 kB Flash und und 128 kB RAM rein.
Wenn man so ein großes Portfolio zur Auswahl hat, dann braucht man keine 
kleinen 8 Bitter mehr. Wer macht hier Projekte in 10 k Stückzahlen? Bei 
kleineren zählt nur die Entwicklungszeit.

von Ralf (Gast)


Lesenswert?

olaf schrieb:
> Nun z.B bekommst du heute Controller die koennen ein Byte ueber die
> serielle Schnittstelle oder den AD-Wandler empfangen waerend der gesamte
> Controller im Sleepmodus ist und wachen erst auf wenn ein Datenpaket
> komplett empfangen wurde.

Doch nicht so bescheiden Olaf.
Warum dem schlaueren UART nicht gleich Baudrate im Klartext und 
(gefüllten) Puffer vorgeben?

olaf schrieb:
> Oder die Verwendung von fraktionalen Divider um den Takt fuer deine
> Schnittstelle zu generieren damit du nicht alles mit Baudratenquarzen
> machen musst.

Der schlaue Taktgenerator nimmt die MHz im Klartext entgegen und kümmert 
sich um alles Weitere (inkl. Temperaturkompensation)!

olaf schrieb:
> Die PIO beim 2040

Dieser Ansatz leidet unter der Notwendigkeit einer eigenen 
Assemblersprache um die gewünschte Fubktionalität zu bekommen. Herzlich 
wenig intelligent.

olaf schrieb:
> Integration von AES256 in Hardware.

Ja!

olaf schrieb:
> Nutzung von mehreren gleichzeitig laufenden Cores.

... was wieder nur in die Kategorie "mehr Features" statt "mehr 
Intelligenz" fällt.

von m.n. (Gast)


Lesenswert?

J. S. schrieb:
> SDMMC im STM32H7 hat zur Unterstützung Statemachines in HW um
> Kommandos/Daten zu übertragen.

Ist ja schön. Und wo gibt es die Teile in brauchbaren Gehäusen zu 
bezahlbaren Preisen?
Selber habe ich wegen der guten Verfübarkeit einige Sachen mit dem 
RP2040 Pico-Board gemacht. Günstiges und flottes Teil. Für die 
Programmierung braucht man allerdings passende SWD-Platinchen (>= J-Link 
EDU).
Arduino & Co. sind lahmaschig und mit Download von .uf2-Dateien per USB 
bekommt man keine Programme entwickelt.

Noch etwas zu der vermeintlich einfachen und kostengünstigen 
Programmentwicklung auf flotten µCs: irgendwelche LIBs zusammenzuklicken 
löst doch keine richtigen Probleme. Die meiste Zeit wird doch zum Testen 
von passenden Verfahren für Messen/Steuern/Regeln benötigt. Dafür gibt 
es in der Regel keine LIBs, deren Fehlerfreiheit zudem kaum zu 
überprüfen ist, außer vom Kunden ;-)

von Stefan F. (Gast)


Lesenswert?

Die USB Schnittstelle eines STM32 ist auch relativ "intelligent", 
verglichen mit VUSB auf einem AVR. Ach, und CAN natürlich auch.

von Malte _. (malte) Benutzerseite


Lesenswert?

m.n. schrieb:
> Noch etwas zu der vermeintlich einfachen und kostengünstigen
> Programmentwicklung auf flotten µCs: irgendwelche LIBs zusammenzuklicken
> löst doch keine richtigen Probleme. Die meiste Zeit wird doch zum Testen
> von passenden Verfahren für Messen/Steuern/Regeln benötigt. Dafür gibt
> es in der Regel keine LIBs, deren Fehlerfreiheit zudem kaum zu
> überprüfen ist, außer vom Kunden ;-)
Nein, stumpf zusammenklicken geht meistens nicht. Aber die Libs der 
Hersteller funktionieren doch irgendwie und wenn sie auch nur halbwegs 
funktionieren, so kann man sich dann meist recht gut an die Fehler ran 
tasten und verstehen wie außerhalb einer reinen Registerbeschreibung im 
Datenblatt die Ansteuerung nun wirklich zu erledigen ist und wo 
eventuell sogar ein undokumentierter Bug lauert.
Datenblatt lesen, Code schreiben und dann herausfinden warum das nun 
einfach garnicht funktioniert, kann unglaublich viel Zeit kosten. Meist 
ist man deutlich schneller wenn man sich iterativ herantasten kann. In 
der Hinsicht nehmen die Libs einem schon eine Menge Entwicklungszeit ab. 
Und hin und wieder funktioniert ein nicht trivialer Herstellertreiber 
auch einfach mal ohne Probleme :)

von J. S. (jojos)


Lesenswert?

m.n. schrieb:
> Arduino & Co. sind lahmaschig und mit Download von .uf2-Dateien per USB
> bekommt man keine Programme entwickelt.

Nope, gerade für den RP2040 sind die Cores gut. Der offizielle mit Mbed, 
da ist der Luxus von Threads, Eventqueues usw gleich mit drin. Der 
ältere Core von earlephilhower ist teilweise noch beliebter weil er mehr 
an Hardware unterstützen soll. Beide funktionieren und was da 
lahmarschig sein soll weiß ich nicht. Mit PlattformIO ist ein Projekt in 
einer Minute gestartet und lauffähig.

Andere Libs sind mittlerweile auch sehr zuverlässig. Bei Arduino gibt es 
eben zig 10k User die testen und damit Fehler in allen möglichen und 
nicht gedachten Anwendungen aufdecken. Bei Mbed gibt es zig 
automatisierte Tests um Fehler möglichst vorher zu finden.
Und da mit Libs heute üblicherweise Quellcode Libraries gemeint sind, 
kann man auch überall reingucken und reindebubuggen.

von m.n. (Gast)


Lesenswert?

J. S. schrieb:
> Beide funktionieren und was da
> lahmarschig sein soll weiß ich nicht.

Die Arduino IDE ist lahm. Jedes neue Übersetzen dauert ewig. Und nach 
einem Download per USB kann man nur hoffen, daß es läuft. Debugging ist 
Fehlanzeige.
PlattformIO kenne ich nicht, aber 1 Minute für jede Änderung zu warten, 
ist mir zu lahm. Entäuscht?
Ohne SWD geht garnichts!

von Silizionix (Gast)


Lesenswert?

Man gewinnt hier den Eindruck wenn nicht andauernd die modernste 
Hardware eingesetzt wird, die komplizierteste SW und Framework darauf 
mit allen Schnickschnack darauf läuft und mit der letzten Modesprache 
programmiert ist, alles andere der Schnee von gestern wäre.

Was heute neu ist, ist morgen aber schon wieder extrem rückständig. Was 
soll also dieses Rennen nach fanatischer Modernität? Sollte nicht 
Zweckmäßigkeit und Zuverlässigkeit vernünftigerweise ausschlaggebender 
sein? Manchmal braucht man Jahre Unzulänglichkeiten zu beseitigen und 
das Rennen mit der neuesten Technik schafft immer neue Probleme. Mit dem 
Feind den man kennt, kommt man in der Regel besser zurecht. 
Bedächtigkeit war noch nie fehl am Platz. Die Lemminge wußten das 
offensichtlich auch nicht...

In der Weltraumelektronik setzt man aus guten Grund auch nur Komponenten 
und Methoden mit Bewährtem Stammbaum ein und nicht den letzten Schrei 
der Marketing Leute.

von Marc X. (marc_x)


Lesenswert?

Silizionix schrieb:
> In der Weltraumelektronik setzt man aus guten Grund auch nur Komponenten
> und Methoden mit Bewährtem Stammbaum ein und nicht den letzten Schrei
> der Marketing Leute.

Naja ich denke das wird auch mit langen Projekt-Laufzeiten und anderen 
Faktoren wie Strahlenresistenz zu tun haben.

von Ralf (Gast)


Lesenswert?

Silizionix schrieb:
> Man gewinnt hier den Eindruck wenn nicht andauernd die modernste
> Hardware eingesetzt wird, die komplizierteste SW und Framework darauf
> mit allen Schnickschnack darauf läuft und mit der letzten Modesprache
> programmiert ist, alles andere der Schnee von gestern wäre.

Nichts lässt Dich hier so schnell als steinzeitlichen Kleingeist 
erscheinen als am Alten festzuhalten. So wenig aber wie gute bewährte 
Lösungen allein wegen fortgeschrittenen Alters an Zuverlässigkeit 
verlieren weist der neueste "Schnickschnack" nur kraft seiner Frische 
automatisch mehr Ergebnis bei weniger Aufwand nach.

von J. S. (jojos)


Lesenswert?

m.n. schrieb:
> PlattformIO kenne ich nicht, aber 1 Minute für jede Änderung zu warten,
> ist mir zu lahm. Entäuscht?

Bildungslücke :) Zigfach besser als A-IDE, z.B. weil die Abhängigkeiten 
eines Programmes in der Konfig eingetragen werden. Sind die nicht 
vorhanden, dann installiert PIO diese. VSCode + PlattformIO Extension 
installieren.
Die 1 Minute bezog sich auf das initiale erstellen eines Programmes. 
Kompilieren erfolgt inkrementell, das dauert keine Minute wenn eine 
Datei geändert wird. UF2 Download erfolgt ohne Fingerakrobatik. SWD 
sollte auch möglich sein, habe ich mit dem RP2040 noch nicht probiert. 
Bei den STM32 Nucleos z.B. funktioniert das Debuggen ad hoc, schneller 
als die STMCubeIDE startet.

Es geht nix über VSC, selbst wenn du dein makefile behalten willst. In 
tasks.json deinen Compiler Aufruf einbauen und schon ist die IDE fertig. 
BMP zum Debuggen, einen Eintrag in die launch.json und mit Cortex-debug 
Extension läuft der Debugger.

von J. S. (jojos)


Lesenswert?

Silizionix schrieb:
> alles andere der Schnee von gestern wäre.

nein, mit Sicherheit nicht. Ich wehre mich nur gegen die Aussagen das 
das Moderne Teufelszeug oder nicht performant ist.

Ich mag jetzt großkotzig daherkommen, schreibe gerade etwas agressiv :) 
Ich stecke viel Zeit in das Hobby und die Weiterbildung, das will nicht 
jeder. Andere Leute müssen und/oder wollen mit C auskommen weil sie mehr 
als eine Plattform pflegen müssen. Aber deshalb sind Neuentwicklungen 
nicht schlechter und auch die Ideen z.B. hinter Python nicht schlecht. C 
krankt an der Einbindung fremder Libs und Arduino hat das vereinfacht 
und einen de facto Standard geschaffen. Moderene Sprachen haben das 
gleich ins Konzept mit aufgenommen.

von W.S. (Gast)


Lesenswert?

Ralf schrieb:
> Geringere
> Entwicklungszeit wird also in der Währung Soft-Ineffizienz bezahlt.

Ach wo. Es ist viel schlimmer. Die Entwicklungszeit bleibt gleich oder 
wird gar länger und das ist die Wirkung der Denk-Ineffizienz der 
Entwickler.

Mit einem Controller, der das Entwicklungsziel locker erreicht, ist 
heutzutage nix mehr anzufangen, denn diejenigen, die das eigentlich tun 
sollten, sind zu doof dafür. Fast täglich sieht man hier in diesem Forum 
Beiträge so etwa in der Art: "ich will [blabla], wo kann ich eine 
fertige Lösung dafür herunter laden?". Und zum Schluß kommt bei sowas 
immer eine herzlich übertriebene Lösungsvariante heraus. Ich kenne da 
einen, dem ein LPC4088 zu klein war - von den von mir jahrelang 
verwendeten Fujitsu FR ganz zu schweigen - und der dann sein Zeug mit 
einem Colibri von Toradex gemacht hatte. Und weil ihm das noch immer 
nicht ausreichte, hatte er noch einen STM32 dazugebastelt. Bei Autos gab 
es da den Spruch: Hubraum ist durch nix zu ersetzen, außer durch noch 
mehr Hubraum.

W.S.

von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Mit einem Controller, der das Entwicklungsziel locker erreicht, ist
> heutzutage nix mehr anzufangen

weil es selbst bei 1000er Stückzahlen immer noch auf die 
Entwicklungszeit und nicht die Controllerkosten ankommt. 10 € am 
Controller gespart sind 10 k€ bei 1000 Stück. Ein Peanut an 
Entwicklungskosten. Auch Profis verwenden STMCube, es ist einfach so. 
Und die tun das weil sie schlau sind, nicht doof.

von Stefan F. (Gast)


Lesenswert?

Zum telefonieren braucht auch niemand einen 2GHz Octacore. Trotzdem 
würde wohl keiner so ein Smartphone als Weihnachtsgeschenk verschmähen, 
oder?

von J. S. (jojos)


Lesenswert?

Stefan F. schrieb:
> Trotzdem
> würde wohl keiner so ein Smartphone als Weihnachtsgeschenk verschmähen,
> oder?

Gutes Beispiel. Die Techniker dachten nur ans telefonieren, die 
kreativen Köpfe haben es zu einem Smartphone gemacht. Webbrowser, Online 
Navi, Simultanübersetzer, Discord, Teams, Online Banking... Ja, man kann 
auch ohne und SMS auf dem Nokia 1100 verschicken. Und der Akku hält eine 
Woche. Möge jeder für sich abwägen was ihm nötiger ist...

: Bearbeitet durch User
von Ralf (Gast)


Lesenswert?

W.S. schrieb:
> Mit einem Controller, der das Entwicklungsziel locker erreicht, ist
> heutzutage nix mehr anzufangen, denn diejenigen, die das eigentlich tun
> sollten, sind zu doof dafür.

In der Einschätzung wo man da jetzt ansetzen sollte unterscheiden wir 
uns.
Statt Software-Komplexitäten und damit die Anforderungen an den 
Programmierer in immer neue Höhen zu treiben sollte an der Hardware 
vereinfacht werden was irgend geht. Da die WünschDirWas Variante bei 
gegebenem Marktangebot weitestgehend ausfällt bleibt bei Wahrung der 
nötigen Performance nur die Wahl des dafür einfachsten Controllers.
Dabei könnte man dann schneller wieder auf dem 8Bit Niveau landen als 
man zunächst glaubt.

von Silizionix (Gast)


Lesenswert?

Ralf schrieb:
> Silizionix schrieb:
>> Man gewinnt hier den Eindruck wenn nicht andauernd die modernste
>> Hardware eingesetzt wird, die komplizierteste SW und Framework darauf
>> mit allen Schnickschnack darauf läuft und mit der letzten Modesprache
>> programmiert ist, alles andere der Schnee von gestern wäre.
>
> Nichts lässt Dich hier so schnell als steinzeitlichen Kleingeist
> erscheinen als am Alten festzuhalten. So wenig aber wie gute bewährte
> Lösungen allein wegen fortgeschrittenen Alters an Zuverlässigkeit
> verlieren weist der neueste "Schnickschnack" nur kraft seiner Frische
> automatisch mehr Ergebnis bei weniger Aufwand nach.

Warum steinzeitlich? Warum muß das Eine immer das Andere ausschließen? 
Ko-existenz ist doch schließlich in vielen Fällen praktisch vorteilhaft. 
Ich wollte nur betonen, daß es mir nicht gefällt, alles was nicht Neu 
ist automatisch abgrundtief zu verpönen. Solange etwas den gedachten 
Zweck gut erfüllt, ist doch nichts dagegen einzuwenden.

Was ist falsch neben Neuem auch an Altem festzuhalten? Warum muß das 
Eine so oft (oder immer) das Andere ausschließen? Man hört sich doch 
auch heute noch gerne Klassische Musik an, liest klassische Literatur, 
erfreut sich an klassischen Gemälden und Kunst. Wenn es aber zu Technik 
kommt, dann wird nur noch die Gegenwart geschätzt. Finde ich falsch. Was 
nützlich ist, gebührt nicht übersehen zu werden. Ich vermute, daß die 
Generationslücke für dieses Denken eine Rolle spielt.

Muß denn heute alles vernetzt bis zum Ende der Welt sein? Was definiert 
denn heute eine moderne Anwendung? Netzverbundene Kommunikation und 
Abhängigkeit! Der Hersteller will auf Biegen und Brechen Zugang zu 
seinem Produkt haben und bestimmen können wie es benutzt wird. Moderne 
Fahrzeuge sind ein Paradebeispiel solches Denken. Smart-TVs, Smartphone, 
etz. Alles mit dem Adjektiv "Smart"! Vielleicht gibt es Menschen auf 
dieser Welt, die das nicht wirklich mögen oder brauchen oder es nützlich 
finden, daß ein Dritter den Hahn unilateral zumachen kann und die 
Nützlichkeit des gekauften Gerätes beenden zu können. Ich behaupte ja 
nicht, daß digitale Kommunikation nicht nützlich wäre. Nur wie man es 
macht ist der Springende Punkt hier. Der Trend, alles Moderne mit GUI 
und Smartphone bedienen zu wollen ist die Hauptursache der endlosen 
Komplexitäten und Abhängigkeiten.

Generell kann man der heutigen Industrie vorwerfen, daß sie die 
Kontrolle über ihre Erzeugnisse nicht mehr aufgeben wollen. Ein modernes 
Fahrzeug gehört nicht mehr 100% dir.

Man weiß ja nicht seit heute wieviel Schindluder mit modernen vernetzten 
Geräten und modernen Medientechnik betrieben wird. Alexa und Co. Und 
gerade die hängen von dieser Designtechnik ab, auf die ihr andauernd 
rumreitet. Alles hat seinen Preis.

Wie dem auch sei, man mag das wollen oder nicht. Trotzdem ist es kein 
Grund über einfachere Technikdesign aus Prinzip die Nase zu rümpfen. 
Letzten Ende kommt es auf den Verwendungszweck an. Und nicht alles muß 
übers Smartphone und Wolke fernbedienbar sein. Wenn man das einmal 
erkennt, dann ist es nicht implausibel, daß auch 8- und 16-Bitter in 
vielen Anwendungsgebieten ihren Zweck noch gut erfüllen können.

Was heute noch modern ist, ist bald auch altes Eisen. Genau wie die 
heutigen Entwickler. Die Firmen wollen andauernd junges Fleisch:-)

Ich bin ein uralter Sack. Mir gefallen viele moderne technische Trends 
nicht mehr so recht, weil man deswegen erkannt hat, wie der Hase läuft 
und man immer weniger als Kunde am Technikverstehen teilhaben darf. Man 
wird nur noch als Zahlender ohne wirklichen Zugang angesehen. Als 
Entwickler "Drinnen" vergißt man das leicht, daß es "Draussen" nicht 
mehr so geil ist.

von Zeno (Gast)


Lesenswert?

J. S. schrieb:
> immer noch auf die
> Entwicklungszeit und nicht die Controllerkosten ankommt
Ach wo! Das mag zwar in der kleinen Klitsche von Bedeutung sein, in 
großen Konzernen sieht das ganz anders aus. Da werden mal locker 6 
Mannjahre versenkt, um ein vorhandenes, funktionierendes und weltweit 
eingesetztes Programm durch ein neues in einer "modernen 
Programmiersprache" Programmiertes zu ersetzen. Danach kauft man ein 
Programm für einen 5stelligen Betrag von einem Fremdanbieter um dann 
festzustellen das es für die eigenen Belange nicht taugt. Mittlerweile 
programmieren wieder 4 Entwickler an dem eingekauften Programm seit 2 
Jahren herum - ohne nennenswerten Erfolg, das alte ach so unmoderne 
Programm wird immer noch benutzt.

Effiziens spielt in in der Industrie keine Rolle, solange die Dividenten 
der Aktionäre stimmen.

von Ralf (Gast)


Lesenswert?

Silizionix schrieb:
> Ein modernes Fahrzeug gehört nicht mehr 100% dir.

Der Trend geht ohnehin zum bezahlten autonomen Transport- Service 😉

von WF88 (Gast)


Lesenswert?

J. S. schrieb:
> Stefan F. schrieb:
>> Trotzdem
>> würde wohl keiner so ein Smartphone als Weihnachtsgeschenk verschmähen,
>> oder?
>
> Gutes Beispiel. Die Techniker dachten nur ans telefonieren, die
> kreativen Köpfe haben es zu einem Smartphone gemacht. Webbrowser, Online
> Navi, Simultanübersetzer, Discord, Teams, Online Banking... Ja, man kann
> auch ohne und SMS auf dem Nokia 1100 verschicken. Und der Akku hält eine
> Woche. Möge jeder für sich abwägen was ihm nötiger ist...

Was is mit IRC?!

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> Dabei könnte man dann schneller wieder auf dem 8Bit Niveau landen als
> man zunächst glaubt.

Wirksamen Datenschutz kannst du dann aber vergessen, oder wahlweise die 
Anbindung ans Internet. Wer sich in diesem Rennen hin setzt, verliert 
es.

Silizionix schrieb:
> Muß denn heute alles vernetzt bis zum Ende der Welt sein?

Es wird oft gemacht, weil es Geld einbringt. Ich kann auch nicht viel 
mit sprechenden Lautsprechern, vernetzten Kochtöpfen und 
Bluetooth-Zahnbürsten anfangen. Aber es gibt eine Generation nach uns, 
die da total drauf abfährt. Wenn man diese Generation nicht bedient, hat 
man bald keinen Job mehr.

Silizionix schrieb:
> Was ist falsch neben Neuem auch an Altem festzuhalten?

An den richtigen Stellen: nichts. Es hat bisher auch niemand 
geschrieben, dass das falsch sei. Es wird immer altes und neues parallel 
geben. Falsch wäre, das neue zu verteufeln, bloß weil es einem selbst 
nicht gefällt.

von olaf (Gast)


Lesenswert?

> > Muß denn heute alles vernetzt bis zum Ende der Welt sein?
> Weil es Geld einbringt.

Liess mal:

https://www.heise.de/news/Eufys-Kameras-funken-ungefragt-in-die-Cloud-und-sind-per-Web-zugaenglich-7358310.html

Das ist doch fuer ein Unternehmen der Supergau. Ich glaube nicht das die 
das absichtlich gemacht haben. Irgendwelche Doedels haben Libaries bis 
zum abwinken zusammengeklickt und dabei den Ueberblick verloren was sie 
da eigentlich machen.
Und jetzt stell dir mal vor irgendein Amerikaner hat von dem Laden eine 
Webkamera in seiner Bude, die fuenfjaehrige Tochter laeuft da einmal 
nackt durchs Bild, jeder kann das abrufen. Nach der Klage gibt es die 
Firma nicht mehr.

Das ist leider der Nachteil von diesen fetten Mikrocontrollern wo jeder 
jeden Scheiss reinkopiert und nicht mehr darueber nachdenkt was gerade 
aktiv ist und was nicht.

Das hier ist mein Lieblingsvideo zum Thema Softwarequalitaet:

https://www.youtube.com/watch?v=31xA9p3pYE4

Fefe beschreibt da genau das was ich in der Praxis sehe. Bisher haben 
wir Kacke bekommen weil auf der anderen Seite datengierige Schweinehunde 
gesessen haben, jetzt bekommen wir Kacke weil Entwickler selber nicht 
mehr verstehen was in ihren Projekten so los ist. Die koennen es also 
nicht mehr besser machen auch wenn sie das wollen.

Olaf

von Andreas M. (amesser)


Lesenswert?

Andreas schrieb:
> reicht auch ein Arduino Uno wenn man den Code optimiert und man spart
> nebenbei Strom.. :)

Nun ist ein Arduino aber gerade in Sachen Stromverbrauch nicht gerade 
ein Paradebeispiel. Mit den 16 Mhz, dem hohen Ruhestrom des 
Linearreglers und dem anderen Kram der da drauf ist braucht der weit aus 
mehr als der Teensy. Insbesondere dann, wenn man den Teensy soweit 
runtertaktet, das er genauso "lahm" wie der ATMega8 ist.

(Trotzdem verwende ich selbst oft und gerne AVRs, meist da wo ich 5V 
brauche oder robustere I/Os)

von Mox (Gast)


Lesenswert?

"It just seems that nobody is interested in building quality, fast, 
efficient, lasting, foundational stuff anymore."

https://tonsky.me/blog/disenchantment/

von m.n. (Gast)


Lesenswert?

Zeno schrieb:
> J. S. schrieb:
>> immer noch auf die
>> Entwicklungszeit und nicht die Controllerkosten ankommt
> Ach wo! Das mag zwar in der kleinen Klitsche von Bedeutung sein, in
> großen Konzernen sieht das ganz anders aus.

Der Spinner schon wieder. Bist wohl selber ein Großkonzern?
Anstatt an der Tanstelle zu tanken, kaufst Du Rohöl in Rotterdam?

von olaf (Gast)


Lesenswert?

> https://tonsky.me/blog/disenchantment/

Hey! Das hat er von mir geklaut. Das hab ich auch gesagt als ich das 
erste mal von diesem Muell gehoert habe:

> We put virtual machines inside Linux, and then we put
> Docker inside virtual machines, simply because nobody
> was able to clean up the mess that most programs, languages
> and their environment produce. We cover shit with blankets
> just not to deal with it.

Also ich prophezeie einen gewaltigen Software Zusammenbruch in den
naechsten 10-20Jahren. :)

Olaf

von Stefan F. (Gast)


Lesenswert?

olaf schrieb:
>> We put virtual machines inside Linux, and then we put
>> Docker inside virtual machines, simply because nobody
>> was able to clean up the mess that most programs, languages
>> and their environment produce. We cover shit with blankets
>> just not to deal with it.

Das kommt mir bekannt vor.

Unsere eigenen Programme besteht aus exakt einer einzigen Datei. Dennoch 
ist der Betrieb davon überzeugt, dass man diese Programme in Docker 
Container verpacken müsse, um sie voneinander zu isolieren.

Einfachen Konstrukten nimmt man offenbar nicht mehr ab, dass sie sicher 
sein können. Bei komplexen Konstrukten erkennt man manchmal die 
simpelsten Lücken nicht.

Als ich mal "mein" Programm temporär mit einer Shell ausstattete (was 
uns aus Security Gründen verboten wurde), fiel mir auf, dass es Zugriff 
auf sämtliche Konfigurationsparameter und Zertifikate der anderen Docker 
Container hatte.

Wir haben wieder "Security by Obscurity" - zurück in die 90er. Hurra!

von Guido K. (Firma: Code Mercenaries GmbH) (thebug)


Lesenswert?

M$ schrieb:
> Windows kann mehrere CPUs vernünftig nutzen?

Ebend nicht…

;)

von Guido K. (Firma: Code Mercenaries GmbH) (thebug)


Lesenswert?

Ist doch praktisch, man legt erst mal ein paar Megabyte Buffer an, fährt 
SQL und den Webserver hoch und lässt dann eine LED blinken.

Die Leistung lässt schon verbraten, man muss nur hinreichend wenig 
Ahnung haben, dann geht das.

Gibt es für den Controller keinen in Java geschriebenen 
Python-Interpreter?

von Zeno (Gast)


Lesenswert?

m.n. schrieb:
> Der Spinner schon wieder. Bist wohl selber ein Großkonzern?
> Anstatt an der Tanstelle zu tanken, kaufst Du Rohöl in Rotterdam?
Da fühlt sich ein Besserwisser gleich mal wieder angepisst. Komm einfach 
mal runter - wirkst etwas unentspannt. Scheinst es nicht zu vertragen, 
wenn jemand eine andere Meinung hat als Du selber - da muß man natürlich 
gleich ausfallend werden.

von Udo S. (urschmitt)


Lesenswert?

olaf schrieb:
> Also ich prophezeie einen gewaltigen Software Zusammenbruch in den
> naechsten 10-20Jahren. :)

Macht doch nix, nach einigen Propheten hier gibts ja schon im Januar 
keinen Strom mehr, und in 5 Jahren ist die gesamte Gesellschaft 
zusammengebrochen.

Dein Software-Zusammenbruch kommt also viel zu spät.

von A. B. (funky)


Lesenswert?

Stefan F. schrieb:
> Als ich mal "mein" Programm temporär mit einer Shell ausstattete (was
> uns aus Security Gründen verboten wurde), fiel mir auf, dass es Zugriff
> auf sämtliche Konfigurationsparameter und Zertifikate der anderen Docker
> Container hatte.

Für fehlerhafte Konfig kann aber Docker nix

von Stefan F. (Gast)


Lesenswert?

A. B. schrieb:
> Für fehlerhafte Konfig kann aber Docker nix

Stimmt, das wollte ich damit auch nicht sagen. Sondern dass in dem Fall 
die Komplexität des Systems ihre Admins überforderte, was letztendlich 
zu weniger statt mehr Sicherheit führte.

Das Management hat aus dem Vorfall gelernt und bezahlt jetzt Fachleute 
mit Erfahrung dafür, unserem Betrieb zu helfen.

von Purzel H. (hacky)


Lesenswert?

> pity J schrieb ..
> Endlich mal einer, der was davon versteht.
Pro Messung werden ca 1000 Byte zwischen CPU und Sensor verschickt. Die
NDA Api des Herstellers rechnet auf den Werten auch noch herum (Arm M7
mit FPU nötig). Und das Ziel sind 400 Messungen pro Sekunde. Denn der
Roboter soll innerhalb <5ms stoppen, wenn ein Mensch zu nahe kommt.

Bei einem Atmel hätte man wohl den Robbi im Gesicht, bevor dieser
stoppt.

..............

Dabei aber die Physik nicht vergessen. In 5ms kann man vielleicht einen 
Strom abwuergen, aber ein Roboter stoppt deswegen noch nicht unbedingt.

von Gerhard O. (gerhard_)


Lesenswert?

Andreas M. schrieb:
> Andreas schrieb:
>> reicht auch ein Arduino Uno wenn man den Code optimiert und man spart
>> nebenbei Strom.. :)
>
> Nun ist ein Arduino aber gerade in Sachen Stromverbrauch nicht gerade
> ein Paradebeispiel. Mit den 16 Mhz, dem hohen Ruhestrom des
> Linearreglers und dem anderen Kram der da drauf ist braucht der weit aus
> mehr als der Teensy. Insbesondere dann, wenn man den Teensy soweit
> runtertaktet, das er genauso "lahm" wie der ATMega8 ist.
>
> (Trotzdem verwende ich selbst oft und gerne AVRs, meist da wo ich 5V
> brauche oder robustere I/Os)

Muß man aber nicht so lassen:

Ich habe gewisse Versionen der Pro-Mini Bords (mit HC-49 Quarz) so 
modifiziert, daß sie im Schlafbetrieb unter 1uA verbrauchen. Ferner habe 
ich die Quarze (und Bootloader) bis auf 4MHz herunter ausgewechselt. Für 
Batterie betriebene Anwendungen braucht man den Linear Regler ohnehin 
nicht. Bei 3V braucht ein AVR bei 4Mhz auch nur noch 1.5mA; bei 1MHz 
noch weniger.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

ein LPC824 braucht bei 4 MHz ca. 0,7 mA und das runter bis 1,8 V, also 
etwa ein Drittel vom AVR und das ohne Quarz. Und hochtakten bis 30 MHz 
per Software. Dabei ist der LPC schon ein älterer Kandidat, da wird es 
noch sparsamere geben.

von Ralf (Gast)


Lesenswert?

Gerhard O. schrieb:
> Bei 3V braucht ein AVR bei 4Mhz auch nur noch 1.5mA; bei 1MHz noch
> weniger.

Pauschal /für AVRs/ lässt sich bei mehreren hundert Derivaten natürlich 
nichts sagen. Ein moderner Tiny3216 braucht bei 4MHz/3V gut 1mA, bei 
2MHz nur noch die Hälfte. Bei 4MHz/1,8V sind wir exakt auf LPC824 Level 
(0,7mA).
Also dramatisch sind die Unterschiede zu anderen Architekturen hier 
wahrlich nicht.

von W.S. (Gast)


Lesenswert?

Ralf schrieb:
> In der Einschätzung wo man da jetzt ansetzen sollte unterscheiden wir
> uns.

Ich habe nix darüber geschrieben, was man da tun könnte.

Höchstwahrscheinlich kann man da garnix tun, denn solchen Leuten 
zuzurufen "sei klüger und erfinderischer als du bist und denke 
gründlicher" würde nichts nützen.

Die Flucht in immer umfänglichere Hardware geht auch nicht wirklich, 
denn das geht am eigentlichen Problem vorbei. Da wird es den Leuten dann 
bloß noch mehr zu kompliziert als es bereits jetzt ist.

Man kann zwar staatlicherseits etwas tun, um noch mehr Programmierer und 
Ingenieure auszubilden, aber dadurch werden es nur mehr Leute, aber 
keine besseren Leute. Ein Patentrezept zur Lösung des Problems ist also 
nicht in Sicht.

W.S.

von Ein T. (ein_typ)


Lesenswert?

Stefan F. schrieb:
> Unsere eigenen Programme besteht aus exakt einer einzigen Datei. Dennoch
> ist der Betrieb davon überzeugt, dass man diese Programme in Docker
> Container verpacken müsse, um sie voneinander zu isolieren.

Containerisierung als solche dient ja nicht primär der Sicherheit und 
soll das auch gar nicht. Bitte entschuldige, aber wenn Du so etwas 
schreibst, hört sich das für mich nach einem grundlegenden 
Mißverständnis an, welche Ziele die Containerisierung verfolgt und damit 
erreichbar sind.

Trotzdem Sicherheit nicht das Designziel von Docker war und ist, kann es 
durchaus einen signifikanten Beitrag zur Erhöhung der Sicherheit 
leisten. Allerdings muß man dazu einen recht hohen Aufwand betreiben, 
Stichworte: Capabilities, AppArmor (SELinux, Tomoyo, RSBAC...), Seccomp, 
Verschlankung von Images, Zugriffsrechte und Dateiattribute in den 
Containern, und so weiter, und so fort.

Zur Entwicklungszeit sind eine Shell und ein Userland innerhalb von 
Containern zweifellos prima, aber in Produktion? Die offiziellen 
Basis-Images der Distributoren haben sogar Paketmanager, login (achja?!) 
und diverse setuid-Programme wie su(1) installiert. Eine unbereinigte 
Apache-Installation bringt Perl und der Python-Paketmanager pip sogar 
eine komplette Build-Toolchain mit Compilern & Co. als Abhängigkeiten 
mit.

Deswegen sind Docker-Images dann oft auch so riesig. Der naivste Ansatz 
für ein Debian-basiertes Image mit Apache2, mod_wsgi, Flask und einer 
minimalen Flask-Webapplikation ist 584 MB groß, mit der offensichtlichen 
Nacharbeit sind es nurmehr 245 bis 266 MB. Darin sind aber immer noch 
enthalten: Perl (apache2ctl ist ein Perlskript), die Bash, die Dash, und 
massenhaft anderes Gedönse, das kein realer Webserver-Container jemals 
braucht. Und für einen Angreifer, der in den Container eindringen 
konnte, ein wahres Füllhorn an Werkzeugen enthält, mit denen er 
womöglich seine Privilegien erweitern und eventuell auch noch aus dem 
Container ausbrechen kann.

Ich hab' mir die letzten Tage mal die Mühe gemacht und so ein Image bis 
auf seine absolut notwendigen Dateien und Capabilities gestrippt. Das 
hat nur noch 43,3 MB und läuft mit restriktiven AppArmor- und 
Seccomp-Profilen, die die zulässigen Aktionen auf das absolute Minimum 
beschränken. Das kann man natürlich alles auch ohne Container machen, 
aber der Aufwand wäre dann noch größer -- in diesem Punkt hat Docker den 
Vorteil, daß es bereits für alle diese Möglichkeiten fertig vorbereitet 
ist, die die Angriffsoberfläche von unverzichtbaren Komponenten 
reduzieren helfen. Diese Möglichkeiten muß man aber natürlich auch 
verwenden, um den Nutzen daraus zu ziehen.

Das sind jetzt nur ein paar Stichworte, aber: wenn man Containerisierung 
zur Erhöhung der Sicherheit nutzen will, muß man sie mit den vorhandenen 
Sicherheitstechnologien kombinieren, die Linux mitbringt. Genau hier 
sehe ich auch den großen Vorzug von Docker und anderen 
Containertechnologien: sie vereinheitlichen und isolieren Techniken zum 
Deployment, Lifecycle-, Konfigurations- und Sicherheitsmanagement. Das 
sind aber im Wesentlichen keine Themen für Entwickler, sondern eher für 
Sysops.

> Einfachen Konstrukten nimmt man offenbar nicht mehr ab, dass sie sicher
> sein können. Bei komplexen Konstrukten erkennt man manchmal die
> simpelsten Lücken nicht.
>
> Als ich mal "mein" Programm temporär mit einer Shell ausstattete (was
> uns aus Security Gründen verboten wurde), fiel mir auf, dass es Zugriff
> auf sämtliche Konfigurationsparameter und Zertifikate der anderen Docker
> Container hatte.

Dann ist da aber, sorry,  eine ganze Menge schiefgelaufen, das kann, 
soll, muß und darf nämlich nicht so sein.

von Ralf (Gast)


Lesenswert?

@W.S. Weder das eine noch das andere noch das dritte werden das Problem 
der aus zunehmender (dummer) Hardware-Komplexität ("Feature-Reichtum" 
heutiger Controller) folgenden, noch viel stärker zunehmenden 
Software-Komplexitäten und damit der Überforderung des Entwicklers 
lösen. Es geht mir nicht um

W.S. schrieb:
> umfänglichere Hardware

im Sinne von noch mehr kleinteilig zu konfigurierenden Details sondern 
um insgesamt intelligentere Hardware. Dann braucht es auch nicht immer 
schnellere Controller, um jene vielen beklagten Software-Blähungen samt 
entsprechendem Ressourcenverbrauch aufzufangen- um mal den Bogen zur 
Ausgangsfrage zurück zu spannen.

Software-Blähungen, die aus immer abstrakteren, immer vielschichtigeren, 
unter dem Strich immer komplizierteren Lösungen folgen und die parallel 
dazu ein Sprach(en)instrumentarium forcieren, das immer mehr Bücher 
immer voller macht und entsprechend immer mehr Ausbildung verlangt.

von Wolfgang (Gast)


Lesenswert?

Andreas schrieb:
> Wann muss man was schnelleres einsetzen als ein Atmega?
> Hab 3 Teensy 4.0 hier und ja die sind schnell aber für meine Anwendungen
> reicht auch ein Arduino Uno wenn man den Code optimiert und man spart
> nebenbei Strom.. :)

Du könntest den Teensy in der Zeit zwischendurch schlafen legen.
Dann kommt es nicht mehr auf die Stromaufnahme des Controller im aktiven 
Betriebszustand an,  sondern auf die Ladung, die für die Ausführung 
einer bestimmten Aufgabe erforderlich ist. Auch einen schnellen 
Controller muss man nicht mit Maximalgeschwindigkeit in Warteschleifen 
rennen lassen.

von Christian M. (likeme)


Lesenswert?

M$ schrieb:
> Windows kann mehrere CPUs vernünftig nutzen?

Windows braucht schon 1GB Arbeitsspeicher für die  LED 
Wechselblinkfunktion ;-)

: Bearbeitet durch User
von Andreas M. (amesser)


Lesenswert?

Ralf schrieb:
> Ein moderner Tiny3216 braucht bei 4MHz/3V gut 1mA, bei
> 2MHz nur noch die Hälfte. Bei 4MHz/1,8V sind wir exakt auf LPC824 Level
> (0,7mA).
> Also dramatisch sind die Unterschiede zu anderen Architekturen hier
> wahrlich nicht.

Naja, nicht alles was hinkt ist ein Vergleich, oder? Bei selbem 
Stromverbrauch hat der LPC nicht nur die vierfache Busbreite sondern 
auch wesentlich mehr RAM und Flash als der ATTiny. Dazu ist der LPC fast 
6 Jahre älter.

Ein STM32L010F4 benötigt bei der Konstellation ca. 0,5mA, mit einem 
Micro-Power LDO auf 1.2V davor nochmal weniger.

von Ralf (Gast)


Lesenswert?

Andreas M. schrieb:
> Naja, nicht alles was hinkt ist ein Vergleich, oder? Bei selbem
> Stromverbrauch hat der LPC nicht nur die vierfache Busbreite sondern
> auch wesentlich mehr RAM und Flash als der ATTiny.

Naja, es hat auch keiner die Performance verglichen :)
Für die vielen Aufgaben denen der Tiny langt ist er
hier aber wenigstens nicht im Stromverbrauchs-Nachteil.

Ralf schrieb:
> am besseren Preis-Leistungsverhältnis vieler 32er ändert das
> nichts

von Ralf (Gast)


Lesenswert?

Christian M. schrieb:
> Windows braucht schon 1GB Arbeitsspeicher für die  LED
> Wechselblinkfunktion ;-)

Die ganze Windows-Funktionalität maximal effizient programmiert würde 
dessen Ressourcen-Bedarf schneller zusammenschrumpfen lassen als man 
schauen kann. Leider ist das nur ein praxisferner Traum.

von W.S. (Gast)


Lesenswert?

Ralf schrieb:
> im Sinne von noch mehr kleinteilig zu konfigurierenden Details sondern
> um insgesamt intelligentere Hardware.

Intelligentere Hardware? Mit so einem Wunsch verlagerst du das Problem 
nur vom nicht ausreichenden Programmierer eines µC zum Entwickler der 
Hardware hin, ohne es zu lösen. Ist also ein Wunschtraum.

Abgesehen davon bedenke mal, daß man sich 'universelle' oder 
'intelligentere' Lösungen nur auf Basis des bereits bestehenden Wissens 
ausdenken kann. Es ist also ein Blick zurück und nur die Extrapolation 
der Vergangenheit.

Sowas in Hardware ist starr, denn jede Änderung braucht neue 
Schaltungsdetails, neue Masken für die Produktion und somit neue Chips. 
Die gleiche Änderung in Software ist da wesenlich flexibler.

Schon unsere fernen Vorfahren haben solche Erfahrungen gesammelt: Einen 
Faustkeil zu machen oder später ihn umzuarbeiten zu einer Speerspitze 
oder einem Teigschaber ist leichter, als sich bessere Reißzähne wachsen 
zu lassen wie die inzwischen ausgestorbenen Säbelzahntiger.

Aber dazu gehört eben Denken, Lernen, Üben - und nicht bloß Bumsen um 
die Mutation zu betreiben. Tja, es ist eben alles Mühe und kein 
Schlaraffenland, wo einem die fertigen Lösungen von selbst auf den Tisch 
oder die gebratenen Tauben in den Mund fliegen.

W.S.

von Stefan F. (Gast)


Lesenswert?

Ein T. schrieb:
> hört sich das für mich nach einem grundlegenden
> Mißverständnis an, welche Ziele die Containerisierung verfolgt

Für mich auch, aber mich fragt ja keiner.

Das wurde vom Betrieb gestartet, die sich zu "Dev-Ops" weiter entwickeln 
wollten. Mittlerweile wurde der dev Anteil an eine externe Firma 
ausgelagert, die den Programmierern der Applikationen beibringt, wie man 
Helm Charts schreibt, Vault benutzt und Ci/Cd Pipelines an den 
Kubernetes Cluster anbindet.

Ich habe das Gefühl, dass die aufstrebende Dev-Ops Abteilung schon 
wieder die Nase voll hat. Aber die Struktur (Cloud) ist nun gesetzt. Die 
Geschäftsführung will nicht mehr zurück, wohl auch, weil unsere Kunden 
nur noch "irgendwas mit Cloud" haben wollen. Java EE ist out.

von Ralf (Gast)


Lesenswert?

W.S. schrieb:
> Mit so einem Wunsch verlagerst du das Problem
> nur vom nicht ausreichenden Programmierer eines µC zum Entwickler der
> Hardware hin, ohne es zu lösen. Ist also ein Wunschtraum.

Der Hardware-Entwickler löst diverse Aufgaben einmal.
Tausende Software-Entwickler dieselben Aufgaben zig-mal.
Der Wunsch nach intelligenterer Hardware müsste kein Traum bleiben,
einzelne kleine Ansätze wurden hier ja schon genannt.

> Abgesehen davon bedenke mal, daß man sich 'universelle' oder
> 'intelligentere' Lösungen nur auf Basis des bereits bestehenden Wissens
> ausdenken kann. Es ist also ein Blick zurück und nur die Extrapolation
> der Vergangenheit.

Intelligentere Hardware fasst schlicht ganze Abläufe, die heute noch 
einzeln zu programmieren sind zusammen und erübrigt auch das dazu 
erforderliche Detail-Wissen.

> Sowas in Hardware ist starr

Ja, sowas ist natürlich je nach Situation unflexibler.
Es gibt jedoch sehr viele Programmier-Aufgaben die sich standardmäßig 
lösen und zusammenfassen lassen. Beispiele hatte ich schon genannt: 
Einstellung von Systemtakt, Puffer-Ausgaben via I2C und UART etwa, mit 
Klartextangaben zum Takt/Ausgabekanal/Länge usw. Nicht zu unterschätzen 
ist die standardisierende Lenkungswirkung fürs Programmieren darüber 
hinaus.

W.S. schrieb:
> Aber dazu gehört eben Denken, Lernen, Üben - und nicht bloß Bumsen um
> die Mutation zu betreiben. Tja, es ist eben alles Mühe und kein
> Schlaraffenland, wo einem die fertigen Lösungen von selbst auf den Tisch
> oder die gebratenen Tauben in den Mund fliegen.

Programmieren bleibt auch so anspruchsvoll, keine Bange!
Bei der ausufernden Komplexität heutiger Software-Künste darf man sich 
aber schon Gedanken machen wie all das in beherrschbaren Bahnen bleibt- 
und nicht nur die Taktfrequenzen verwendeter Controller pusht!

Der Faustkeil wird sicherlich auch nicht mehr zu Deinem Inventar 
gehören, das Werkzeug darf sich doch gerne weiterentwickeln! Dennoch 
vermittelst Du hier eher den Stil "Haben wir immer schon so gemacht" ...

von Stefan F. (Gast)


Lesenswert?

Als Softwareentwickler erlebe ich oft Fälle, wo der Kunde zuerst eine 
einfache geradlinige Lösung bestellt, und dann kurz vor dem Zieltermin 
(oder auch danach) mit solchen Kloppern um die Ecke kommt:

Ach übrigens, sämtliche Schnittstellen müssen verschlüsselt und mit 
Server- und Client-Zertifikaten abgesichert werden, incl. der Datenbank 
und Speichermedien. Kann man alles machen, aber es treibt die 
Betriebskosten in die Höhe.

Kommt so etwas auch in der Elektronik-Entwicklung vor?

von M. K. (sylaina)


Lesenswert?

Stefan F. schrieb:
> Kommt so etwas auch in der Elektronik-Entwicklung vor?

Ja, kommt auch in der Elektronik-Entwicklung vor. Und als Anwort gibts: 
Es wird geliefert, was bestellt wurde. Für neue Aufträge sind wir aber 
offen. Das empfehle ich dir auch als Softwareentwickler ;)

von Stefan F. (Gast)


Lesenswert?

M. K. schrieb:
>> Kommt so etwas auch in der Elektronik-Entwicklung vor?
> Ja, kommt auch in der Elektronik-Entwicklung vor.

Das wäre dann ja auch ein starkes Argument dafür, erheblich stärkere 
Mikrocontroller einzubauen, als man anfangs benötigt.

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Stefan F. schrieb:
> Das wäre dann ja auch ein starkes Argument dafür, erheblich stärkere
> Mikrocontroller einzubauen, als man anfangs benötigt.

Zustimmung.
Es kann sein, dass sich zukünftig die Anforderungen ändern.
Statt einfacher Verschlüsselung braucht man jetzt doppelte, oder einen 
anderen Algorithmus.
Vielleicht hat man auch einen Fehler, der nur aufwändig in Software 
behoben werden kann.
Vielleicht haben sich auch funktionale Anforderungen geändert: z.B. ein 
PV-Wechselrichter heute muss mehr können als einer vor 20 Jahren.

In diesen Fällen ist es toll, wenn das Problem mit einer neuen Firmware 
gelöst werden kann, und in der alten Hardware genug CPU, RAM und Flash 
vorhanden ist, dass das dann läuft. (Das Update muss ja nicht kostenlos 
sein.)

Natürlich hat das Grenzen, wenn der größere Controller deutlich mehr 
Geld kostet.

Auf der anderen Seite: wenn man für ältere Hardware neue Funktionen per 
Feature-Flag deaktivieren muss oder gar gezwungen ist, einen separaten 
Firmware-Zweig einzurichten, dann braucht man Konfigurationsmanagement. 
Das sind zusätzliche Aufwände in der Entwicklung, im Test, ggf. 
Qualifizierung/Zertifizierung und auch bei der Support-Organisation.

Ich sehe das z.B. bei Steuergeräten für die Automobilindustrie: 
inzwischen ist da Secure Boot notwendig. Das macht bei manchen 
Zulieferern eine neue HW notwendig. Der Aufwand ist hoch, die Fristen 
sind inzwischen dringlich, Leute hat man keine oder zu wenig.
Hätte man bei der ursprünglichen Entwicklung den deutlich teureren 
Controller genommen, der dieses (damals übertrieben erscheinende) 
Feature eingebaut hätte, könnte man zumindest die alte HW noch weiter 
verwenden.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

QVC hat einen alten IBM Mainframe durch eine neue Maschine ersetzt, die 
hunderte CPU Kerne hat. Es wurden aber erst mal nur für 64 lizensiert. 
Der Rest wird später, falls nötig.

Irgendwie muss IBM die Firma davon überzeugt haben, dass sich das unterm 
Strich eher lohnt, als eine kleinere Maschine der man später weitere zur 
Seite stellt.

Im KFZ Bereich ist es offenbar auch schon Usus, Hardware durch Lizenzen 
frei zu schalten. Irgendwann kommt das auch auf dem Hobbytisch, schätze 
ich. Dann kaufen wir Mikrocontroller mit passender Pin Anzahl für 1-3 
Euro Grundpreis und zahlen für die größeren Features (CAN, USB, RTC, 
FPU, ...) eine Zusatzgebühr. Wahrscheinlich gibt es dann nicht mehr 
siebenhundertfünfzig STM32 Modelle, sondern nur noch zehn.

von (Gast)


Lesenswert?

Stefan F. schrieb:
> Wahrscheinlich gibt es dann nicht mehr
> siebenhundertfünzig STM32 Modelle, sondern nur noch zehn.

Vermutlich ist das auch jetzt schon so dass ein Die für viele 
verschiedene Typen verwendet wird. Das was "zu viel" an Features da ist 
kann man ja per OTP Fuse oder Laser lahmlegen. Erhöht nebenbei 
möglicherweise auch die Ausbeute.

von Marc X. (marc_x)


Lesenswert?

rµ schrieb:
> Stefan F. schrieb:
>> Wahrscheinlich gibt es dann nicht mehr
>> siebenhundertfünzig STM32 Modelle, sondern nur noch zehn.
>
> Vermutlich ist das auch jetzt schon so dass ein Die für viele
> verschiedene Typen verwendet wird. Das was "zu viel" an Features da ist
> kann man ja per OTP Fuse oder Laser lahmlegen. Erhöht nebenbei
> möglicherweise auch die Ausbeute.

Das ist definitiv so, hier im Forum wurde vor einigen Jahren mal eine 
Liste angehängt, welcher Die in welchem STM32-Derivat steckt:
Beitrag "Re: Controller mit größerem Flash als angegeben?"

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

rµ schrieb:
> Stefan F. schrieb:
>> Wahrscheinlich gibt es dann nicht mehr
>> siebenhundertfünzig STM32 Modelle, sondern nur noch zehn.
>
> Vermutlich ist das auch jetzt schon so dass ein Die für viele
> verschiedene Typen verwendet wird. Das was "zu viel" an Features da ist
> kann man ja per OTP Fuse oder Laser lahmlegen. Erhöht nebenbei
> möglicherweise auch die Ausbeute.

Die Features (z.B. mehr Flash) werden z.T. nicht mal deaktiviert sondern 
nur nicht getestet.

von Olaf (Gast)


Lesenswert?

> Sowas in Hardware ist starr, denn jede Änderung braucht neue
> Schaltungsdetails, neue Masken für die Produktion und somit neue Chips.
> Die gleiche Änderung in Software ist da wesenlich flexibler.

Das ist natuerlich zu 100% richtig, aber ich denke ist auch ein
bisschen die Ursache aller Probleme.

Frueher: Wir machen einen Chip. Kostet 200000DM, scheisse teuer,
muessen wir alles dreimal kontrollieren sonst ist die Kacke am
dampfen.


Heute: Wir machen eine Firmware. Probleme? Och, schicken wir dem
Kunden eine neue Version, kost ja nix. Ergebnis sind dann bugs
ohne Ende.

Alternative: Wir koennten jede Software oder jedes Geraet dem
Hersteller wieder auf den Tisch werfen und der muss uns immer
die Kohle zurueckgeben. Nur wenn es den Hersteller richtig
Geld kostet wird er sich anstrengen.
Ich glaube ich besitze kein einziges in den letzten 10Jahren
gekauftes Geraet wo ich den Hersteller nicht einen Softwarebug
zeigen koennte. Auto, TV, Autoradio, Mikrowelle, usw. Alles
voller Bugs.

Olaf

von Stefan F. (Gast)


Lesenswert?

Olaf schrieb:
> Ich glaube ich besitze kein einziges in den letzten 10Jahren
> gekauftes Geraet wo ich den Hersteller nicht einen Softwarebug
> zeigen koennte.

Geht mir genau so. Jedes Gerät im Haushalt, dass Software enthält, hat 
mindestens eine reproduzierbare Macke, die ich sofort vorführen kann. 
Dazu kommen sporadische Fehlfunktionen.

Ich mag unsere Küche. Dort ist das einzige programmierte Gerät die 
Waage. Und weil sie oft genug spinnt, wird die nächste Waage wieder eine 
mechanische, auch wenn es mehr kostet. Das haben wir schon beschlossen.

von Ein T. (ein_typ)


Lesenswert?

Stefan F. schrieb:
> Ein T. schrieb:
>> hört sich das für mich nach einem grundlegenden
>> Mißverständnis an, welche Ziele die Containerisierung verfolgt
>
> Für mich auch, aber mich fragt ja keiner.

:-(

> Das wurde vom Betrieb gestartet, die sich zu "Dev-Ops" weiter entwickeln
> wollten. [...]
>
> Ich habe das Gefühl, dass die aufstrebende Dev-Ops Abteilung schon
> wieder die Nase voll hat. Aber die Struktur (Cloud) ist nun gesetzt. Die
> Geschäftsführung will nicht mehr zurück, wohl auch, weil unsere Kunden
> nur noch "irgendwas mit Cloud" haben wollen. Java EE ist out.

Das hört sich für mich jetzt aber irgendwie weniger nach "[...] weiter 
entwickeln wollten", sondern eher nach "[...] weiter entwickeln sollten" 
an. Natürlich sollen sich die Leute gefälligst selbst einarbeiten und es 
darf auf keinen Fall etwas kosten, und wenn trotzdem Schulungsmaßnahmen 
notwendig werden sollten, dann bitte bei dem "Kompetenzzentrum" eines 
mit dem Unternehmen verbandelten Schulungspartners in der Nähe und 
keinesfalls bei einer renommierten Institution wie dem Linuxhotel oder 
der Heinlein Akademie... Kann ich mir das so ungefähr vorstellen? ;-)

von Ein T. (ein_typ)


Lesenswert?

Stefan F. schrieb:
> Als Softwareentwickler erlebe ich oft Fälle, wo der Kunde zuerst eine
> einfache geradlinige Lösung bestellt, und dann kurz vor dem Zieltermin
> (oder auch danach) mit solchen Kloppern um die Ecke kommt:
>
> Ach übrigens, sämtliche Schnittstellen müssen verschlüsselt und mit
> Server- und Client-Zertifikaten abgesichert werden, incl. der Datenbank
> und Speichermedien. Kann man alles machen, aber es treibt die
> Betriebskosten in die Höhe.

hüstel Als Anbieter kalkulieren wir ohnehin von vorneherein so und 
weisen schon im Angebot darauf hin, daß das zwar herausgerechnet werden 
kann -- aber nur mit schriftlicher Erklärung des Kunden, daß das nicht 
Stand der Technik ist, er ausdrücklich über die Risiken aufgeklärt 
wurde, sich der Risiken bewußt ist und daß er sie alleine trägt. Mein 
Chef legt dann noch eine vorgefertigte Erklärung bei, in der "Riskio" 
oft genug vorkommt, daß die noch nie jemand unterschrieben hat. ;-)

von W.S. (Gast)


Lesenswert?

Ralf schrieb:
> Der Faustkeil wird sicherlich auch nicht mehr zu Deinem Inventar
> gehören, das Werkzeug darf sich doch gerne weiterentwickeln! Dennoch
> vermittelst Du hier eher den Stil "Haben wir immer schon so gemacht" ...

Ähem... naja, der Faustkeil ist vermutlich meinem Ururur..urgroßvater 
mal abhanden gekommen, jedenfalls ist nur noch der Teigschaber im 
Küchenregal übrig geblieben. Aus Plastik und nicht mehr aus Feuerstein.

Soviel zur Weiterentwicklung von Werkzeugen.

Und was den Stil betrifft: Manches hat sich auch in der 
Softwareentwicklung bewährt und zwar, weil es wohlbegründet war und ist. 
Zum Beispiel das Aufteilen einer Firmware in verschiedene Schichten von 
Lowlevel-Dingen bis herauf zu den eigentlichen Algorithmen. Das schafft 
einen durchaus nennenswerten Teil an hardware- und 
hersteller-unabhängigen Teilen und damit eine Erleichterung für den 
Programmierer. Allerdings gefällt so etwas den Herstellern nicht, denn 
es vermindert die Stärke der Kundenanbindung. Also haben sie alle sich 
irgendwelche Hilfsprogramme einfallen lassen, um die Kundenbindung zu 
verstärken. Und eben deshalb wurschteln gar viele mit sowas wie Cube, 
Xpresso, Dave und so herum und erfinden für jedes ihrer Projekte ihr 
eigenes Rad erneut. Bellende Un-Ökonomie bei den µC-Anwendern bloß für 
die Kundenanbindung. Soll ich das OK finden?

Ansonsten hat sich der Inhalt dieses Threads zerteilt: Ein heftig 
diskutierender Teil befaßt sich mit den seelischen Leiden von 
Dienstleistungs-Programmierern, denen das eigentliche Produkt sowohl 
unbekannt als auch wurscht ist.

W.S.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> Dort ist das einzige programmierte Gerät die
> Waage. Und weil sie oft genug spinnt, wird die nächste Waage wieder eine
> mechanische, auch wenn es mehr kostet.

Was lernen wir daraus wieder?
Keep it simple!
Was schon uneingeschränkt für Software gilt
das gilt selbstverständlich auch darüber hinaus.

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> Was lernen wir daraus wieder?
> Keep it simple!

Ja. Der Spruch steht mittlerweile in meiner Bewerbungsvorlage.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Stefan F. schrieb:
> Kommt so etwas auch in der Elektronik-Entwicklung vor?

Ja. Ein befreundetes Unternehmen entwickelte für einen 
Endoskophersteller die zugehörige Elektronik: ein 8051-Derivat, eine 
Lampe, ein Lüfter, ein Temperaturfühler und ein paar Taster und LEDs.

Dann entschied sich der Endoskophersteller, statt des klassischen 
Lichtwellenleiters einen Kamerachip einzusetzen. Der o.a. 8051 sollte 
dann auch die Bildverarbeitung übernehmen. Es durfte hierfür nicht auf 
einen anderen Microcontroller ausgewichen werden, denn der 8051 habe 
sich ja schließlich schon bewährt, und man wolle keine Neuentwicklung 
finanzieren. Außerdem könne man sich nicht vorstellen, dass es so große 
Unterschiede zwischen verschiedenen Typen gäbe. Letztendlich artete das 
in eine wilde Bastelei mit analogen Filtern usw. aus und wurde dann 
irgendwann beerdigt, weil keine brauchbare Lösung herauskam.

von Ralf (Gast)


Lesenswert?

W.S. schrieb:
> Zum Beispiel das Aufteilen einer Firmware in verschiedene Schichten von
> Lowlevel-Dingen bis herauf zu den eigentlichen Algorithmen. Das schafft
> einen durchaus nennenswerten Teil an hardware- und
> hersteller-unabhängigen Teilen und damit eine Erleichterung für den
> Programmierer.

Solcherlei Gliederung ist in ihrem Nutz- und Wiederverwertungswert ja 
unbestritten. Das dient auch durchaus der Forderung, die Dinge einfach 
zu halten.  Allerdings nur vor dem Hintergrund, daß gerade auf dem 
Niveau der "Lowlevel" Dinge inzwischen und mit jedem neuen Controller im 
Detail viel zuviel zu unterschiedlich (und zu dumm, im Sinne mangelnder 
Hardware Intelligenz) gelöst ist. Allein das Setzen eines Ausgangs ist 
bei jedem Controller anders. Dabei sind diese Grundfunktionalitäten 
eigentlich überall gleich und könnten einem Standard folgen. Das Gleiche 
bei der Zuordnung peripherer Funktionalitäten zu den einzelnen Pins: 
Bitteschön alles frei wählen können! Oder in der Default-Einstellung des 
ADC werden zugeordnete Kanäle fix und fertig eingelesen und die des DAC 
ausgegeben! Was gäbe es hier alles zu vereinfachen, zusammenzufassen, 
intelligenter zu machen! Die Reihe fortzusetzen spare ich mir. Die harte 
Realität bleiben kleinstteilige Bitkonfigurations- Ungetüme- samt 
zehntausender sich stetig wiederholender Programmierfehler. Und immer 
umfangreichere Bibliotheken, die zwar all das zu kapseln und zu 
interfacen vermögen, aber die nötigen MHz dafür immer höher treiben.

Und ja, hier kommen die Firmen-Interessen in die quere.
Diejede muss es unbedingt anders lösen und handhaben.
Es besteht ein Interesse an dieser Kompliziertheit.
Sind wir hier beim Kern der Dinge?

von Cyblord -. (cyblord)


Lesenswert?

Ralf schrieb:
> Allerdings nur vor dem Hintergrund, daß gerade auf dem
> Niveau der "Lowlevel" Dinge inzwischen und mit jedem neuen Controller im
> Detail viel zuviel zu unterschiedlich (und zu dumm, im Sinne mangelnder
> Hardware Intelligenz) gelöst ist. Allein das Setzen eines Ausgangs ist
> bei jedem Controller anders.

Genau dabei hilft eine saubere Abstraktion.

Das ist keine Aufgabe der Hersteller. Wie gut oder schlecht oder komplex 
das Setzen eines Ausganges auch immer gemacht ist, bei korrekter 
Abstraktion juckt dich das gar nicht mehr. Weil es im Zweifel ein paar 
Zeilen Code sind die man GENAU EINMAL schreiben muss.

Aber hier glauben die meisten Leute, Abstraktion wäre wenn man die Pin 
Nummern mit defines benennt.
Eine Trennung von Applikationscode und HW Zugriff bekommen die meisten 
hier doch intellektuell gar nicht auf die Kette. Da wird schon gar nicht 
verstanden was damit gemeint ist. Von der Umsetzung rede ich jetzt mal 
gar nicht.

: Bearbeitet durch User
von EAF (Gast)


Lesenswert?

Cyblord -. schrieb:
> Aber hier glauben die meisten Leute, Abstraktion wäre wenn man die Pin
> Nummern mit defines benennt.
Ist es doch auch!
Nagut, nur der erste winzige aber wichtige Schritt, in einer langen 
Kolonne von möglichen Varianten.

von MCUA (Gast)


Lesenswert?

> Wann werden sehr schnelle Microcontroller(200Mhz+) benötigt?
Es kommt auch auf die Architektur an, nicht nur auf die f.
Langsamer kann auch besser sein.


> Der o.a. 8051 sollte dann auch die Bildverarbeitung übernehmen.
Der war gut.


> Allein das Setzen eines Ausgangs ist bei jedem Controller anders.
Wird sich auch nicht ändern, da jeder Hersteller seine ganz 'spezielle' 
Konfiguration anpreisen will.


> Das Gleiche bei der Zuordnung peripherer Funktionalitäten zu den einzelnen Pins:
> Bitteschön alles frei wählen können!
Dann sag das den Herstellern!
Es ist wohl zu teurer überall eine 100 x 100 Matrix zu machen.


> Oder in der Default-Einstellung des
> ADC werden zugeordnete Kanäle fix und fertig eingelesen
Das Problem sind nicht die ganz simplen Fälle, sondern die 
komplizierten,
die dann eine kleinteilige (Bit)Konfiguration benötigen.


> ... samt zehntausender sich stetig wiederholender Programmierfehler.
Du musst die Programmierfehler ja nicht machen.
Und HAL bringts nicht, weil dann die Fehler dort sind.

von W.S. (Gast)


Lesenswert?

EAF schrieb:
> Ist es doch auch!

Nein, ist es eben NICHT. Sowas ist nur so eine Art 
Bleistift-Geraderücken oder eine Umetikettierung. Da ist keinerlei 
Absteaktion drin, wenn man Portpins nach irgend einem Schema neu 
numeriert.

Vergleiche mal folgendes:
void Lampe_aus(void);
void SetPortPin(int port, int pin, bool level);
Fällt dir endlich dabei etwas auf? Ich erklär's dir: Bei Lampe_aus() ist 
es dem Algorithmus, der sowas benutzt, egal, ob die Funktion, die Lampe 
auszumachen nun über einen Port und eies seiner Pins erfolgt oder über 
irgend etwas anderes, bis hin zum reitenden Boten. Bei SetPortPin() 
klebt man nach wie vor an demselben Chiptyp vom selben Hersteller 
(woanders heißen die Ports anders und die Lampe ist auch an einem 
anderen Port und braucht anderen logischen Pegel), ist damit also völlig 
unportabel und vermengt Lowlevel-Dinge mit den Algorithmen.

Versuche doch mal, solche Kurzsichtigkeit loszuwerden. Das riecht mir 
verdächtig nach C-Denke.

W.S.

von EAF (Gast)


Lesenswert?

W.S. schrieb:
> Versuche doch mal, solche Kurzsichtigkeit loszuwerden.

Ja, das würde dir ganz gut stehen, das hast du richtig erkannt.
(wer hats gerochen, dem es aus der Hos gekrochen)

Die Dinge sprechend zu benennen, ist der erste richtige Schritt in die 
Abstraktion!
Das habe ich gesagt, und dazu stehe ich auch.

W.S. schrieb:
> Das riecht mir verdächtig nach C-Denke.
Ja ja.....
Nicht dass mir diese Denke ganz fremd wäre....

In meiner kleinen Arduino Welt sieht eine "LED" in etwa so aus:
> Combie::Pin::OutputPin<13> led;
Mal abgesehen davon, was dahinter steckt, aber es fängt immer damit an, 
die Dinge klar und eindeutig zu benennen.

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

EAF schrieb:
> W.S. schrieb:
>> Versuche doch mal, solche Kurzsichtigkeit loszuwerden.
>
> Ja, das würde dir ganz gut stehen, das hast du richtig erkannt.
> (wer hats gerochen, dem es aus der Hos gekrochen)
>
> Die Dinge sprechend zu benennen, ist der erste richtige Schritt in die
> Abstraktion!

W.S. hat hier schon recht.

Nur, weil du ein Paar defines für LampePort und LampePin hast, kennt 
sich keiner aus und es ist keine Abstraktion.

Da gehört z.B. eine setLampe(bool on) Funktion hin.
Die kann dann gerne direkt PIN_5 an PORT_B setzen.

Dann kann man 1. erkennen, was die Funktion tut und 2. hat man eine 
Abstraktion.


Jetzt Pin_5 in LampePin und PORT_B mit LampePort umzubenennen bringt 
nur, dass man in der setLampe Funktion gar nicht weiß, was da passiert.
Ich ärger mich jedesmal, wenn ich dann diesen defines nachjagen darf...
Vor allem, wenn die dann wieder irgendwo mehr oder weniger unabsichtlich 
überschrieben werden.

Mit dieser Abstraktion kann ich dann z.B. 2 Implementierung der Funktion 
machen.
1x in der _stm32.cpp und einmal in der _pc.cpp.
Damit ginge der Lampe ein/aus Befehl einmal an einen Port-Pin und einmal 
an ein Ethernet-Relais - je nachdem, was ich mit compiliere/linke.

Der Applikation kann dieses Detail im Grunde egal sein.


EAF schrieb:
> In meiner kleinen Arduino Welt sieht eine "LED" in etwa so aus:
>> Combie::Pin::OutputPin<13> led;
> Mal abgesehen davon, was dahinter steckt, aber es fängt immer damit an,
> die Dinge klar und eindeutig zu benennen.

Das ist ja eigentlich schon gar nicht sooo schlecht... aber ich glaube 
W.S. gings in dem Beispiel darum, dass den pin 13 als define umzubennen 
einfach keine Abstraktion wäre.


C-Leute tendieren wirklich hier unnötig "umzubenennen" und dann viel, 
viel, viel zu granulare Abstraktionen zu machen und diese wie wild 
übereinander zu stülpen.

OOP Denken hilft hier.
Meiner Erfahrung nach kommt bei Leuten mit starkem OOP Hintergrund eine 
viel bessere Abstrahierungen raus.
Wenn die dann noch etwas Erfahrung in Low-Level-Bereich haben, dann ist 
das auch wesentlich performanter und kleiner als der Mist der sich 
überall einbürgert.

Man siehe nur mal das Zeug von ST an.
Die behaupten, deren HAL würde irgendwas abstrahieren.
Naja.. ich würd das eher einen Eintrag in einen 
Code-Obfusication-Contest bezeichnen.

73

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Fällt dir endlich dabei etwas auf? Ich erklär's dir: Bei Lampe_aus() ist
> es dem Algorithmus, der sowas benutzt, egal, ob die Funktion, die Lampe
> auszumachen nun über einen Port und eies seiner Pins erfolgt oder über
> irgend etwas anderes, bis hin zum reitenden Boten.

Hast du schon zig mal gebracht, aber selber immer noch nicht verstanden 
das es verschiedene Abstraktionslevel gibt.
In ST HAL heißt es: HAL_GPIO_WritePin(). Das funtkioniert vom L0 bis zum 
H7 so. Es abstrahiert aber nur den unteren Hardware Layer, mehr soll es 
gar nicht.
Ein Lampe_aus() oder Lampe.aus() ist Applikationslayer. Der ruft dann 
den Hardwarelayer auf um einen gpio zu setzen oder den berittenen Boten 
zu schicken. Damit hat der µC Hersteller nix mehr am Hut und das würde 
ich auch never ever von ihm erwarten.

Das die Funktionen je Hersteller anders heißen ist auch logisch. ST will 
nicht Software für NXP schreiben und umgekehrt. Es ist einfach ein 
Verkaufsargument einen umfassenden Softwaresupport zu haben, und da ist 
ST einfach ganz weit vorne. Auch ein Cube ist angenehmer zu benutzen als 
bei NXP Online Konfigurationen generieren zu lassen.

Wenn man es noch unabhängiger haben will, dann nimmt man ein OS. Und 
davon gibt es reichlich, nicht nur Herstellerunabhängig, auch 
Architekturunabhängig. Nur kostet das wieder extra Einarbeitung und 
viele jammern das da ja der Overhead zu groß wäre. Dafür kann ich im 
Menü meiner IDE einfach einen anderen Controller wählen und Code 
compilieren lassen ohne alles neuschreiben zu müssen.

: Bearbeitet durch User
von EAF (Gast)


Lesenswert?

Hans W. schrieb:
> W.S. hat hier schon recht.

Hans W. schrieb:
> aber ich glaube
> W.S. gings in dem Beispiel darum, dass den pin 13 als define umzubennen
> einfach keine Abstraktion wäre.

Das klare benennen ist der erste Schritt in die richtige Richtung!
Dass da noch viel mehr möglich ist, möchte ich ja gar nicht in Frage 
stellen.
Ganz im Gegenteil.....

Ich halte das erfinden von eindeutigen Bezeichnern für eine ganz 
wesentliche Sache. Natürlich ist das nicht "ausreichend", um es als 
geniale Abstraktion bezeichnen zu können.
Nur ein erster Schritt.

Natürlich weiß ich als C++ler dass defines meist unnötig und _ sind. 
Und dennoch finde ich es ausgesprochen dämlich von Grund aus zu 
verteufeln.
Gerade auch weil C doch schon (s)ehr darauf angewiesen ist.

Gerade auch unser cylord und W.S. neigen da zu Leute für blöd zu 
erklären (du auch?). Und das gerne mal in einer statischen, 
verurteilenden, anklagenden, Form.
Mir fehlt da der Prozess, der des Lernens, des Schritt für Schritt 
entwickeln.

Ein #define led 13
Mit irgendwann folgendem digitalWrite(led, HIGH) ist mir immer lieber 
als ein digitalWrite(13, HIGH) im Code verstreut.

Natürlich wäre ein
constexpr byte led {13};
in fast allen Fällen besser

Aber eins nach dem anderen, und nicht sofort drauf kloppen und für blöd 
erklären!
Insbesondere nicht alle in einen Sack stecken.
Man bedenke: Fortschritt in die richtige Richtung geht viel leichter, 
wenn nicht für jede Kleinigkeit auf einem rum gekloppt wird.
Unnötiger Gegenwind.


Ach ja, der eine Sack, und das draufhauen:
Die meisten, der militanten C oder ASM Vertreter, welche dann ebenso 
militant auf C++ rum hacken, sind schlicht zu blöd/faul um die Sprache 
auch nur ansatzweise zu verstehen. Genau das macht sie dann auch so 
unausstehlich.

von Ralf (Gast)


Lesenswert?

Cyblord -. schrieb:
> Genau dabei hilft eine saubere Abstraktion.

Richtig. In Hardware. Intelligenter, code- und der Software Komplexität 
ersparender als heutzutage.
Nach meinem Eindruck sind aber viele dem derzeitigen Status Quo 
verfallen.
Und sie haben Recht: Viel zu ändern ist daran als Programmierer ohnehin 
nicht.

EAF schrieb:
> der militanten C oder ASM Vertreter

"Militanz" kann sich ja nur aus schlagkräftigen Argumenten ergeben.
Oder meintest Du persönliche Herabwürdigung und Beleidigungen?

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

EAF schrieb:
> Gerade auch unser cylord und W.S. neigen da zu Leute für blöd zu
> erklären (du auch?).

Keine Sorge, da gab's schon das "eine oder andere" Wortgefecht weil ich 
meistens anderer Meinung bin...

EAF schrieb:
> Das klare benennen ist der erste Schritt in die richtige Richtung!

Jain... wenn's am schluss der Verständlichkeit dient - ja.
Hier aber...

EAF schrieb:
> Ein #define led 13
> Mit irgendwann folgendem digitalWrite(led, HIGH) ist mir immer lieber
> als ein digitalWrite(13, HIGH) im Code verstreut.

Würde ich für die LED 1ne funktion schreiben ala
1
setLED(bool state);

wenn da drinnen mehrere digitalWrites sind, dann wäre so ein define 
nett.
Sonst versteht mans nicht.

Gibts aber genau die eine digitalWrite Anweisung, dann versteckst du mit 
dem define unnötig die information, dass die am Pin hängt.

EAF schrieb:
> Natürlich wäre ein
> constexpr byte led {13};
> in fast allen Fällen besser

Das hängt vom fast ab... siehe oben.


Das Problem, das ich mit dem ganzen "herumabstrahieren" ist, dass es 
eben in den allermeisten Fällen nicht abstrahiert.
Abstrahieren soll Details "verstecken" und dadurch die Funktion besser 
verständlich machen.
Dadurch lassen such z.B. Logikfehler besser vermeiden und auf eine 
Platform portieren geht auch einfacher.


Dieses digitalWrite(13, HIGH) ist übrigens eine recht schöne 
Abstraktion.
Scheiß egal, ob das ein AVR oder ein ESP32 ist, der Pin13 (dabei ist der 
mit "13" beschriftete Pin gemeint - nicht ein Pin am IC-Package) wird 
logisch HIGH gesetzt.

Sowas kann an verstehen, ohne da tieferes Wissen von der Hardware zu 
haben.... wenn da noch ein Port-Extender involviert wäre, auch gut, die 
Abstraktion würd's vor mir "verstecken".

Wenn jetzt die Pins am PCB mit "LED1" und "LED2" beschriftet wäre, dann 
wär ein enum,#define,... natürlich wieder angebracht.

73

: Bearbeitet durch User
von Ein Kommentar (Gast)


Lesenswert?

Da schlage ich einen Wettbewerb vor:

Ein Basketballkorb, bei dem jeder Wurf trifft. Inklusive 
Gesichtserkennung, damit die Ehefrau niemals trifft.

https://www.youtube.com/watch?v=xHWXZyfhQas

Jeder Mikrocontroller ist erlaubt von AtTiny bis Cortex M7.

Mal schauen, ob ob die Atmega Fraktion so etwas mit optimalem 
Assemblercode zustande bringt.

von Ralf (Gast)


Lesenswert?

Arduino I/O ist übrigens ein schönes Beispiel wieviel Performance in 
Software-Abstraktionen hängenbleiben kann :)

von Malte _. (malte) Benutzerseite


Lesenswert?

Hans W. schrieb:
> Man siehe nur mal das Zeug von ST an.
> Die behaupten, deren HAL würde irgendwas abstrahieren.
> Naja.. ich würd das eher einen Eintrag in einen
> Code-Obfusication-Contest bezeichnen.
Man kann die HAL durchaus kritisieren aber beim 
Code-Obfusication-Contest gewinnt eindeutig Xilinx (jetzt AMD):
https://github.com/Xilinx/embeddedsw/blob/master/lib/sw_apps/zynq_fsbl/misc/zc702/ps7_init.c

Ja genau solche Dateien kommen aus dem Xilinx Generator (Ähnlich dem ST 
Cube MX). Das mag vielleicht sogar Flash sparender als die HAL sein, 
lesbarer aber auf keinen Fall.
Abstraktion kostet etwas Rechenzeit, aber gut gemacht sind die Kosten 
meist vertretbar. Man muss es ja nicht gleich so weit treiben wie die 
Webbrowser mit den ganzen Javascript Webseiten und die ganzen Apps die 
in Wirklichkeit ein 249MB Chrome + 1MB App sind.

von Franz (Gast)


Lesenswert?

Ralf schrieb
>Arduino I/O ist übrigens ein schönes Beispiel wieviel Performance in
>Software-Abstraktionen hängenbleiben kann :)

Das ist schon wahr. Aber wie wir wissen, gibt es für jedes Problem eine 
Lösung:
https://github.com/mmarchetti/DirectIO

von W.S. (Gast)


Lesenswert?

Hans W. schrieb:
> Würde ich für die LED 1ne funktion schreiben ala
> setLED(bool state);

Ach, und wann ist die Lampe an und wann aus? z.B. eine LED die an VCC 
und einem O.C. hängt?

Nein, solch ein Ausdruck ist einfach nur kurzsichtig gemacht, weil bloß 
bis zum Bit in einem peripheren Register gedacht wurde. Eher typisch für 
theoretische Programmierer, die sich von allem fernhalten wollen, was 
außerhalb ihrer Programmiersprache ist.

Die zwei Funktionen
Lampe_ein();
und
Lampe_aus();
sind allemal aussagekräftiger und weil sie auch noch ohne Argument 
auskommen, ist der erzeugte Maschinencode obendrein auch noch 
effektiver.

Ich sehe hier immer wieder das Bestreben von Programmierern, sich 
möglichst konfus auszudrücken und am liebsten Bezeichner zu verwenden, 
die in tausendunddrei verschiedenen Dateien stehen, was sie für Eleganz 
halten. Ist es aber nicht. Es ist eigentlich nur Blödheit.

W.S.

von EAF (Gast)


Lesenswert?

Franz schrieb:
> Das ist schon wahr. Aber wie wir wissen, gibt es für jedes Problem eine
> Lösung:
> https://github.com/mmarchetti/DirectIO

Habe die Variante mal getestet (UNO)
Schon nicht schlecht.....
1
#include <DirectIO.h>
2
3
OutputPin pin(13);
4
5
void setup()
6
{
7
}
8
9
void loop() 
10
{
11
  pin.toggle(); // 263 kHz
12
}

1
Der Sketch verwendet 880 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
2
Globale Variablen verwenden 15 Bytes (0%) des dynamischen Speichers





Meine Variante:
1
#include <CombiePin.h>
2
3
using Led = Combie::Pin::OutputPin<13>;
4
5
void setup() 
6
{
7
  Led{}.init();
8
}
9
10
void loop() 
11
{
12
 Led{}.toggle(); // 1,6MHz
13
}

1
Der Sketch verwendet 448 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
2
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers




Und jetzt rein mit dem Arduino Framework:
1
constexpr byte led {13};
2
3
void setup() 
4
{
5
  pinMode(led,OUTPUT);
6
}
7
8
void loop() 
9
{
10
 digitalWrite(led,!digitalRead(led));// 95,2MHz
11
}

1
Der Sketch verwendet 806 Bytes (2%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
2
Globale Variablen verwenden 9 Bytes (0%) des dynamischen Speichers


Und jetzt nochmal meine Variante, ohne Framework:
1
#include <CombiePin.h>
2
3
using Led = Combie::Pin::OutputPin<13>;
4
5
int main() 
6
{
7
  Led{}.init();
8
  while(1) Led{}.toggle(); //2,67MHz
9
}
1
Der Sketch verwendet 140 Bytes (0%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
2
Globale Variablen verwenden 0 Bytes (0%) des dynamischen Speichers

von W.S. (Gast)


Lesenswert?

J. S. schrieb:
> Hast du schon zig mal gebracht, aber selber immer noch nicht verstanden
> das es verschiedene Abstraktionslevel gibt.
> In ST HAL heißt es: HAL_GPIO_WritePin(). Das funtkioniert vom L0 bis zum
> H7 so. Es abstrahiert aber nur den unteren Hardware Layer, mehr soll es
> gar nicht.

Du versuchst immer wieder, dieses Zeugs als Abstraktionslevel (vom Grade 
NULL sozusagen) darzustellen. Hast du dich schon mal gefragt, was so ein 
Nicht-Abstraktionszeug für einen Nutzen hat? Ich sag's dir: Garkeinen - 
außer für ST.

Und deine Ausrede, daß es verschiedene Abstraktionslevel gibt, kann ich 
auf exakt 2 (ZWEI) Level einkürzen: Einen und Keinen.

Um mal bei dem Beispiel der Lampe zu bleiben: Versuche mal (in Gedanken) 
den Algorithmus, der da u.a. auch die Lampe benutzen soll, auf 
verschiedene Plattformen zu bringen. Zum Beispiel auch eine, die selbst 
überhaupt keine Ports hat wie ein heutiger PC. Wenn der Algorithmus mit 
den dortigen Treibern auch die Lampe ein- und ausschalten kann, dann ist 
die Lowlevel-Schicht abstrahiert (notfalls mit dem reitenden Boten) 
sonst eben nicht.

W.S.

von EAF (Gast)


Lesenswert?

EAF schrieb:
> Und jetzt nochmal meine Variante, ohne Framework:

Nachtrag:
Die letzte Variante erzeugt exakt den selben ASM Code wie diese 
Variante:
1
int main() 
2
{
3
  DDRB |= 1 << PB5;
4
  while(1) PINB = 1 << PB5; //toggle()  2,67MHz
5
}

von Norbert (Gast)


Lesenswert?

EAF schrieb:
> digitalWrite(led,!digitalRead(led));// 95,2MHz

Alle Achtung!  ;-)

von EAF (Gast)


Lesenswert?

Norbert schrieb:
> Alle Achtung!  ;-)

Hmm...
kHz

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

Malte _. schrieb:
> Abstraktion kostet etwas Rechenzeit, aber gut gemacht sind die Kosten
> meist vertretbar.

Gut gemachte Abstraktion kostet im schlechtesten Fall am sekundären 
target Zeit!

W.S. schrieb:
> Die zwei Funktionen
> Lampe_ein();
> und
> Lampe_aus();
> sind allemal aussagekräftiger und weil sie auch noch ohne Argument
> auskommen, ist der erzeugte Maschinencode obendrein auch noch
> effektiver.

Ahhhhhhh, jetzt sind wir wieder auf Betriebstemperatur...... No 
comment...

W.S. schrieb:
> J. S. schrieb:
>> Hast du schon zig mal gebracht, aber selber immer noch nicht verstanden
>> das es verschiedene Abstraktionslevel gibt.
>> In ST HAL heißt es: HAL_GPIO_WritePin(). Das funtkioniert vom L0 bis zum
>> H7 so. Es abstrahiert aber nur den unteren Hardware Layer, mehr soll es
>> gar nicht.
>
> Du versuchst immer wieder, dieses Zeugs als Abstraktionslevel (vom Grade
> NULL sozusagen) darzustellen.

Da muss ich leider zustimmen... Die Hal von St ist.... Naja... Scheiße. 
Und das ist freundlich ausgedrückt. Das Arduino Framework ist 
wesentlich besser.

Im Endeffekt zählt nur ob es besser verständlich und nur vertretbar 
langsamer/... ist.

Lustigerweise kann man Abstraktionen ohne Zeit Penalty machen... Nicht 
immer, aber oft...

St hat das nicht verstanden und will das auch nicht.

73

von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Um mal bei dem Beispiel der Lampe zu bleiben:

das kann man am Besten mit deinem Lieblingswort zusammenfassen: 
Geschwurbel.
Dann schreibe doch einfach mal so eine Library wenn du alles soviel 
besser weißt.

W.S. schrieb:
> Hast du dich schon mal gefragt, was so ein
> Nicht-Abstraktionszeug für einen Nutzen hat? Ich sag's dir: Garkeinen -
> außer für ST.

Das sehen viele viele Programmierer anders.

Hans W. schrieb:
> Da muss ich leider zustimmen... Die Hal von St ist.... Naja... Scheiße.
> Und das ist freundlich ausgedrückt. Das Arduino Framework ist
> wesentlich besser.

Oh je, da outet sich noch einer.
Das Arduino Framework stellt Funktionen/Objekte auf einem höheren Level 
bereit. Schonmal nachgesehen wofür die Abkürzung HAL steht? Das ist eine 
handbreit über der Registerprogrammierung, mehr nicht. STM32duino ist 
die Implementierung des Arduino API für STM32, und was wird darin 
benutzt: bingo, HAL und LL im Mix.
Durch die Verwendung der HAL hat ST es in kurzer Zeit geschafft das 
Arduino API für nahezu alle STM32 zur Verfügung zu stellen, genau wie 
bei Mbed.
Es gibt auch OS/Frameworks ohne HAL wie libopencm3, ChibiOS, NuttX, 
Zephyr und weitere, aber auch die gucken im HAL Code ab und die gibt es 
längst nicht für so viele ST MCU.

Und zur Laufzeit von digitalWrite & Co. wurde hier auch schon genug 
geschrieben, das macht eben mehr als nur den gpio setzen. Hier ist das 
Arduino API prozedural und es ist legal digitalWrite und analogWrite auf 
dem selben Pin zu mischen, daher müssen die Funktionen noch etwas 
Housekeeping machen.
Im OOP Ansatz von Combie oder Mbed ist das nicht nötig, es gibt ein 
DigitalOut oder AnalogOut Objekt und das hat einen Pin auf den es 
arbeitet.  Ein Digitales Objekt kann keinen Analogwert schreiben, daher 
kann das Pin setzen schneller erfolgen. Wenn man doch einen Analogwert 
auf dem gleichen Pin ausgeben möchte, dann muss das Digital Objekt 
kaputt gemacht werden und ein Analog Objekt erzeugt werden und dann 
kostet es auch wieder mehr Zeit. So ein Anwendungsfall ist aber eher die 
Ausnahme, im Arduino API ist das durch die Funktionen aber die Regel. 
Und da kann man darüber diskutieren was nun Scheiße ist.

: Bearbeitet durch User
von Klaus H. (klummel69)


Lesenswert?

EAF schrieb:
> Habe die Variante mal getestet (UNO)
> Schon nicht schlecht.....

Wenn Du Deine Version mit DirectIO vergleichst,
solltest du auch für DirectIO den optimierten Fall nutzen:

Output<13> pin;

statt

OutputPin pin(13);

Dann dürfte die Variante noch etwas schneller sein.

von MCUA (Gast)


Lesenswert?

Für den Ein oder Anderen ist es reine Geschmackssache, ob man es 
'LampeEin' oder 'MOV A, PRTA' oder 'MOV PRTA, A' oder 'ST sonstwas' 
nennt.
Wenn es über Substitut. gemacht wird entsteht kein weiterer Overhead.

Was aber oft zu sehen ist, dass erstmal mehrere Program-Ebenen 
durchlaufen werden müssen, bis letztlich der ausschlaggeb. ASM-Befehl 
ausgeführt wird.
In vielen Fällen (Bsp. Motorsteuerung) kann man sich solch 
Abstraktions-Gedöns gar nicht leisten, weil man nicht zig Takte warten 
kann, bis an entspr. Stelle ein Bit gesetzt wird.
Also, (was manche Soft-Fritzen nicht merken) Abstraktions-Gedöns kann 
den Motor verbrennen lassen!

Zudem sind hier manche CPUs im Nachteil, die nichtmal Atomic-Befehle am 
Stück umsetzen können (auch da braucht es weitere Takte).

von Stefan F. (Gast)


Lesenswert?

J. S. schrieb:
> Durch die Verwendung der HAL hat ST es in kurzer Zeit geschafft das
> Arduino API für nahezu alle STM32 zur Verfügung zu stellen

Genau darum geht es bei der HAL. Sie soll den Wechsel zwischen 
unterschiedlichen STM32 Modellen vereinfachen, und zugleich den Wechsel 
auf andere Marken verhindern.

Allerdings: Wenn ich eine spezifische Funktion eines STM32 Modells 
nutze, dann kann ich trotz HAL nicht einfach auf ein anderes Modell 
wechseln, dass diese Funktion nicht oder anders hat.

Arduino ist eine Ebene höher, es umfasst die Mikrocontroller mehrerer 
Marken. Dafür beschränkt sich das Framework auf wenige Basis Funktionen, 
die jeder Mikrocontroller hat. Aber selbst diese wenigen Funktionen 
unterliegen den Beschränkungen des jeweiligen Modells (z.B.: nicht jeder 
µC hat gleich viele analoge Eingänge und PWM Ausgänge).

Sowohl mit Arduino als auch mit HAL kommt man ganz schnell an den Punkt, 
doch hardware spezifisch zu programmieren. Wenn man das clever 
strukturiert, kann man diesen Teil leicht auf andere Mikrocontroller 
umschreiben. Da kann es sinnvoll sein, direkte Registerzugriffe nicht 
über sämtliche Quelltext-Dateien zu verstreuen.

von Peter D. (peda)


Lesenswert?

Ich hab mal für einen SPS ähnlichen Ablauf die Abstraktion so weit 
getrieben, daß ich alle IO-Pins in einem Bit-Array im RAM abgelegt habe. 
Das hat den Vorteil, daß alle Statemaschinen in streng definierter 
Reihenfolge ablaufen und auch Zwischenzustände erlaubt sind, die nicht 
nach außen wirken. Alle Abläufe sind völlig unabhängig von der CPU und 
von der Pinanordnung.
Die einzige hardwarenahe Funktion ist update_all();.
Hier erfolgt sie konkret auf SPI-Expander (74HC165, 74HC595). Sie könnte 
aber auch direkt auf IO-Register arbeiten.
Hier mal ein Auszug:
1
void tlc_relays( void )     // switch TLC relays
2
{
3
  REL_SIMS = 0;
4
  if ( LED_PLC_SIMS )
5
    REL_SIMS = 1;
6
  if ( LED_STC )      // HFC/PLC -> STC
7
  {
8
    if ( REL_DBM )
9
    {
10
      REL_DBM = 0;
11
      SWtimer_add( rel_stc_on, DELAYED );
12
    }
13
  }
14
  else          // STC -> HFC/PLC
15
  {
16
    if ( REL_STC )
17
    {
18
      REL_STC = 0;
19
      SWtimer_add( rel_dbm_on, DELAYED );
20
    }
21
  }
22
}
23
24
void control( void )
25
{
26
  key_scan();           // handle key press
27
  stc_actions();        // stc functions
28
  plc_actions();        // plc functions
29
  hfc_actions();        // hfc functions
30
  calib_select();       // select ADC for calibration
31
  adc_select();         // select ADC input channel
32
  hfc_relays();         // hfc relay control
33
  tlc_relays();         // tlc relay control
34
  update_all();         // read, write IOs
35
}
Die Relais dürfen nie gleichzeitig geschlossen sein, daher die 
gegenseitige Verriegelung über eine Verzögerung.

von Stefan F. (Gast)


Lesenswert?

Aus Sicht des C++ Programmierer sind abstrakte Klassen eigentlich 
optimal, um Hardware-unabhängig zu programmieren. Das Framework würde 
eine High-Level API definieren und zu Teil auch implementieren. Den 
Hardware-spezifischen Teil müsste man durch Implementieren virtueller 
Methoden ergänzen. Nur hat man dann leider die volle Breitseite der C++ 
Nachteile an der Backe.

Ich denke,
- bei 8 Bit Controllern wäre das aus Performance Gründen eine blöde 
Idee.
- bei Arduino wollten sie die Komplexität vermeiden.
- bei der HAL wollte man sich nicht auf C++ festnageln.

Irgendwas ist immer. Während wir auf eine optimale einheitliche Lösung 
warten, wird neue Hardware erfunden, die ganz anders funktioniert und 
unsere schöne durchdachte API "von damals" wieder veraltet und unpassend 
aussehen lässt.

Ich programmiere Mikrocontroller nur als Hobby, aber ich sehe da 
deutliche parallelen zur PC Programmierung, was ich beruflich mache. Wir 
werden uns immer mit Frameworks und Bibliotheken herum schlagen müssen, 
die wir doof finden aber die irgendwie ihren Zweck erfüllen. Man kann 
als Einzelperson nicht jedes Rad für sich neu erfinden, wenn man im 
Strom mit schwimmen will (oder muss).

von MCUA (Gast)


Lesenswert?

> daß ich alle IO-Pins in einem Bit-Array im RAM abgelegt habe.
Das ist doch der Standard bei SPS-Geräten.
Ist aber extrem langsam.

von EAF (Gast)


Lesenswert?

Klaus H. schrieb:
> Wenn Du Deine Version mit DirectIO vergleichst,
> solltest du auch für DirectIO den optimierten Fall nutzen:
> ....
> Dann dürfte die Variante noch etwas schneller sein.

Mache ich doch gerne für dich!
1
#include <DirectIO.h>
2
3
Output<13> pin;
4
5
int main() 
6
{
7
  while(1) pin.toggle(); //1,232 MHz
8
}
1
Der Sketch verwendet 452 Bytes (1%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
2
Globale Variablen verwenden 0 Bytes (0%) des dynamischen Speichers


Halbe Geschwindigkeit, und anstatt 6 Byte im Flash ganze 316 Byte im 
Flash.
Wie schon gesagt, nicht schlecht, aber auch nicht so gut wie möglich.

von Peter D. (peda)


Lesenswert?

MCUA schrieb:
> Ist aber extrem langsam.

Definiere "extrem langsam".
Das vollständige Programm hat eine Durchlaufzeit von <400µs @ 11MHz. Für 
einen Menschen gesehen ist das sauschnell.

Vom Codeverbrauch her ist es auch sehr sparsam. Der Compiler kann viele 
Variablen zeitweise in CPU-Registern halten, muß also nicht sofort 
umständliche Pin-Zugriffe machen.

von Ralf (Gast)


Lesenswert?

Kann Euch an dieser Stelle die kleine "militante" Provokation nicht 
ersparen.
In Asm für AVRxDx:
1
sbi VPORTA_DIR,0
2
loop: sbi VPORT_IN,0
3
rjmp loop

toggelt Pin A0 nicht nur mit Maximal-Speed und Minimal-Flash.
Beachtenswert auch daß es in 3 Zeilen mit viel weniger Programmtext 
geschieht.
Noch beachtenswerter: Dazu ist viel weniger Sprachbimbamborium nötig.
Und noch wichtiger: Hier steht transparent ALLES was passiert,
nicht irgendwo versteckt in irgendwelchen Bibliotheken.

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> toggelt Pin A0 nicht nur mit Maximal-Speed und Minimal-Flash.

Super, hast du fein gemacht. Das geht in C ebenso.

Was du dabei völlig vergessen hast, ist die Abstraktion, um die es in 
der Diskussion geht.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> Super, hast du fein gemacht

Mit Hintergedanken nicht ganz, aber da kommt sicher noch einer drauf.

Stefan F. schrieb:
> Was du dabei völlig vergessen hast, ist die Abstraktion

Die möchte ich auch gerne vergessen, weil sie auf einfachsten 
Controllern schlicht übertrieben ist.

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> Und noch wichtiger: Hier steht transparent ALLES was passiert,
> nicht irgendwo versteckt in irgendwelchen Bibliotheken.
Der Frosch im Brunnen beurteilt den Himmel anhand des Brunnenrandes.

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Der Frosch im Brunnen beurteilt den Himmel anhand des Brunnenrandes.

Ralf schrieb:
> "Militanz" kann sich ja nur aus schlagkräftigen Argumenten ergeben.
> Oder meintest Du persönliche Herabwürdigung und Beleidigungen?

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> Argumenten
Solchen bist du nicht zugänglich.

Siehe:
> Portabilität/Wiederverwendung

Der Frosch kenn nur das eine Lied...
Er wird nicht müde.

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Der Frosch kenn nur das eine Lied

Statt Deiner beleidigten Standard-Reaktion hätte ich zumindest mal 
bessere Assembler-Kenntnisse erwartet :)

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> bessere Assembler-Kenntnisse
Der Frosch fragt mit der Lüge nach der Wahrheit...

Sehr witzig/traurig.

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Ralf schrieb:
>> bessere Assembler-Kenntnisse
> Der Frosch fragt mit der Lüge nach der Wahrheit...
>
> Sehr witzig/traurig.

Inzwischen sollte damit sowohl Deine Hilf- wie Ahnungslosigkeit 
hinreichend dokumentiert sein.

Was ich traurig finde: Wenn der Nur-Hochsprachler immer weniger 
Verständnis dafür entwickelt was er "da unten" eigentlich programmiert.
Von der Frage abgesehen bis zu welcher Controller/Projektgröße 
Asm-Programmierung für den Einzelnen noch sinnvoll ist- traurig bleibt 
nicht minder wieviel Hochsprachen-verschenktes Controller-Protential mit 
immer übertriebeneren MHz heutzutage ausgeglichen wird.

von MCUA (Gast)


Lesenswert?

ich sagte nicht, dass es für deine Anwendung ZU langsam ist.
Manch einer würde das mit 'wohl' sortierten LBRs sicher auch mit 400ms 
Zykluszeit hinbekommen.
(nur bei ..ms muss ich immer an ne Großmutter denken, die einen Schal 
strickt)

von MCUA (Gast)


Lesenswert?

> toggelt Pin A0 nicht nur mit Maximal-Speed und Minimal-Flash.
Nur, was soll der Code?
Willst du für alle Ewigkeiten ein Pin toggeln?

von Klaus H. (klummel69)


Lesenswert?

EAF schrieb:
> Halbe Geschwindigkeit, und anstatt 6 Byte im Flash ganze 316 Byte im Flash.

 Danke, ich wollte mal wissen wie groß der Unterschied zw. CombiePin und 
DirectIO ist.

 Beide Varianten sind also etwas gleich, aber CombiePi für den Grenzfall 
Loop Toggling schneller.

von Cyblord -. (cyblord)


Lesenswert?

MCUA schrieb:
>> toggelt Pin A0 nicht nur mit Maximal-Speed und Minimal-Flash.
> Nur, was soll der Code?
> Willst du für alle Ewigkeiten ein Pin toggeln?

Eben. Sinnlose Challenge irgendwie Speicher zu sparen. Praktischer 
nutzen gleich null.

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> Ahnungslosigkeit

Ja, da hasst du mal wirklich Wahr!
Meine "Ahnungslosigkeit" ist hier im Forum, und auch woanders, recht gut 
dokumentiert.

Ralf schrieb:
> Was ich traurig finde: ... uvw ....
Machs besser, zeige es besser.
Halte dabei aber bitte
EAF schrieb:
> Portabilität/Wiederverwendung
Im Auge.

Kannst du nicht?
Ich finde, bei so einem Gequake könne auch ruhig mal was besseres 
kommen. Zeit zum üben scheinst du ja zu haben.

von Ralf (Gast)


Lesenswert?

Cyblord -. schrieb:
> Sinnlose Challenge irgendwie Speicher zu sparen. Praktischer nutzen
> gleich null.

Diese Challenge hatte just nicht ich gestartet. Es passte nun einfach 
nur dazu. Wichtig wären allerdings auch meine Randbemerkungen zu dem 
Thema gewesen, aber sowas fällt wohl schnell durchs Sieb der 
Aufmerksamkeit wenn man es nicht anders kennt.

von EAF (Gast)


Lesenswert?

Klaus H. schrieb:
> Beide Varianten sind also etwas gleich, aber CombiePi für den Grenzfall
> Loop Toggling schneller.

Der recht hohe Flash Verbrauch....

Dann zeigt ein Blick in den Code, dass die Pin Initialisierung im 
Konstruktor vorgenommen wird. Das scheint mir nicht unter allen 
Umständen ein guter Ansatz zu sein.

Zudem ist die Schnittstelle meines OutputPin etwas vielseitiger.
Hier mal ein Test, (als Interface/Syntax Check gedacht)
[c]
void checkOutputPin()
{
  bool p;
  OutputPin<13>().init();
  OutputPin<13> pin;
//  pin.initPullup();
  pin.init();
  p = pin = 1;
  p = pin;
  p = pin();
  pin(1);
  pin.set(1);
  p = pin.isHigh();
  pin.setHigh();
  pin.setLow();
//  p = pin.pressed();
//  p = pin.released();
  pin.toggle();
//  pin.on();
//  pin.off();

}

[/]
Die deaktivierten Methoden stehen für andere Pin Typen durchaus zur 
Verfügung.

von Klaus H. (klummel69)


Lesenswert?

EAF schrieb:
> Dann zeigt ein Blick in den Code, dass die Pin Initialisierung im
> Konstruktor vorgenommen wird. Das scheint mir nicht unter allen
> Umständen ein guter Ansatz zu sein.

Das ist tatsächlich ein Punkt, der mir nicht gefällt.

Hast Du den Code von CombiePin inzwischen irgendwo (git) gehostet?
Ich finde hier nur Zips ohne Versionsangaben.

von EAF (Gast)


Lesenswert?

Klaus H. schrieb:
> Hast Du den Code von CombiePin inzwischen irgendwo (git) gehostet?
Bisher nicht.
Ich finde, die "Reife" ist noch nicht ausreichend, insbesondere die 
Doku.
Auch ist eine Ereignisgesteuerte Variante in der Mache, dazu können noch 
durchgreifende Änderungen nötig sein.

Die CombiePin ist nur Teil einer größeren Sammlung, welche insgesamt auf 
eine/die Datenfluss Orientierung setzt. (CombieTools und CombieTimer 
gehören dazu)

Hier mal ein Link zu einer ausreichend frischen Version und auch gleich 
ein Beispiel, für das Datenfluss Drama.

Das Programm tut:
Nach jedem dritten Tastendruck zieht das Relais für 1 Sekunde an.
1
#include <CombieTools.h>
2
3
#include <CombieTimer.h>
4
#include <CombiePin.h>
5
6
#include <CombieTypeMangling.h>
7
using namespace Combie::Millis;
8
9
10
struct Counter
11
{
12
  int grenze;
13
  int count;
14
  bool operator=(bool b)
15
  {
16
    count += b;
17
    bool result {count >= grenze};
18
    count = result?0:count;
19
    return result;
20
  }
21
};
22
23
24
Counter                           count     {3,0};
25
//Combie::Pin::InvInputPin<2>        taster;  // invertierend
26
//Combie::Pin::InvOutputPin<9>       relais;  // invertierend
27
Combie::Pin::InputPin<2>          taster;
28
Combie::Pin::vOutputPin<9>        relais;
29
Combie::Timer::EntprellTimer      entprell  { 20_ms};     // taster entprellen
30
Combie::Timer::FallingEdgeTimer   toff      {1_Sekunde};  // fallende Flanke wird verzoegert
31
Combie::Tools::FlankenErkennung   flanke;
32
33
34
35
void setup(void)
36
{
37
  taster.initPullup();
38
// taster.init(); // ohne Pullup
39
  relais.init();
40
}
41
42
void loop(void)
43
{
44
  relais = toff = count = flanke = entprell = taster;
45
}

https://www.arduinoforum.de/attachment.php?aid=6556

von EAF (Gast)


Lesenswert?

EAF schrieb:
> Combie::Pin::vOutputPin<9>
Tippfehler!

Soll so aussehen:
Combie::Pin::OutputPin<9>

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Das Programm tut

...zeigen für was es die diskutierten "übertrieben schnellen 
Microcontroller" braucht?

Die Arduino-Werbung war ja immer, daß damit selbst Fachfremde und 
Künstler programmieren können. Das bestreite ich bei solchen Beispielen.

von Stefan F. (Gast)


Lesenswert?

Solange die geballte Power letztendlich Kosten senkt, kann man wohl kaum 
das Wort "übertrieben" nutzen.

von EAF (Gast)


Lesenswert?

Ach da ist es wieder, das quakende Fröschlein, im tief im (avr-ASM) 
Brunnen.

Ich erinnere:
EAF schrieb:
> Portabilität/Wiederverwendung
Kann das Fröschlein sowas?

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> Solange die geballte Power letztendlich Kosten senkt, kann man wohl kaum
> das Wort "übertrieben" nutzen.

"Kosten" sind ein weites Feld, zunächst mal ging es hier um "übertrieben 
schnell".

EAF schrieb:
> Kann das Fröschlein sowas?

Ein ErbärmlichesAssemblerFröschlein
kann nur sowas :)

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> kann nur sowas

Ja dann, zeige mal, wie das bei dir aussieht, aber dann bitte für 3 
Prozessorfamilien.
z.B. AVR ARM Xtensa RISC-V

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Ja dann, zeige mal, wie das bei dir aussieht, aber dann bitte für 3
> Prozessorfamilien.
> z.B. AVR ARM Xtensa RISC-V

Also E wie Erbärmlich ist ja schon sehr passend aber E wie Eingebildet 
find ich jetzt fast noch dringlicher!

von EAF (Gast)


Lesenswert?

Ihm tut es nicht!
Ihm kann es nicht?!?!

Ich kann dir beweisen, dass es auf den genannten 4 Typen unverändert 
läuft.
(evtl. Pin Nr anpassen)
Wenn du das für Eingebildet hältst, dann hast du die Semantik des Wortes 
Eingebildet nicht verstanden.

Möchtest du gerne wissen, wie ich Leute nenne, welche viel Schaum 
schlagen, aber es sonst nicht bringen?

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Ich kann dir beweisen

Wie E = Einfältig bist Du eigentlich um Dich hier beim Thema "Wozu 
übertrieben schnelle Controller" jetzt unbedingt "beweisen" zu müssen???

Es sei denn mit warnendem hochsprachigem Beispielcode der übertrieben 
Performance versenkt...

Mich interessieren im Rahmen dieses Threads kein überhebliches Ego- 
Rumgehampel sondern allein sachliche Gründe für immer mehr MC-Speed.

Was Dich sicher nicht interessiert sind meine Asm-Lösungen, schon weil 
Dir dafür nachgewiesenermaßen jedes Verständnis fehlt.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Arduino I/O ist übrigens ein schönes Beispiel wieviel Performance in
> Software-Abstraktionen hängenbleiben kann :)

Arduino I/O ist übrigens ein schönes Beispiel dafür, wie man 
Software-Abstraktionen maximal falsch macht, sodass die Auflösung zur 
Laufzeit geschieht.

Eine vernünftige API würde das alles zur Compilezeit machen.

Zero-Cost-Abstractions sind sogar oft in C möglich.

von Klaus H. (klummel69)


Lesenswert?

Leutens kommt mal wieder runter.
Ich frage mich immer warum es hier so schnell beleidigend wird oder man 
"meint" es sei beleidigend gemeint.

In dem Sinn, sorry, dass ich den Thread kurz gekapert hab mit Fragen um 
CombiePin und DirectIO. Hat mich halt interessiert. Hat aber mit der 
Frage "Wozu übertrieben schnelle Microcontroller?" nicht viel zu tun.

Bei meinen beruflichen Projekte wurden immer alle Faktoren gewichtet:
* Benötigte Performance / Speicher
* Erfahrungen der Entwickler
* Marktverfügbarkeit
* Unterstützte Tools, vorhandene Tools
* Unterstützte Libraries / COTS
* Erfahrungen über Zuverlässigkeit der Prozessoren
* Terminschiene
* u.a.

Und oft hatten die größeren 32/64Bit Teile bei einem Vergleich mehr 
Pluspunkte als die kleinen.

Oft waren die Entwicklerkosten der größte Kostenfaktor.
Dann waren die Bauteilkosten unwichtig.


Wenn ich als edler Ritter die Ehre kleiner MCU verteidigen will,
mach ich das in der Freizeit. Das kostet mich nicht mein Ansehen
in der Firma.... nur im Ansehen meiner Frau wenn ich mal wieder
zu lange in der Werkstatt saß...

von Klaus H. (klummel69)


Lesenswert?

MaWin schrieb:
> Arduino I/O ist übrigens ein schönes Beispiel dafür, wie man
> Software-Abstraktionen maximal falsch macht, sodass die Auflösung zur
> Laufzeit geschieht.

Natürlich ist die Umsetzung mist. Aber sie funktioniert, in 90% der 
Fälle reicht die Performance auch.

Ihr überseht eine Sache:

Manchmal entwickelt man ein Programm/Lib und stellt später fest:
"mist, geht besser". Hab ich closed source ist das einfach.

Hat man aber ein Interface auf die Welt losgelassen, und das Teil geht 
durch die Decke, hat man imense Probleme es wieder gerade zu biegen.

Siehe Python 2 + 3.
Was haben die Prügel bekommen für Python 3, obwohl man es gut gemeint 
hat.

von Ralf (Gast)


Lesenswert?

Klaus H. schrieb:
> oder man
> "meint" es sei beleidigend

Erstmal den Selbsttest machen :)

> Und oft hatten die größeren 32/64Bit Teile bei einem Vergleich mehr
> Pluspunkte als die kleinen.

Daran wird hier keiner zweifeln.
Und doch wird schon jemand die weiter steigenden 8Bitter 
Produktionszahlen abnehmen. Ohne Angst um sein Ansehen.

> Hat man aber ein Interface auf die Welt losgelassen, und das Teil geht
> durch die Decke

Arduino erteilte der IT-Welt ein weiteres Mal die Lehre:
Keep it simple - dann findet es auch große Resonanz!
In dem Falle geht Einfachheit über den Performanceverlust,
wenn denn die gewünschte Funktionalität noch gewährleistet ist.

von Gerhard O. (gerhard_)


Lesenswert?

Eine verdiente Ode auf Arduino!

Ich bin der Meinung, daß die Arduinobewegung die Welt hauptsächlich in 
positiver Weise bereichert hat.

Jeder hat die Möglichkeit, je nach seinem Kenntnisstand mehr oder 
weniger herauszuholen. Jedem ist die Möglichkeit gegeben nach eigenen 
Ermessen, so tief wie gewollt oder nötig, hineinzutauchen.

Jeder kann in die Datenblätter schauen um die grausigen Details zu 
sichten:-)

Dank der großen User Community ist man bei Problemen nicht auf sich 
Alleine gestellt und bekommt mehr oder weniger Hilfe in diversen Foren 
und Webpräsenzen.

Als schnelle "Entwicklungshilfe" ist das Konzept unübertreffbar. Das 
wird seit Neuesten auch durch die Halbleiterhersteller bewiesen, die 
Zubehör zum schnellen Testen bereitstellen und darf oft als Referenz 
Design dienen.

Was mich betrifft, bin ich froh, diese Möglichkeiten zu haben. Früher, 
in PIC-Zeiten mußte ich für jedes neues Projekt etwas zusammenbauen, LP 
entwerfen, bestücken u.s.w. Heute reiche ich in die Schublade, hole 
einen Nano oder Pro-Mini heraus, schließe die nötige Peripherie an und 
kann Dank einer unproblematischen IDE gleich loslegen. Was könnte also 
schöner sein auf Erden als mit Arduino zu "Werden":-)

Dank der verschiedensten Plattformen, kann man sich auch die uC 
Leistungsklassen wählen.

Im vergleich zu früheren 8051 Zeiten, sind auch die Instruktionszyklen 
eines AVR328 unvergleichlich kürzer.

Ich bin also fast restlos glücklich! Das mußte mal gesagt werden. Ich 
wünschte, ich wäre als Junge heute mit diesen Ressourcen aufgewachsen. 
Ich mußte mich, Ära bedingt, noch mit Röhren und Transistoren 
herumschlagen. Radiotechnik war "In". Ohne Internet, mußte man sich zum 
Lernen mit den diversen zugänglichen Bibliotheken begnügen. Datenbücher 
waren für Normalsterbliche kaum beziehbar. Komponenten waren für magere 
Taschengeldkassen schmerzhaft teuer. Das waren also die "guten, alten 
Zeiten". Hmmm...

Gruß,
Gerhard

von Ralf (Gast)


Lesenswert?

Gerhard O. schrieb:
> Das waren also die "guten, alten
> Zeiten

Das war die typisch technikromantisch verklärte Gerhard-Beschau von der 
guten alten Zeit bis in die Gegenwart! Immer ein Genuss!

von Gerhard O. (gerhard_)


Lesenswert?

Ralf schrieb:
> Gerhard O. schrieb:
>> Das waren also die "guten, alten
>> Zeiten
>
> Das war die typisch technikromantisch verklärte Gerhard-Beschau von der
> guten alten Zeit bis in die Gegenwart! Immer ein Genuss!

Gern geschehen. Es war mir ein Vergnügen:-)

von MCUA (Gast)


Lesenswert?

> Ich bin also fast restlos glücklich!
Mit was?
Arduino-Spielzeug setzt keiner professionell ein und ich hätte es auch 
vor 20 oder 30 Jahren nicht eingesetzt.
Auch da gab es richtige (RT)OSe und auch da konnte man sich passende 
Code selbst schreiben (zugegeben mit hohem Debug-Aufwand).

von Stefan F. (Gast)


Lesenswert?

MCUA schrieb:
> Arduino-Spielzeug setzt keiner professionell

Dann ist er halt nicht professionell. So what? Muss jeder professionell 
sein? Meine Frau ist es auch nicht, und das soll auch so bleiben.

von Stefan F. (Gast)


Lesenswert?

Enge Schuhe sind in vielen Punkten schlecht, größere Schuhe sind besser. 
Mit übertrieben großen Schuhen würde man jedoch stolpern.

Aber wie kann die Geschwindigkeit eines Mikrocontrollers übertrieben 
sein? Wo ist das ein Hindernis? Wer trauert ernsthaft langsamen 
Mikrocontrollern nach?

von MCUA (Gast)


Lesenswert?

> Meine Frau ist es auch nicht,
Da ist das was anderes.
Und Schuhe sind keine uCs
(oder zählen dort die Löcher als Bits?)

von Stefan F. (Gast)


Lesenswert?

MCUA schrieb:
> Und Schuhe sind keine uCs

Ich habe diese Metapher benutzt, um das Wort "übertrieben" zu erklären. 
In diesem langen Thread fehlt immer noch die Klarstellung, was an einem 
schnellen Mikrocontroller übertrieben sein kann.

Wo wirkt sich die hohe Taktfrequenz schlecht aus?

von Peter D. (peda)


Lesenswert?

Gerhard O. schrieb:
> Im vergleich zu früheren 8051 Zeiten, sind auch die Instruktionszyklen
> eines AVR328 unvergleichlich kürzer.

Naja, Atmel hat die 8051 aber auch gepimpt. Z.B. ein AT89LP51RD2 braucht 
sich da nicht zu verstecken, der kann bis 20MIPS und 16*16Bit MUL. Auch 
kann er mit 4 Interruptleveln und SPI-Sendepuffer punkten.
Die Anzahl der UARTs reißt einen aber nicht vom Hocker und das I2C macht 
Probleme als Multimaster. CAN fehlt leider.

von Rolf M. (rmagnus)


Lesenswert?

Stefan F. schrieb:
> In diesem langen Thread fehlt immer noch die Klarstellung, was an einem
> schnellen Mikrocontroller übertrieben sein kann.
>
> Wo wirkt sich die hohe Taktfrequenz schlecht aus?

Schneller heißt nicht unbedingt höherer Takt. Eigentlich wurde aber 
alles schon genannt: Allgemein bringen schnellere µCs oft (wenn auch 
nicht zwingend immer) einen höheren Leistungsverbrauch mit sich, eine 
höhere Komplexität, ggf. eingeschränkte Robustheit (Spannungsversorgung, 
I/O-Pins), einen höheren Preis. Wäre dem nicht so, dann gäbe es nur noch 
extrem schnelle µCs.

von Stefan F. (Gast)


Lesenswert?

Rolf M. schrieb:
> Allgemein bringen schnellere µCs oft (wenn auch
> nicht zwingend immer) einen höheren Leistungsverbrauch mit sich

Das stimmt doch gar nicht so pauschal.

> einen höheren Preis

Auch da gibt es Gegenbeispiele.

> eine höhere Komplexität

Es gibt einfache 32 Bit Controller und komplexe 8 Bit Controller. 
Tendenziell stimme ich dir zu, aber nicht pauschal.

>  ggf. eingeschränkte Robustheit

Das lasse ich mal so mangels Erfahrung stehen. Mir ist noch kein STM32 
und kein ESP8266 kaputt gegangen, aber das heißt nicht viel.

Für "übertrieben schnell" reichen mir deine Argumente jedoch nicht. Da 
könnte man andere genau so gut als "unnötig langsam" bezeichnen, weil es 
schnelle Mikrocontroller gibt, die

- sogar weniger Strom aufnehmen
- billiger sind
- ähnlich schwer oder leicht programmierbar sind
- robust genug sind

von Peter D. (peda)


Lesenswert?

EAF schrieb:
> Das Programm tut:
> Nach jedem dritten Tastendruck zieht das Relais für 1 Sekunde an.

Super, daß dieser Kommentar notwendig ist.
Die Funktion muß man sich also umständlich aus haufenweise Definitionen 
viele Zeilen früher zusammen reimen. Der Code in der Loop ist dafür 
absolut nichtssagend.
So stelle ich mir einen gut lesbaren Programmablauf nicht vor.

Ich bevorzuge daher sprechenden Code, d.h. die Aktionen stehen genau an 
der Stelle, wo sie passieren sollen.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Stefan F. schrieb:
> Rolf M. schrieb:
>> Allgemein bringen schnellere µCs oft (wenn auch
>> nicht zwingend immer) einen höheren Leistungsverbrauch mit sich
>
> Das stimmt doch gar nicht so pauschal.

Was and "oft (wenn auch nicht zwingend immer)" hast du nicht verstanden?

> Für "übertrieben schnell" reichen mir deine Argumente jedoch nicht.

Dann erkläre mir doch mal, warum es überhaupt noch die langsameren µCs 
gibt, wenn diese Gründe alle nicht zählen.

> Da könnte man andere genau so gut als "unnötig langsam" bezeichnen, weil
> es schnelle Mikrocontroller gibt, die
>
> - sogar weniger Strom aufnehmen
> - billiger sind
> - ähnlich schwer oder leicht programmierbar sind
> - robust genug sind

Klar mag es auch den einen oder anderen µCs geben, der das alles 
gleichzeitig bietet. Dann spricht ja auch technisch nichts dagegen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Rolf M. schrieb:
> Dann erkläre mir doch mal, warum es überhaupt noch die langsameren µCs
> gibt, wenn diese Gründe alle nicht zählen.

Beide (schnelle und langsame) haben ihre Existenzberechtigung. Deswegen 
wehre ich mich gegen das Wort "übertrieben". In meiner Bastelkiste 
liegen sie friedlich nebeneinander und keiner wird vernachlässigt.

von Rolf M. (rmagnus)


Lesenswert?

Stefan F. schrieb:
> Rolf M. schrieb:
>> Dann erkläre mir doch mal, warum es überhaupt noch die langsameren µCs
>> gibt, wenn diese Gründe alle nicht zählen.
>
> Beide (schnelle und langsame) haben ihre Existenzberechtigung.

Da sind wir einer Meinung. Aber du akzeptierst ja alle Gründe, die gegen 
den schnelleren µC sprechen könnten, nicht. Deshalb die Frage: Was ist 
für dich die Existenzberechtung der langsameren µCs?

> Deswegen wehre ich mich gegen das Wort "übertrieben".

Für mich ist er "übertrieben schnell", wenn er erheblich schneller ist 
als für die Anwendung benötigt und dabei gleichzeitig einen oder mehrere 
der genannten Nachteile gegenüber einem langsameren, aber immer noch 
ausreichend schnellen µC hat. Wenn er keine Nachteile hat, ist er 
vielleicht unnötig schnell, aber nicht übertrieben schnell.

> In meiner Bastelkiste liegen sie friedlich nebeneinander und keiner wird
> vernachlässigt.

Ist bei mir so ähnlich, nur dass aktuell alle vernachlässigt werden :(

: Bearbeitet durch User
von EAF (Gast)


Lesenswert?

Peter D. schrieb:
> So stelle ich mir einen gut lesbaren Programmablauf nicht vor.

Das ist dir umgenommen!

Deiner Rede entnehme ich, dass du ein prozedural denkender Mensch bist.
Für dich also der Kontrollfluss das bestimmende "Ding" ist.
Gemalt werden Kontrollflussdiagramme.

Ich vergleiche es mal vorsichtig mit der AWL im SPS Bereich. Mit der 
lässt sich genau das abbilden.


Dieses meine Programm, welches du da kritisierst, geht einen anderen 
Weg. Es werden erst alle Komponenten erschaffen, welche dann im  loop() 
miteinander kommunizieren. Die Schnittstelle zwischen den Komponenten 
ist bewusst einfach gehalten. Auch die Komponenten selber. Eine 
Komponente ein Job.
Der OOPler malt UML Diagramme.

In der OOP hat man auch noch mit dem Kontrollfluss zu tun. Allerdings 
fast ausschließlich, und sehr kleinteilig, nur in den Methoden. 
Komplexität bleibt hinter einfachen Schnittstellen verborgen.

Auch das findet man im SPS Bereich in Koppelplänen wieder. 
Funktionsbausteine, welche durch einfache Linien verbunden werden. Bei 
mir sinds halt die Zuweisungen, das ist der einzige Operator, welche 
diese Funktionsweise in C++ abbilden kann.
1
void loop(void)
2
{
3
   relais = toff = count = flanke = entprell = taster;
4
}

Der Datenfluss erfolgt von rechts nach links.
Viel viel eindeutiger wird man es in keiner Sprache abbilden können.

Peter D. schrieb:
> sprechenden Code
Das ist sprechender Code.
Das ist wieder verwendbarer Code.
Das ist sogar portabler Code. (läuft auf allen Arduinos dieser Welt[?])

Und wenn die Komponenten vorbereitet und ausreichend getestet sind, ist 
die Programmentwicklung rasend schnell. Gerade für so einfache 
Problemstellungen.


Gut, ich akzeptieren dass dir sowas nicht schmeckt.

Darf ich daraus ableiten, dass dir OOP bzw C++ insgesamt nicht schmeckt?
Wenn ja, dann sehe ich deine Kritik nicht wirklich als Kritik an meinem 
Programm, sondern allgemein an der OOP, denn aus dem Pool der 
Möglichkeiten habe ich mich hier intensiv bedient.
Also als eine Kritik an meiner Denkweise, welche offensichtlich nicht in 
allen Belangen mit deiner kompatibel ist.

von Zeno (Gast)


Lesenswert?

MCUA schrieb:
> Arduino-Spielzeug setzt keiner professionell ein und ich hätte es auch
> vor 20 oder 30 Jahren nicht eingesetzt.
> Auch da gab es richtige (RT)OSe und auch da konnte man sich passende
> Code selbst schreiben (zugegeben mit hohem Debug-Aufwand).
Ja und? Der Weg ist halt das Ziel. Am Ende zählt das Ergebnis und wenn 
das passt ist doch alles in Ordung, da fragt dann keiner wie es 
realisiert wurde. Manchmal liegt die Professionalität in der 
Einfachheit, gerade dann wenn man erst einmal die Machbarkeit eines 
Denkansatzes prüfen möchte. Danach kann man es immer noch 
"professionell" machen, ob's dann besser ist steht allerdings auf einem 
anderen Blatt.

von Stefan F. (Gast)


Lesenswert?

Rolf M. schrieb:
> Aber du akzeptierst ja alle Gründe, die gegen
> den schnelleren µC sprechen könnten, nicht.

Hmm, du hast Recht dass meine Argumentation danach aussieht.

Es ist schon so, dass ich für einfache kleine Aufgaben meine einfachen 
kleinen 8 Bit Controller bevorzuge. Für eine LED Blinker verwende ich 
lieber ein Arduino Nano Board als ein BluePill, selbst wenn der Preis 
gleich wäre. Es ist dann allerdings nicht die "übertriebene" 
Geschwindigkeit, die mich abhält, sondern die Komplexität.

Der TO hat nach übertriebener Geschwindigkeit gefragt (der ich 
widerspreche), aber die Diskussion dreht sich in wesentlichen Teilen um 
übertriebene Komplexität (der ich zustimme).

von EAF (Gast)


Lesenswert?

Teil 2:

Peter D. schrieb:
> EAF schrieb:
>> Das Programm tut:
>> Nach jedem dritten Tastendruck zieht das Relais für 1 Sekunde an.
>
> Super, daß dieser Kommentar notwendig ist.

Es kann doch nicht sein, dass du mir zum Vorwurf machst, dass ich in 
einem Satz beschreibe, was das Ziel des Programms ist.


Eigentlich erwarte ich von Kritikern, dass sie es besser können.
Auch von dir erwarte ich das.


Hier mit möchte ich dich bitten mir zu zeigen, wie du diese Aufgabe 
erfüllen würdest.
Ich möchte die Lösungen gerne vergleichen.
Schön wäre es, wenn auch gleich ein paar µC Familien abgedeckt werden.

Das verleiht deiner Kritik Substanz.

von Rolf M. (rmagnus)


Lesenswert?

Stefan F. schrieb:
> Der TO hat nach übertriebener Geschwindigkeit gefragt (der ich
> widerspreche), aber die Diskussion dreht sich in wesentlichen Teilen um
> übertriebene Komplexität (der ich zustimme).

Ja, wenn man die Geschwindigkeit nur einzeln, ganz losgelöst von anderen 
Attributen betrachtet, gibt's eigentlich kein "übertrieben schnell". Nur 
meist sind sie eben nicht so ganz losgelöst.
Wobei ich den Eindruck habe, dass es für den TO einfach bedeutet, dass 
er sich gar nicht vorstellen kann, dass man einen so schnellen µC 
überhaupt je brauchen könnte.

EAF schrieb:
> Das ist sprechender Code.

Das finde ich nicht.

> Gut, ich akzeptieren dass dir sowas nicht schmeckt.
>
> Darf ich daraus ableiten, dass dir OOP bzw C++ insgesamt nicht schmeckt?

Ich kann jetzt nicht für Peter sprechen, aber mir "schmeckt" das auch 
nicht. Das liegt aber weder an C++, noch an OOP an sich, sondern an der 
Operator Abuse. Der Operator = ist in C++ für einen ganz bestimmten 
Zweck vorgesehen, und du verwendest ihn mit einer völlig anderen 
Semantik.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Rolf M. schrieb:
> Der Operator = ist in C++ für einen ganz bestimmten
> Zweck vorgesehen, und du verwendest ihn mit einer völlig anderen
> Semantik.

OOP ja, aber damit könnte ich mich auch nicht anfreunden. Vielleicht 
eher der '<<' Operator, der wird in Streams ja auch zur Verkettung 
genutzt. Aber nein, auch nicht wirklich.

Trotzdem sieht es irgendwie interessant aus.

von Gerd (Gast)


Lesenswert?

MCUA
>Arduino-Spielzeug setzt keiner professionell ein und ich hätte es auch
>vor 20 oder 30 Jahren nicht eingesetzt.

Oh doch, ich für's Rapid Prototyping. Und ziemlich viele Profis, die ich 
kenne, ebenso. Profi heißt für mich: 10 Jahre+ Erfahrung in der 
Elektronikentwicklung. Und ich klopfe jedem auf die Finger, der mir zu 
umständlich anfängt.

von EAF (Gast)


Lesenswert?

J. S. schrieb:
> Vielleicht
> eher der '<<' Operator, der wird in Streams ja auch zur Verkettung
> genutzt.

Das habe ich probiert, das funktioniert nicht.
<< schieben
<< Ausgabe Verkettung
Und dann noch Datenfluss Verkettung?

Auch die anderen Operatoren nicht...
Bin allerdings für Vorschläge offen. Auch für mich ist = ein Kompromiss, 
bisher allerdings ohne gangbare Alternative.

Rolf M. schrieb:
> Der Operator = ist in C++ für einen ganz bestimmten
> Zweck vorgesehen, und du verwendest ihn mit einer völlig anderen
> Semantik.
1
uint32_t a = 34656322;
2
uint16_t b;
3
uint8_t  c;
4
bool d;
5
6
d = c = b = a;

a,b,c und d sind ganz naive Komponenten.
Die Zuweisung ändert den inneren Zustand der Komponente.
Die Zuweisung gibt den inneren Zustand der Komponente weiter.
Bei dem primitiv Beispiel erfolgen automatische Casts.
In meinem Fall ist das innere der Komponenten für die Funktionalität 
zuständig.

In beiden Fällen erfolgen Transformationen der Daten.
Da sind also durchaus Gemeinsamkeiten.

Welcher Operator ist besser geeignet?

von EAF (Gast)


Lesenswert?

Rolf M. schrieb:
> aber mir "schmeckt"

Count leicht erweitert:
1
struct Counter
2
{
3
  int grenze;
4
  int count;
5
  bool doTrigger(bool b)
6
  {
7
    count += b;
8
    bool result {count >= grenze};
9
    count = result?0:count;
10
    return result;
11
  }
12
13
  bool operator=(bool b)
14
  {
15
    return doTrigger(b);
16
  }
17
};


Dann ist folgende alternative Schreibweise möglich, vielleicht macht die 
dich ja zufriedener....
1
void loop(void)
2
{
3
  // relais = toff = count = flanke = entprell = taster;
4
  relais.set(toff.doTrigger(count.doTrigger(flanke.doTrigger(entprell.doTrigger(taster.isHigh())))));
5
}
Möglich ja, aber für schöner oder übersichtlicher, halte ich das nicht.
Mehr Schreibarbeit, und doofe Klammerverwirrungen drohen.

von Cyblord -. (cyblord)


Lesenswert?

EAF schrieb:
>
1
> void loop(void)
2
> {
3
>   // relais = toff = count = flanke = entprell = taster;
4
>   relais.set(toff.doTrigger(count.doTrigger(flanke.doTrigger(entprell.doTrigger(taster.isHigh())))));
5
> }
6
>
> Möglich ja, aber für schöner oder übersichtlicher, halte ich das nicht.
> Mehr Schreibarbeit, und doofe Klammerverwirrungen drohen.

Hier kann man nur noch die "Clean Code" Bücher von Uncle Bob empfehlen. 
Wenn nicht alles zu spät ist.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> Der TO hat nach übertriebener Geschwindigkeit gefragt (der ich
> widerspreche), aber die Diskussion dreht sich in wesentlichen Teilen um
> übertriebene Komplexität (der ich zustimme).

Übertriebene Geschwindigkeit braucht es für Software die übertrieben 
Ressourcen verschwendet. Arduino-Software etwa profitiert sehr davon. 
Was ist daran nicht zu verstehen?

Stefan F. schrieb:
> Wo wirkt sich die hohe Taktfrequenz schlecht aus?

EMV und Stromverbrauch, m.E. auch auf den Preis. Das sollte Dir doch 
bekannt sein.

MCUA schrieb:
> Arduino-Spielzeug setzt keiner professionell ein

Schon die Begriffswahl "Spielzeug" scheint auf einen Entwickler 
hinzudeuten bei dem hohe System-Komplexität und Selbstwertgefühl wohl 
etwas zu stark korrelieren.

von Peter D. (peda)


Lesenswert?

EAF schrieb:
> void loop(void)
> {
>   relais = toff = count = flanke = entprell = taster;
> }

Mein Hauptkritikpunkt ist, daß man sich darunter nichts vorstellen kann, 
die Wörter sind zu allgemein. Z.B. welche Flanke?
Ich würde schon wollen, daß man wenigstens ungefähr sieht, was passiert.

Was passiert eigentlich, wenn man die Taste innerhalb der 1s wieder 3* 
drückt. Wird das ignoriert oder zieht das Relais 2s lang?

von Gerhard O. (gerhard_)


Angehängte Dateien:

Lesenswert?

Gerd schrieb:
> MCUA
>>Arduino-Spielzeug setzt keiner professionell ein und ich hätte es auch
>>vor 20 oder 30 Jahren nicht eingesetzt.
>
> Oh doch, ich für's Rapid Prototyping. Und ziemlich viele Profis, die ich
> kenne, ebenso. Profi heißt für mich: 10 Jahre+ Erfahrung in der
> Elektronikentwicklung. Und ich klopfe jedem auf die Finger, der mir zu
> umständlich anfängt.

Richtig. Die Mechatronics LP im Anhang wurde anfänglich auch mit einem 
MEGA2560 Arduino ins Leben gerufen und ist nur schwer daran zu erkennen. 
Ist das so schlimm?

: Bearbeitet durch User
von MCUA (Gast)


Lesenswert?

> Oh doch, ich für's Rapid Prototyping. Und ziemlich viele Profis, die ich
> kenne, ebenso.
Und die haben welche Anwendung?
Blinklicht?

von Gerhard O. (gerhard_)


Lesenswert?

Peter D. schrieb:
> Gerhard O. schrieb:
>> Im vergleich zu früheren 8051 Zeiten, sind auch die Instruktionszyklen
>> eines AVR328 unvergleichlich kürzer.
>
> Naja, Atmel hat die 8051 aber auch gepimpt. Z.B. ein AT89LP51RD2 braucht
> sich da nicht zu verstecken, der kann bis 20MIPS und 16*16Bit MUL. Auch
> kann er mit 4 Interruptleveln und SPI-Sendepuffer punkten.
> Die Anzahl der UARTs reißt einen aber nicht vom Hocker und das I2C macht
> Probleme als Multimaster. CAN fehlt leider.

Silicon Labs hat auch ein interessantes Angebot an sehr "schnellen" 
8051ern und CAN. Mit dem AT89LP51RD2 machte ich vor Jahren aus Interesse 
übrigens auch ein Projekt. Funktionierte damals echt gut. Mit uV2 ließ 
sich angenehm arbeiten.

von Gerhard O. (gerhard_)


Lesenswert?

MCUA schrieb:
>> Oh doch, ich für's Rapid Prototyping. Und ziemlich viele Profis,
> die ich
>> kenne, ebenso.
> Und die haben welche Anwendung?
> Blinklicht?

Ich möchte Dir nicht wirklich auf die Zehen treten, kann aber Deine 
negative Einstellung über Arduino nicht ganz nachvollziehen. Fast jeder 
hat mit einfachen Sachen angefangen. Sei froh wenn Du Lichtjahre weiter 
voran bist und uns "mittelmäßige Verfechter" Deinen Staub atmen läßt:-)

Wie heißt das Sprichwort so schön:

"Dumm darf man ja sein, nur zu helfen muß man sich wissen"

In diesen Sinn, Euch allen ein angenehmes Wochenende!

Gruß,
Gerhard

von MCUA (Gast)


Lesenswert?

> Naja, Atmel hat die 8051 aber auch gepimpt. Z.B. ein AT89LP51RD2 braucht
> sich da nicht zu verstecken,
Ich wüsste nicht, aus welchem Grund man den heute noch einsetzen sollte.
Dieses Dingen hat (ausser einer schlechten CPU) nichts, was andere auch 
haben.


> In der OOP hat man auch noch mit dem Kontrollfluss zu tun. Allerdings
> fast ausschließlich, und sehr kleinteilig, nur in den Methoden.
Ja, Nur diese OOP fressen (oft) zu viel Speicher und bremsen tun sie 
auch noch (z.T. soweit, dass es nicht mehr funkt.).
Damit bist du hier in der Minderheit.
(bei typ. PC-Programmen (die allerdings bei weitem nicht so schnell 
reagieren brauchen) ist das was anderes)


> Der TO hat nach übertriebener Geschwindigkeit gefragt
Es gibt keine übertriebene Geschwindigkeit; man kann es langsamer 
takten.
Und dass Architektur nicht Frequenz ist, hab ich oben schon geschrieben.

von MCUA (Gast)


Lesenswert?

> Fast jeder hat mit einfachen Sachen angefangen.
Und?
Man kann das ja machen, indem man einen uC programmiert (auch indem man 
ein Manual l-i-e-s-t (oh, was hab ich jetzt gesagt?)), statt auf einer 
Spielzeug-IDE mit KLICKI-BUNTI rumzuklimpern.

von Ralf (Gast)


Lesenswert?

MCUA schrieb:
> statt auf einer Spielzeug-IDE mit KLICKI-BUNTI rumzuklimpern

So das haben jetzt hoffentlich alle verstanden. Keep it complicated!

Beitrag #7280230 wurde von einem Moderator gelöscht.
von W.S. (Gast)


Lesenswert?

Klaus H. schrieb:
> Leutens kommt mal wieder runter.
> Ich frage mich immer warum es hier so schnell beleidigend wird oder man
> "meint" es sei beleidigend gemeint.

Ganz einfach: Weil hier keiner auf dem Teppich bleibt, sondern ein jeder 
den anderen übertreffen will. Dabei ist man ganz schnell aus der Ebene 
der vernünftigen Argumente heraus - und was übrig bleibt, sind 
gegenseitige Beleidigungen.

Irgendwie erinnert mich das Ganze an das innere Motto der 
"Monkey-Islands"-Spiele: die Suche nach der ultimativen Beleidigung.

Naja, sich gegenseitig "du bist ja doof" an die Köpfe zu werfen, ist 
gesundheitlich weniger bedenklich als wenn man zum Werfen die 
ausgetrunkenen Bierseidel benützt.

Aber beides ist ein bissel einfallslos. Es zeigt eigentlich bloß, daß 
die Leute, die das Durchnumerieren ihrer Pins oder gar das Fassen in 
Objekte als grandiose HAL ansehen und mit Hingabe verteidigen, eben 
herzlich wenig mit jeglicher Hardware zu tun haben wollen. Programmierer 
eben, die am ehesten glücklich wären, wenn es nur Programme und keine 
Hardware gäbe.

Auch dazu fällt mir eine Anekdote ein: In einem Groschenroman "Doktor 
Ahoi" (bzw. 'Doctor at sea') kam auch ein Jornalist an Bord des 
Vergnügungsdampfers vor, der die Bord-Zeitung herausgab: 15 Seiten über 
Baseball, 1/2 Seite über das Wetter und der Rest über das Weltgeschehen 
und Impressum.

Ist eben alles nur eine Frage der Perspektive.

W.S.

von Gerhard O. (gerhard_)


Lesenswert?

MCUA schrieb:
>> Naja, Atmel hat die 8051 aber auch gepimpt. Z.B. ein AT89LP51RD2
> braucht
>> sich da nicht zu verstecken,
> Ich wüsste nicht, aus welchem Grund man den heute noch einsetzen sollte.
> Dieses Dingen hat (ausser einer schlechten CPU) nichts, was andere auch
> haben.
Ich fürchte, das ist Ansichtssache. Ob der CPU schlecht ist, möchte ich 
nicht beurteilen. Fakt ist, daß diese CPU Type einen langen Stammbaum 
hat und total verstanden ist. Die Bugs wurden schon vor langer Zeit 
eliminiert, was aber nicht unbedingt auf die uC Peripherie zutreffen 
muß. Ich kann mir durchaus vorstellen, daß es für diese Sparte noch 
bevorzugte Anwendungsgebiete gibt.
>
>> In der OOP hat man auch noch mit dem Kontrollfluss zu tun. Allerdings
>> fast ausschließlich, und sehr kleinteilig, nur in den Methoden.
> Ja, Nur diese OOP fressen (oft) zu viel Speicher und bremsen tun sie
> auch noch (z.T. soweit, dass es nicht mehr funkt.).
> Damit bist du hier in der Minderheit.
> (bei typ. PC-Programmen (die allerdings bei weitem nicht so schnell
> reagieren brauchen) ist das was anderes)
Ich sehe für viele Anwendungen nichts Falschen im prozedurealen Denken 
und Design. Es gibt viele Menschen (und ich zähle mich dazu) denen OOP 
Denken schwer fällt. Was ist daran so schlimm? Viele Wege kommen von 
Rom.
>
>> Der TO hat nach übertriebener Geschwindigkeit gefragt
> Es gibt keine übertriebene Geschwindigkeit; man kann es langsamer
> takten.
> Und dass Architektur nicht Frequenz ist, hab ich oben schon geschrieben.
Naja, da muß man sich schon am Anfang Gedanken machen. Wer langsame 
Reaktionen braucht kann das ja mit State machines auf den schnellsten 
CPUs machen. Dann funktioniert auch Gleichzeitigkeit besser. Schon 
alleine aus dem Grund empfiehlt sich ein schneller CPU.

Wenn maximale Stromökonomie und niedrige Betriebsspannung gefragt ist, 
gelten natürlich andere Gesichtspunkte.

Beitrag #7280239 wurde von einem Moderator gelöscht.
von W.S. (Gast)


Lesenswert?

Stefan F. schrieb:
> verwende ich lieber ein...

Nun ja, das ist der Bereich der Liebhaberei bzw. Hobby.
Professionell ist was anderes, da zählen andere Dinge, denn am 
Monatsende sollte soviel Geld hereingekommen sein, daß es auch für die 
berüchtigte Lohntüte ausreicht. Sowas wird von gewöhnlichen 
Programmierern fast nie gesehen, die schwelgen lieber in irgendwelchen 
Details ihrer Lieblings-Programiersprache und glauben, sie seien so 
toll, daß genau deswegen ihr Salär eigentlich viel höher sein müßte 
als es ist.

Ich kann das alles durchaus verstehen, aber der Inhalt der Lohntüte ist 
schlußendlich auch wichtig - und zwar für alle, nicht nur für den 
Code-Knecht.

W.S.

von M. K. (sylaina)


Lesenswert?

Ich frage mich ja, wenn ich die Argumentation von einigen hier so 
anschaue, warum überhaupt noch Mikroprozessoren mit weniger als 64 bit 
eingesetzt werden. Hat doch alles keine Sinn so lahme Krücken 
einzusetzen...

von Rolf M. (rmagnus)


Lesenswert?

EAF schrieb:
> Rolf M. schrieb:
>> Der Operator = ist in C++ für einen ganz bestimmten
>> Zweck vorgesehen, und du verwendest ihn mit einer völlig anderen
>> Semantik.
> uint32_t a = 34656322;
> uint16_t b;
> uint8_t  c;
> bool d;
> d = c = b = a;
>
> a,b,c und d sind ganz naive Komponenten.
> Die Zuweisung ändert den inneren Zustand der Komponente.

= sorgt dafür, dass alle Elemente nachher den gleichen Wert haben. Wenn 
der Wert ins Ziel nicht reinpasst, kann natürlich nur der Teil kopiert 
werden, der reinpasst. Bei dir steckt da aber eine komplexere Logik 
drin, die sogar ein Timing enthält. Das würde ich in einem operator = 
nicht erwarten.

> In beiden Fällen erfolgen Transformationen der Daten.
> Da sind also durchaus Gemeinsamkeiten.

Nur weil beides irgendwie Daten transformiert, ist es noch lange nicht 
das gleiche.

>
> Welcher Operator ist besser geeignet?

Ich habe den Eindruck, du versuchst deklarative Programmierung auf C++ 
abzubilden.

EAF schrieb:
> Dann ist folgende alternative Schreibweise möglich, vielleicht macht die
> dich ja zufriedener....
> void loop(void)
> {
>   // relais = toff = count = flanke = entprell = taster;
>   relais.set(toff.doTrigger(count.doTrigger(flanke.doTrigger(entprell.doTr 
igger(taster.isHigh())))));
> }
> Möglich ja, aber für schöner oder übersichtlicher, halte ich das nicht.
> Mehr Schreibarbeit, und doofe Klammerverwirrungen drohen.

Für mich stellt sich eher die Frage, warum du die ganze Funktionalität 
unbedingt in eine einzelne Zeile quetschen willst.


M. K. schrieb:
> Ich frage mich ja, wenn ich die Argumentation von einigen hier so
> anschaue, warum überhaupt noch Mikroprozessoren mit weniger als 64 bit
> eingesetzt werden. Hat doch alles keine Sinn so lahme Krücken
> einzusetzen...

Auf 64 Bit ist man nicht so sehr wegen der Geschwindigkeit, sondern 
wegen des Adressraums gegangen. Wird also nur für µCs interessant, die 
mehr als 4 GB Adressraum brauchen.

von Ralf (Gast)


Lesenswert?

M. K. schrieb:
> warum überhaupt noch Mikroprozessoren mit weniger als 64 bit eingesetzt
> werden

Ernsthaft? Nach tausenden Foren-Prognosen hier sollten minderbittige 
Machwerke längst Geschichte sein!

Mehr als 50% aller standalone Klein-Steuerungs- Anwendungen langt im 
Grunde 1 MHz. Das wär mal meine Prognose.

Beitrag #7280526 wurde von einem Moderator gelöscht.
Beitrag #7280537 wurde von einem Moderator gelöscht.
von EAF (Gast)


Lesenswert?

Rolf M. schrieb:
> Ich habe den Eindruck, du versuchst deklarative Programmierung auf C++
> abzubilden.

Nicht wirklich.
Davon mögen Aspekte mit eingeflossen sein, ist aber nicht Ziel gewesen.

Das eigentliche Vorbild waren Datenflusssysteme.
Datenflussdiagramme.
Diese kennen eigentlich keine Entscheidungen, oder Schleifen.
Und wenn, finden sie im inneren der jeweiligen Transformation statt.

Im Grunde ist es die Datenfluss Sichtweise, gegossen in eine Sprache, 
C++, welche einem das über die Operatorenüberladung ermöglicht.



Rolf M. schrieb:
> die ganze Funktionalität
> unbedingt in eine einzelne Zeile quetschen willst.
Auch das ist nur ein weit untergeordnetes Ziel, ist zudem gar nicht in 
allen Situationen möglich.
Und ja, ein Datenfluss in einer Zeile ist eine saubere in sich 
geschlossene Nummer.
Ausgabe <- Verarbeitung <- Eingabe.

Rolf M. schrieb:
> Bei dir steckt da aber eine komplexere Logik
> drin, die sogar ein Timing enthält. Das würde ich in einem operator =
> nicht erwarten.
Ja, das sind teilweise Dinge, welche man als endliche Automaten 
bezeichnen kann/könnte. Beliebig komplexe Komponenten, allerdings mit 
einer schlichten Schnittstelle.

von J. S. (jojos)


Lesenswert?

MCUA schrieb im Beitrag #7280537:
>> Das Arduino Framework stellt Funktionen/Objekte auf einem
> höheren Level
>> bereit.
> Damit der Bubi klicken kann.

Vor über 20 Jahren wurde bei uns individuelle (allerdings schon stark 
standardisierte) C Programmierung durch Sokoban (Soft SPS) ersetzt. Eine 
sehr weise Entscheidung des CEO, es hat die SW Entwicklung sehr stark 
vereinfacht und auch heute muss ich mir wenig Sorgen machen.

Ich wundere mich nur über die Fantasielosigkeit in diesem  Technikforum.

von Frank O. (frank_o)


Lesenswert?

Andreas schrieb:
> Hab 3 Teensy 4.0 hier und ja die sind schnell aber für meine Anwendungen
> reicht auch ein Arduino Uno wenn man den Code optimiert und man spart
> nebenbei Strom.. :)

Es ist immer die Frage was du damit machst und ob du professionell damit 
arbeitest oder Hobby.
Beim Hobby kann man sicher eher auch einen schellen und leistungsfähigen 
Controller nehmen, auch wenn man die Leistung vielleicht niemals 
braucht.
Die Pins und Möglichkeiten dann schon eher.
Man lernt dann den einen Controller und muss vielleicht niemals mehr 
einen anderen lernen.
In der Industrie ist oft auf Kante genäht und da kommt es sicher vor, 
dass du auch öfter einen neuen Controller lernen musst.
Hab seit einigen Jahren nichts mehr gemacht, nachdem mein Sohn starb, 
aber für das Meiste reicht bei mir ein ATTiny10. Wenn es mehr sein muss 
ATmega328.
Beide haben keine großen Unterschiede in der Programmierung.
Die Tinys, die ich noch gekauft habe, reichen definitiv bis an mein 
Lebensende, selbst wenn das noch im normalen Rahmen liegt.
ST32 habe ich mal mit angefangen. Mit jemandem aus dem Forum zusammen. 
Er war viel schneller als ich und so kam ich kaum mit, aber ich will 
auch eigentlich jedes Bit und Byte in den Dingern kennen. Bei den ST32 
ist allein der Lernaufwand so hoch, dass ich mir das nicht antun will.
Wenn dir also die Leistung reicht und du glücklich mit deinem Controller 
bist, dann bleib dabei. Kaufe lieber 20 mehr, als du vielleicht jemals 
brauchen wirst und du wirst glücklich sein.

von MCUA (Gast)


Lesenswert?

>  durch Sokoban (Soft SPS) ersetzt.
Ach eine Soft-SPS.
Das sind ja 'extem' 'schnelle' xx ms.
Deine Omma findet das toll.
Du hast (definitiv, sonst würdest du das nicht schreiben) noch nie ein 
richtiges Programm geschrieben (ganz zu schweigen von Kenntnissen 
irgentwelcher Hardware); aber hier rumkotzen.
Du bist MIT DEINER OOP am Ende, noch bevor du angefangen hast.

von MCUA (Gast)


Lesenswert?

> Mehr als 50% aller standalone Klein-Steuerungs- Anwendungen langt im
> Grunde 1 MHz. Das wär mal meine Prognose.
Und die weitaus meisten Standalone-Steuerungen sind (auch heute noch) 
nicht OOP geschrieben.

von MCUA (Gast)


Lesenswert?

> warum überhaupt noch Mikroprozessoren mit weniger als 64 bit eingesetzt
> werden
Und demnächst sind es 256-Bit-Registerbreite, weil das besser ist um 4 
LEDs blinken zu lassen.

von EAF (Gast)


Lesenswert?

Da hat aber einer Schaum vorm Mund....
Wozu?

von J. S. (jojos)


Lesenswert?

MCUA schrieb:
>>  durch Sokoban (Soft SPS) ersetzt.
> Ach eine Soft-SPS.
> Das sind ja 'extem' 'schnelle' xx ms.
> Du bist MIT DEINER OOP am Ende, noch bevor du angefangen hast.

Die Softie SPS macht Messwertverarbeitung und Bildverarbeitung, intern 
mit OOP. Mehr Power ist nicht zum angeben wieviel nicht genutzt wurde, 
sondern wird für leistungsfähigere Produkte genutzt.
Bei Produkten mit μC genauso, mehr Power bedeutet mehr Möglichkeiten. 
Wobei die Kollegen da sehr konservativ sind und längst nicht alles 
ausreizen. Es reicht wenn man HW und SW Blöcke weiterverwenden kann, das 
spart viel mehr als ‚Hurra, ich habe nur 1% Flash gebraucht‘.

von Ralf (Gast)


Lesenswert?

Frank O. schrieb:
> Man lernt dann den einen Controller und muss vielleicht niemals mehr
> einen anderen lernen.

Zwar aus Hobby-Perspektive vermutet würde ich trotzdem sagen das dürfte 
(auf die jeweilige Architektur bezogen) auch in der Industrie öfter der 
Fall sein als hier zuweilen suggeriert wird.

Heutige Standard-8Bitter sind, richtig programmiert, bereits 
außerordentlich leistungsfähig. 32Bitter noch sehr viel universeller 
einsetzbar. Alle kochen sie nur mit Wasser. Warum also sollte man da 
noch andauernd zwischen den Architekturen hoppen (samt Umlern/ 
Toolbeschaffungs-Aufwand)? Das relativiert im übrigen auch den 
Portier-Vorteil diverser Hochsprachen gehörig und für viele.

Die Spezialisierung auf eine Architektur (möglichst viele Derivate) 
sollte doch ein langfristig tragfähiges Konzept sein, vor allem mit dem 
wachsenden Erfahrungs- und Codebasis- Vorteil über die Zeit.

MCUA schrieb:
> Und die weitaus meisten Standalone-Steuerungen sind (auch heute noch)
> nicht OOP geschrieben.

In den Vorworten vieler OOP Bücher wird doch gerade damit geworben, daß 
die objektorientierte Betrachtungsweise menschlichem Denken sehr viel 
näher käme? Das ist natürlich mitnichten der Fall, hier merkt man den 
propagierten Programmierparadigmen das Dogmatische, das Ideologische 
ihrer Urheber an. Der Mensch Ralf denkt wie viele andere lieber eins 
nach dem anderen, gern für die schnelle Reaktion, für 
Quasiparallelitäten und zur Programm-Strukturierung noch durch 
Interrupts unterbrochen.
OOP erweist sich bei den ganz einfachen Dingen zu oft nur als künstliche 
Verkomplizierung der Verhältnisse. Sprachbürokratisch sowie unnötig 
hardwarefern-abstrakt. Mitsamt viel höherer Anforderungen, um wirklich 
ressourcensparsam zu programmieren. Das Scheitern desselben sieht man 
dann nirgendwo besser als bei der Arbeit unter den ganz großen 
Softwaresystemen unserer Zeit. Wie schon anfangs erwähnt, Windows werden 
nun schon 6 Kerne empfohlen...

von MCUA (Gast)


Lesenswert?

> Die Softie SPS macht Messwertverarbeitung und Bildverarbeitung, intern
> mit OOP.
Bei einigen ns oder wenigen us bist du draussen.

von MCUA (Gast)


Lesenswert?

> In den Vorworten vieler OOP Bücher wird doch gerade damit geworben, daß
> die objektorientierte Betrachtungsweise menschlichem Denken sehr viel
> näher käme?
Ob das so ist oder nicht, Bei etlichen Anforderungen kommt man mit 
diesem billigen Standard nicht weiter, weil die damit erzeugte 
Laufzeit/Zykluszeit viel (ca 10..100 x) zu langsam (!) ist;
Erinnert an Milli-Vanilli; die konnten (wie manche Hochsprachen-Fritzen) 
nicht singen.

von J. S. (jojos)


Lesenswert?

Ja stimmt. Welcher Sensor liefert denn  Daten im ns Takt? Habe ich zum 
Glück nicht. Mehrere 100 Sensoren in >100kHz kein Problem, aber für 
deine Probleme gibt es wohl nur schnelle 8 Bitter.

von Gerhard O. (gerhard_)


Lesenswert?

MCUA schrieb:
>> Fast jeder hat mit einfachen Sachen angefangen.
> Und?
> Man kann das ja machen, indem man einen uC programmiert (auch indem man
> ein Manual l-i-e-s-t (oh, was hab ich jetzt gesagt?)), statt auf einer
> Spielzeug-IDE mit KLICKI-BUNTI rumzuklimpern.

So wie sich das anhört, urteilst Du zu m.M.n. zu breitflächig. Auch wenn 
ich mittlerweile erst vor ein paar Jahren das Arduino Ökusystem für 
gewisse Projekte zu schätzen gelernt habe, bedeutet das nicht das mir 
Datenbücher fremd sind. Seit 1998 entwickle ich hauptberuflich 
industrielle embedded HW mit PICs, AVRs und auch jahrelang mit ARM7 und 
da sind Datenblätter in allen Richtungen und deren Verständnis 
unumgänglich. Auch wenn den Arduino Anfängern vorgehalten wird, meist 
ohne DB zu arbeiten zu wollen, ist das verständlich. Ein Anfänger dürfte 
ohnehin mit dem Verstehen solcher Ingenieur-Informationen eine Weile 
überfordert zu sein bis das nötige breitere Grundwissen angeeignet 
worden ist.

Die Arduino IDE, die so oft mitleidig belächelt wird, ist sicherlich 
einfach gehalten, reicht aber für moderate Projekte aus und hat keine 
Probleme in traditioneller Weise auch mit vielen Source und Header 
Dateien zu funktionieren. Die IDE läuft meist problemlos auf 
verschiedenen BS. Gerade richtig zum Einsteigen. Abgesehen davon muß man 
sie ja nicht verwenden. Man kann ja auch extern editieren und das IDE 
nur zum bauen und hochladen verwenden. Aber das ist ja alles ein alter 
Hut hier. Was mich betrifft, finde ich die IDE aber ausreichend 
komfortabel für die typischen kleineren Projekte. Wer mehr vom IDE 
erwartet verwendet ohnehin Besseres.

Ein Anfänger wäre auch mit dem Erstellen und Modifizierung von Makefiles 
und generelle Tool Installation überfordert. Da ist es gut, daß eine 
Neuinstallation zu einem gebrauchsfähigen Werkzeug führt. Ich könnte mir 
nichts Schlimmeres vorstellen als wenn ein Neuling sich mit den 
komplizierten Tooleinstellungen herumschlagen müsste. Da würde der 
Frustrations-Index bei den meisten steil ansteigen.

Irgendwie finde ich die häufigen pauschale Abwertungen im Forum 
unangebracht, weil sie zu subjektiv sind und meist professionellen 
Standards und Gewohnheiten zugrunde liegen. Man darf nicht immer von 
sich auf andere schließen. Ein Neuling wird das ohnehin nicht so 
empfinden können.

Deshalb finde ich Einige Deiner vorherigen Kommentare irgendwie als zu 
unüberlegt hingeworfen.

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> In den Vorworten vieler OOP Bücher wird doch gerade damit geworben, daß
> die objektorientierte Betrachtungsweise menschlichem Denken sehr viel
> näher käme
Das ist auch wohl so.
Die OOP Denke ist "natürlicher".

Ralf schrieb:
> Das ist natürlich mitnichten der Fall,
Das gilt ganz offensichtlich für dich!

Und auch wohl für die, welche die prozedurale Denke seit zig Jahren 
verinnerlicht haben. Die haben es besonders schwer damit...

Anfänger, tun sich da erheblich leichter. Die erleiden nicht den 
Fallback in die prozedurale Denke. Denn die ist noch nicht ins Hirn 
eingebrannt.



Ralf schrieb:
> ....
Der Frosch im AVR-ASM Brunnen ist in seinem Löchli glücklich und 
zufrieden. Was sich außerhalb des Brunnenrandes befindet interessiert 
ihn nicht.

Nein!
Das lehnt er ab. Bekämpft es mit allen seinen Mitteln, indem er Fakten 
verzerrt, Sockenpuppen zur Hilfe nimmt, Gift und Galle spuckt.
Ist er vielleicht doch nicht so glücklich in seinem stickigen Brunnen?


J. S. schrieb:
> Es reicht wenn man HW und SW Blöcke weiterverwenden kann, das
> spart viel mehr als ‚Hurra, ich habe nur 1% Flash gebraucht‘.
So ist das wohl.

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Die OOP Denke ist "natürlicher".

Das kannst Du ja gern für Dich behaupten.
Nimm zur Kenntnis daß es andere anders sehen.
Wenn ich mich recht entsinne ist OOP seit den
70ern auf dem Markt und sollte sich nach eigenem
Anspruch, weil es ja soviel "natürlicher" wäre,
längst durchgesetzt haben. Das ist so wie mit den
dummen 32vs.8Bit Prognosen: Lächerlich!

> Der Frosch im AVR-ASM Brunnen ist in seinem Löchli glücklich

Ganz offensichtlich bist Du der Frosch.
Eine Weltsicht aus dem OOP Glas, unfähig, seine Programme optimal
auf die verwendete Hardware anzupassen. Um hier die Fahne der
Portabilität zu schwenken die er vermutlich selber noch nie in
Anspruch nehmen musste :)

von Ralf (Gast)


Lesenswert?

Gerhard O. schrieb:
> Irgendwie finde ich die häufigen pauschale Abwertungen im Forum
> unangebracht, weil sie zu subjektiv sind und meist professionellen
> Standards und Gewohnheiten zugrunde liegen.

Hat doch gar keinen Grund darüber zu klagen.
Sitzen hier halt viele Frösche in ihrem ganz speziellen Sumpf.
Die Kunst besteht nun daran, sich die Substanz aus all den Einzel- 
Perspektiven fürs eigene Bild herauszuholen. Dann braucht im besten 
Falle mancher Irrweg nicht selber beschritten werden. Der Frosch wird 
dann zum Prinzen.

von Rolf M. (rmagnus)


Lesenswert?

Ralf schrieb:
> EAF schrieb:
>> Die OOP Denke ist "natürlicher".
>
> Das kannst Du ja gern für Dich behaupten.
> Nimm zur Kenntnis daß es andere anders sehen.

Das ist eigentlich allgemein bekannt und auch der Grund, warum sie 
überhaupt erst erfunden wurde. Wenn du von Natur aus, also auch 
außerhalb der Programmierung nicht in Objekten, sondern in Bytes denkst, 
dann sei dir das gegönnt.

> Wenn ich mich recht entsinne ist OOP seit den
> 70ern auf dem Markt und sollte sich nach eigenem
> Anspruch, weil es ja soviel "natürlicher" wäre,
> längst durchgesetzt haben. Das ist so wie mit den
> dummen 32vs.8Bit Prognosen: Lächerlich!

An vielen Stellen, vor allem z.B. auf dem PC hat sie sich durchgesetzt. 
Python, C++, C#, Java und noch viele mehr - alle dort gängigen Sprachen 
sind primär oder sogar vollständig auf OOP ausgerichtet. Da macht heute 
kaum noch jemand was anders. Im doch sehr konservativen µC-Sektor ist 
man noch nicht ganz so weit, und bei sehr kleinen µCs ist es nicht immer 
sinnvoll, aber tendenziell nimmt es auch im Embedded-Bereich zu. Das 
heißt natürlich nicht zwingend, dass für 100% der Software-Entwicklung 
OOP die beste Lösung wäre, aber zu behaupten, es sei nicht verbreitet, 
ist kompletter Quatsch.

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> In den Vorworten vieler OOP Bücher wird doch gerade damit geworben, dass
> die objektorientierte Betrachtungsweise menschlichem Denken sehr viel
> näher käme?

Ja das steht da, aber auf mich trifft es nicht zu. Ich brauchte Jahre, 
um mich an OOP zu gewöhnen. Zwei Beispiele:

In OOP kann sich der Apfel selbst auspressen, um Saft zu liefern. In 
meiner Welt benutzt jemand ein Werkzeug, um den Apfel zu zerlegen.

In OOP gibt die Serial Klasse einen Text aus. In meiner Welt gibt eine 
Funktion den Text auf einem (evtl. seriellen) Port aus.

von Rolf M. (rmagnus)


Lesenswert?

Stefan F. schrieb:
> Ich brauchte Jahre, um mich an OOP zu gewöhnen. Zwei Beispiele:
>
> In OOP kann sich der Apfel selbst auspressen, um Saft zu liefern.
> In meiner Welt benutzt jemand ein Werkzeug, um den Apfel zu zerlegen.

Das kommt doch ganz darauf an, wie man die Klassen definiert. Auch die 
Presse wäre ein Objekt.

> In OOP gibt die Serial Klasse einen Text aus. In meiner Welt gibt eine
> Funktion den Text auf einem (evtl. seriellen) Port aus.

Und was ist der Text und der serielle Port? Du kommst eigentlich gar 
nicht darum herum, dir solche Dinge als Objekte vorzustellen, die 
bestimmte Dinge tun können. Aus Sicht des Hardware-Interface ist es eine 
Reihe Bits, die auf mehrere Register verteilt sind und in die man 
irgendwelche Werte schreiben muss. Dennoch fasst du diese im Kopf zu 
einem Objekt namens "serieller Port" zusammen, und damit hast du schon 
die natürliche objektorientierte Denke.
Im Gegensatz zum Apfel gibt der Port die Daten ja auch selbst aus. Die 
Funktion füttert ihn nur mit den auszugebenden Daten.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Rolf M. schrieb:
> Das kommt doch ganz darauf an, wie man die Klassen definiert. Auch die
> Presse wäre ein Objekt.

Das ist wohl wahr.

von DANIEL D. (Gast)


Lesenswert?

Ich verstehe OOP auch kein Stück, prozedurales programmieren ist in 
meinen Augen wie LEGO bauen, alles hat seine Aufgabe. OOP ist von der 
Baustein denkweise zu weit entfernt meiner Meinung nach.

Das ist eher was für Leute, welche sich das ganze als viele Personen mit 
Aufgaben vorstellen. Mir ist das zu weit entfernt von der Art wie die 
Technik arbeitet.

von Ralf G. (ralg)


Lesenswert?

DANIEL D. schrieb:
> ... prozedurales programmieren ist in meinen Augen wie LEGO bauen,...
Ich bilde mir ein, mir vorstellen zu können ;-) was du meinst...

> ... Das ist eher was für Leute, welche sich das ganze als viele Personen mit
> Aufgaben vorstellen. ...
Nee. würd' ich nicht sagen. Es nützt ja nichts, wenn das LEGO-Dach als 
erstes fertig ist. (Vielleicht fällt mir 'mit LEGO' dazu was passendes 
ein.)

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

hört sich eher an nach 'ich habe mir nicht die Mühe gemacht es zu 
verstehen'.
Ist ja ok, aber dann sollte man nicht über Dinge urteilen von denen man 
keine Ahnung hat.

von DANIEL D. (Gast)


Lesenswert?

J. S. schrieb:
> hört sich eher an nach 'ich habe mir nicht die Mühe gemacht es zu
> verstehen'.
> Ist ja ok, aber dann sollte man nicht über Dinge urteilen von denen man
> keine Ahnung hat.

Da hast du sicher recht, aber Objekte sind sehr viel komplexer als 
einzelne Steine, wo ein einzelner Stein immer eine feste Aufgabe hat.

von J. S. (jojos)


Lesenswert?

DANIEL D. schrieb:
> Da hast du sicher recht, aber Objekte sind sehr viel komplexer als
> einzelne Steine,

nein, das sind genauso die gleichen Funktionen. Die sind nur nicht 
global, sondern im Kontext des Objektes gültig.
Und weil die auf ihre privaten Daten arbeiten, kann man Objekte einfach 
vielfach anlegen. Wenn der Controller zwei serielle Schnittstellen hat, 
dann gibt es eben Serial1 und Serial2.

von Stefan F. (Gast)


Lesenswert?

OOP ist halt eine andere Sichtweise, die manchen Leuten leicht und 
anderen schwer fällt. Wie gesagt habe ich mich daran gewöhnt, aber es 
hat gedauert.

von W.S. (Gast)


Lesenswert?

Stefan F. schrieb:
> Ja das steht da, aber auf mich trifft es nicht zu. Ich brauchte Jahre,
> um mich an OOP zu gewöhnen. Zwei Beispiele:
>
> In OOP kann sich der Apfel selbst auspressen, um Saft zu liefern. In
> meiner Welt benutzt jemand ein Werkzeug, um den Apfel zu zerlegen.

Das Verstehen vom Programmieren mit Objekten ist eigentlich auch ein 
eher langwieriger Weg, das dauert eigentlich bei allen Programmierern 
recht lange. Der Knackpunkt und der Unterschied zu reinen Daten dabei 
ist, daß Objekte eben auch Methoden haben, also ein Eigenleben besitzen. 
Biologisch/Historisch ist das vergleichbar vom Übergang von toter 
Materie zu den Einzellern.

Naja, dein Beispiel vom Apfel ist zwar lustig, trifft aber nicht den 
Kern der Sache. Der Apfelbaum läßt sich Äpfel wachsen, DAMIT 
irgendeine Kuh, die des Weges kommt, selbige frißt und später die Kerne 
irgendwo anders zusammen mit ihrem Mist quasi aussät. Der Apfelsaft in 
deinem Trinkglas ist also nur ein für uns nützlicher Nebeneffekt, der 
mit den eigentlichen 'Methoden' des Apfels nur wenig zu tun hat. Das 
Auspressen ist menschengemacht, vorgesehen ist das Fressen und das 
spätere 'säen' mit dem Dung. Erst dann kommen die ersichtlicheren 
Methoden (keimen, wachsen usw.) zur Wirkung.

Das ganze Hantieren mit Objekten ist dort am ehesten nützlich, wo 
äußerlich gleichartige Daten bzw. 'Dinge', die sich innerlich aber 
unterscheiden, und die man erzeugen und wieder löschen kann zu verwalten 
sind. Also z.B. die Kringel auf einem PC-Bildschirm. Die sollen eine 
Methode "Zeichne dich" haben und alles nähere ist dem OS des PC egal.

Für alles andere - insbesondere für alles, was auf Hardware hinausläuft 
- sind Objekte hingegen ziemlich ungeeignet, denn sie können nicht 
gelöscht und kreiert werden. Versuche mal gedanklich, ein Portpin eines 
Controllers aus dem Chip zu entfernen und einen anderen Pin zu kreieren 
und auf dem Chip zur Benutzung verfügbar zu machen...

W.S.

von Gerd (Gast)


Lesenswert?

DANIEL D. schrieb:
> Da hast du sicher recht, aber Objekte sind sehr viel komplexer als
> einzelne Steine,


>J. S. (jojos)
>>nein, das sind genauso die gleichen Funktionen. Die sind nur nicht
>>global, sondern im Kontext des Objektes gültig.
>>Und weil die auf ihre privaten Daten arbeiten, kann man Objekte einfach
>>vielfach anlegen. Wenn der Controller zwei serielle Schnittstellen hat,
>>dann gibt es eben Serial1 und Serial2.

Genau so ist es und hier gleich das Code-Beispiel auf dem ESP32 (a.k. 
übertrieben schneller Microcontroller ;-) ):
https://circuits4you.com/2018/12/31/esp32-hardware-serial2-example/

von W.S. (Gast)


Lesenswert?

J. S. schrieb:
> Und weil die auf ihre privaten Daten arbeiten, kann man Objekte einfach
> vielfach anlegen. Wenn der Controller zwei serielle Schnittstellen hat,
> dann gibt es eben Serial1 und Serial2.

Und kannst du per Software dann auch Serial3..Serial99 kreieren oder 
Serial1 vom Chip entfernen?
Nein?
Du hast ganz offensichtlich den OOP Ansatz nicht verstanden. Objekte 
sind Daten mit eigener Funktionalität und nicht Tüten, die man über 
andere Dinge stülpt. Insbesondere nicht über Hardware aller Art. Dort 
kann man allenfalls Anfrage- und Report-Funktionalität als Objekte 
machen. Also sinngemäß Anfrage, ob das gnädige Stück Hardware sich 
geneigt fühlt, ein Datenstück entgegenzunehmen oder ob selbiges ein 
Datenstück vorliegen hat und bereit ist, es herauszugeben.

W.S.

von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Für alles andere - insbesondere für alles, was auf Hardware hinausläuft
> - sind Objekte hingegen ziemlich ungeeignet, denn sie können nicht
> gelöscht und kreiert werden.

also bitte, wenn man keine Ahnung hat,...

Gerade für Hardware ist die OO Sicht ebenso brauchbar: ein Ausgang ist 
ein Ojbekt, ein Eingang ist ein Objekt, SPI ist ein Objekt, usw.
Dabei wird die Hardware dem Objekt zugeordnet, ein SPI hat die Pins 
MISO, MOSI, Clock. Ein Eingang hat den Portpin xy. Ein Ausgang hat den 
Portpin xy.
Ich lege einen Ausgang an, und benutze ihn damit. Durch nicht benutzen 
wird der nicht aus dem Controller entfernt. Was für eine wirre kranke 
Vorstellung.
1
DigitalIn  taste1(PA_1, PULL_UP);
2
DigitalOut led(LED);
3
SPI  spi(PIN_MOSI, PIN_MISO, PIN_CLOCK);
4
I2C  i2c(PIN_SDA, PIN_SCL);
5
6
int state = taste1;  // gpio lesen
7
led = 0;   // gpio setzen
8
spi.frequency(1e6);   // spi frequenz einstellen
9
spi.write(state);  // daten über spi schreiben
10
i2c.transfer(adresse, daten);

was ist an so einem Code schwer verständlich? Hardware wird mit ihren 
Funktionen in einem Objekt gekapselt. Und weil das so schon 
zusammenhängt, kann Intellisense auch gleich die Funktionen eines 
Objektes anzeigen.
Aber es driftet schon wieder ab...

von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Objekte
> sind Daten mit eigener Funktionalität und nicht Tüten, die man über
> andere Dinge stülpt. Insbesondere nicht über Hardware aller Art.

Es sind Tüten. Das Objekt hat einen gpio als member, es ist kein gpio. 
Und so kann man das mit allen Hardwareeinheiten machen.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

W.S. schrieb:
> Du hast ganz offensichtlich den OOP Ansatz nicht verstanden.

Sprichst du über dich selbst?

von Ralf (Gast)


Lesenswert?

Rolf M. schrieb:
> Wenn du von Natur aus, also auch außerhalb der Programmierung nicht in
> Objekten, sondern in Bytes denkst, dann sei dir das gegönnt.

Dabei gehts nicht ums Denken in Bytes.
Dabei gehts um Denken in Abläufen. Eins nach dem anderen. Das nenne ich 
natürlich.

> aber zu behaupten, es sei nicht verbreitet, ist kompletter Quatsch.

Das hat auch niemand behauptet.
Von Durchsetzen war die Rede. Überall.
Auf Systemen mit hunderten Tasks, mehreren Kernen, umfangreichster 
Software mit großen Datenmengen ist OOP sicher ein Ansatz, die komplexe 
Lage in den Griff zu bekommen. Das allerdings zum Preis höchster 
Ressourcen- Verschwendung. Ob das noch anders, ressourcensparender, aber 
genauso zeitökonomisch zu lösen wäre würde ich hier offen lassen. Daß es 
so aber Verschwendung pur bedeutet brauchen wir hier gar nicht zu 
diskutieren.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> In OOP gibt die Serial Klasse einen Text aus. In meiner Welt gibt eine
> Funktion den Text auf einem (evtl. seriellen) Port aus.

> Ich brauchte Jahre, um mich an OOP zu gewöhnen

OOP führt für dieselbe Hardware eine Masse abstrakter Begrifflichkeiten 
samt einer Menge Bürokratie ein. OOP füllt schnell 1000seitige Bücher 
und erfordert jahrelange Ein/Umgewöhnung. Soll man das "natürlich" 
nennen?
Natürlich hochgradig umständlich, verkopft, realitätsfern, um x Ecken 
denkend würde ich das nennen. Die kompliziertere Denke hat allerdings 
etwas faszinierendes an sich, für Komplexitäts-Fans aber auch weil sie 
auf höherer Ebene ungleich flexibler daherkommt. Ergebnis ist und bleibt 
allerdings (mit Windows vor Augen) meist lahme Software, weil vor lauter 
Flexibilität die bestmögliche Anpassung an konkrete Hardware verloren 
geht. Und wer Programmierung dermaßen zur Wissenschaft macht muß sich 
nicht wundern, daß die Anzahl der Fähigen die damit noch hochperformante 
Programme zustandebringen begrenzt ist.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> as allerdings zum Preis höchster
> Ressourcen- Verschwendung.

Das ist natürlich völliger Quatsch.
Dank zero-cost-Abstraktionen ist das alles kostenlos.

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> zero-cost-Abstraktionen

retten OOP da auch nicht.
Versteh mich nicht falsch: Ich behaupte nicht OOP macht Software aus 
Prinzip lahm und speicherfressend. Sie stellt für Hochperformanz und 
Speichereffizienz kraft ihrer Hardware-Ferne aber dermaßen Anforderungen 
daß der durchschnittliche OOP Programmierer damit eben nur jene 
durchschnittliche Software produziert die in den OOP Domänen überall zu 
beobachten ist.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Ich behaupte nicht OOP macht Software aus
> Prinzip lahm und speicherfressend. Sie stellt für Hochperformanz und
> Speichereffizienz kraft ihrer Hardware-Ferne aber dermaßen Anforderungen
> daß der durchschnittliche OOP Programmierer damit eben nur jene
> durchschnittliche Software produziert die in den OOP Domänen überall zu
> beobachten ist.

Schlechte Programmierer programmieren schlechte Software.
Für diese Erkenntnis braucht man keinen Doktortitel.

von EAF (Gast)


Lesenswert?

Stefan F. schrieb:
> OOP ist halt eine andere Sichtweise, die manchen Leuten leicht und
> anderen schwer fällt. Wie gesagt habe ich mich daran gewöhnt, aber es
> hat gedauert.

Hier muss ich dir zustimmen!
(auch wenn mir das schwer fällt, aber wo du recht hast, hast du halt 
recht)

Es mögen Dinge, wie Talent, mitspielen.
bzw.  organische Dinge.
Die möchte ich mal außen vor lassen, und betrachte alle als gleich 
Intelligent.



Sicherlich ist eine besonderen Konfiguration der Hirnwindungen dafür 
wichtig.
Wobei es doch so ist, dass sich die Konfiguration über die Zeit ändert, 
bzw. ändern kann. Das nennt man dann lernen o.ä.
Es ist das Training.
Die Denkmuster festigen sich zunehmend, bei Nutzung.

Als Zugabe, gibt es noch das Beharrungsvermögen.
> Bisher hat mir die Prozedurale Denke das Überleben gesichert.
Ja, durchaus.


Grundsätzlich gibt es dagegen nichts einzuwenden.
Auch hier eine Zugabe:
Jedes Programm, welches in einer Turing vollständigen Sprache abgefasst 
ist, lässt sich in eine andere, ebenso Turing vollständige Sprache, 
überführen.
(gibt es Ausnahmen?)

An der Stelle haben wir sowas wie einen Gleichstand, zwischen z.B. 
C(prozedural) und C++(OOP).

Wo sind die Unterschiede?
Nehmen wir mal 2 Leute, eineiige Zwillinge, vollkommen identisch. A und 
B.
A genießt eine rein prozedurale Ausbildung und wird sehr gut in seinem 
Job.
B genießt eine OOP Ausbildung und wird sehr gut in seinem Job

Und dann schaut der Chef ins Büro und eröffnet dem A:
> Ab nächste Woche arbeiten wir Objekt orientiert, hier hasste ein Buch.
Jetzt hat A ein Problem!
Er ist gezwungen eine andere Sichtweise auf die Dinge zu entwickeln.
Wenn er das erste richtige OOP Programm sieht, wird er geschockt sein!
Es stellen sich so absurde Fragen:
Wo ist mein Kontrollfluss hin?
Wieso zerfächert der sich so dermaßen?
Wo ist die globale Übersicht über den Kontrollfluss?

B dagegen kann gelassener reagieren, wenn der Chef ihm mitteilt:
> Das neue Projekt ist rein prozedural abzuhandeln.
Denn B hat neben der OOP Sichtweise gleich noch die prozedurale Sicht 
mit gelernt. Denn die prozedurale Sicht brauchte er auch schon, beim 
inneren Aufbau der Methoden.
Es reicht, die OOP Denke etwas wegzublenden, und die prozedurale Denke 
mehr zu betonen.

A wird viel mehr Probleme bei der Umstellung haben, als B.
Provokant:
> Wer einmal die Prozedurale Sicht richtig gefressen hat,
> ist für die OOP verloren.
OK. nicht zu 100%, aber hat es deutlich schwerer


Aus dem Grund, halte ich es für falsch, zu sagen, lerne erstmal ASM, und 
dann eine Hochsprache.
Oder, lerne erst C und dann C++ obendrauf.

Das hat nichts damit zu tun, ob ich eine der Sprachen für "besser" 
halte. Dem ist nicht so.

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> Schlechte Programmierer programmieren schlechte Software.
> Für diese Erkenntnis braucht man keinen Doktortitel.

Anspruchloseres Werkzeug ist leichter beherrschbar. Für diese Erkenntnis 
auch nicht.

OOP bringt hier eine Eigenkomplexität rein die halt nicht mehr jeder 
Entwickler maximal vorteilhaft zu nutzen imstande ist :)

Aber ich will mich hier gar nicht weiter auf ausgewachsene OOP Software 
fokussieren. Der Start meines Microchip Studio spricht jeden Tag Bände. 
Darin programmiert wird dann aber maßgeschneidert für die jeweilige 
Hardware. 8Bit Controller bleiben so garantiert ausreichend bis an das 
Ende meiner Tage :)

von Maxe (Gast)


Lesenswert?

EAF schrieb:
> Es stellen sich so absurde Fragen:
> Wo ist mein Kontrollfluss hin?
> Wieso zerfächert der sich so dermaßen?
> Wo ist die globale Übersicht über den Kontrollfluss?

OOP ist erstmal nur eine Erweiterung der prozeduralen Programmierung. 
Der Begriff "prozedural" wird auch oft falsch verstanden, er besagt nur 
dass mit Prozeduren, also Funktionen/Unterprogrammen, gearbeitet wird. 
Er besagt nicht, dass das Programm als Abfolge von Sequenzen aufgebaut 
ist, man kann prozedural auch ereignisorientiert programmieren.

Mit OOP kann man genauso in sauberen Abfolgen arbeiten.
Bzgl. "natuerlich":
M.E. ist das wie mit Minimalbeispielen (Codebeispiele), von bspw. einer 
Peripherieansteuerung. Die muessen wirklich minimal gewaehlt werden, 
dass man den Code gut versteht. In der Praxis muss dieser Code aber noch 
mit einer Fehlerbehandlung versehen werden und selbige mit Timeouts. Der 
Minimalcode ist einfacher zu verstehen, uebersichtlicher, aber die 
Komplexitaet ist durch die Sache gegeben, man kann nicht einfach darauf 
verzichten.
Und so ist es mit der OOP, wenn man ein komplexes Programm erstellt, ist 
es einfacher das mit Hilfe von OOP zu strukturieren, OOP ist da 
natuerlicher. Auch wenn es noch viel einfacher waere ein ueberhaupt 
nicht komplexes Problem zu loesen. Und damit OOP auch nicht zu brauchen, 
obwohl es auch bei kleineren Programmen hilft.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Anspruchloseres Werkzeug ist leichter beherrschbar.

Das ist Unsinn.
Es kann sogar bedeutend schwerer beherrschbar sein, wenn die Sprache die 
Werkzeuge (z.B. OOP oder ähnliches) nicht bietet, die man braucht, um 
ein Programm vernünftig zu implementieren. Das führt nur dazu, dass man 
sich Krücken bauen muss. Siehe OOP-Ansatz mit Funktionszeigerstrukturen 
im Linux Kernel. Das ist deutlich schwerer zu verstehen, als der 
entsprechende Ansatz mit z.B. C++ Klassen.

von Euro (Gast)


Lesenswert?

Ralf schrieb:
> Sie stellt für Hochperformanz und
> Speichereffizienz kraft ihrer Hardware-Ferne aber dermaßen Anforderungen
> daß der durchschnittliche OOP Programmierer damit eben nur jene
> durchschnittliche Software produziert die in den OOP Domänen überall zu
> beobachten ist.
Ich bin da jetzt nicht unbedingt ganz anderer Meinung. Man kann ein 
Programm performancetechnisch zu 97% in den alloc-free-jungle schicken. 
ADO unter VB von MS war z.B. so ein Temporärobjektgrab.
Wo ich allerdings auf einem Mikrocontroller den Wahn finden sollte, 
einen DB-Treiber auf eine universelle Schnittstelle zu mappen, 
anschließend die Datentypen noch einmal programmiersprachenabhängig zu 
konvertieren, um sie dann useability-konform noch in den 
Ansichtselementen zu cachen - ich wüsste jetzt nicht, was mich dazu 
treiben sollte.

von Stefan F. (Gast)


Lesenswert?

Ich finde die Sprache Go sehr interessant. Sie fühlt sich weitgehend wie 
C an, hat aber eine Garbage Collection und etwas ähnliches wie OOP, 
nämlich Structs mit Methoden. Laut Google soll das ausreichen. Denen war 
wichtig, eine Sprache zu schaffen, die für Anfänger leichter zu lernen 
ist und weniger Fehler provoziert.

Ich benutze es auf der Arbeit zur Programmierung von Backends im Cloud 
Umfeld. Das bisschen OOP, was die Sprache kann, reicht tatsächlich auch 
für komplexe Programme aus. Begeistert bin ich allerdings nicht. Die 
Full-Blown Variante von OOP wie ich sie von C++ und Java kenne, ist mir 
doch lieber.

Die Variante für Mikrocontroller ist dort: https://tinygo.org/

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> Es kann sogar bedeutend schwerer beherrschbar sein, wenn die Sprache die
> Werkzeuge (z.B. OOP oder ähnliches) nicht bietet, die man braucht, um
> ein Programm vernünftig zu implementieren.

Da sehe ich bei schmalbrüstiger Mikrocontroller- Programmierung wirklich 
weit und breit keinerlei Notwendigkeit und Anwendungsfeld. Bei 
Programmen mit großen (strukturierten) Datenmengen kann und wird das wie 
oben angemerkt anders ausschauen. Da heiligt der Zweck die Mittel, wenn 
man denn keine anderen mehr hat.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Da sehe ich bei schmalbrüstiger Mikrocontroller- Programmierung wirklich
> weit und breit keinerlei Notwendigkeit und Anwendungsfeld.

Das ist richtig. Du siehst es nicht.

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> Das ist richtig. Du siehst es nicht.

Weil da nichts ist. Werd doch mal konkreter. Ich sehe da nur die Träume 
irgendwelcher OOP Begeisterter, es wie am PC nun auch am kleinen 
Mikrocontroller zelebrieren zu müssen.

Euro schrieb:
> Wo ich allerdings auf einem Mikrocontroller den Wahn finden sollte,
> einen DB-Treiber auf eine universelle Schnittstelle zu mappen,
> anschließend die Datentypen...

Hab da mal abgebrochen, reicht schon.
Wie man sieht werden über simplen Tatbeständen ganze OOP 
Wolkenkuckucksheime errichtet damit sich der OOP-Fan nur ja auch auf dem 
Mikrocontroller heimisch fühlt.

Register richtig setzen, reicht oft schon - kann ich da nur etwas 
flapsig kommentieren.

von MCUA (Gast)


Lesenswert?

> Schlechte Programmierer programmieren schlechte Software.
Und manch 'gute' Programmierer 'programmieren' 'gute' Software; die dann 
aber gar nicht läuft!

> Er besagt nicht, dass das Programm als Abfolge von Sequenzen aufgebaut
> ist, man kann prozedural auch ereignisorientiert programmieren.
Ja was ist es denn anderes wenn auf ein INT reagiert wird?
Die 'Methode' gab es schon, bevor man überhaupt von OOP geredet hat.

Die Hälfte von OOP ist schlichtweg dummes (theor.) Geschwätz.
(ähnlich dem, von angeblich auf Hochsprache optimierten CPUs)
Und: Der Overhead verschwindet trotzdem nicht!

von Rolf M. (rmagnus)


Lesenswert?

Ralf schrieb:
> Rolf M. schrieb:
>> Wenn du von Natur aus, also auch außerhalb der Programmierung nicht in
>> Objekten, sondern in Bytes denkst, dann sei dir das gegönnt.
>
> Dabei gehts nicht ums Denken in Bytes.
> Dabei gehts um Denken in Abläufen. Eins nach dem anderen. Das nenne ich
> natürlich.

Wenn ich so in die Welt schaue, sehe ich als erstes Objekte, und dies 
Objekte können bestimmte Dinge tun und auf bestimmte Weise miteinander 
interagieren. Abläufe sehe ich erst im zweiten Schritt. Das nenne ich 
natürlich.

>> aber zu behaupten, es sei nicht verbreitet, ist kompletter Quatsch.
>
> Das hat auch niemand behauptet.
> Von Durchsetzen war die Rede. Überall.

Außer dir hat niemand behauptet, dass das unbedingt so sein müsse. Im 
Gegenzug: Wenn es denn so unnatürlich wäre, warum ist es dann nicht 
schon in den 80ern wieder in der Versenkung verschwunden, sondern ganz 
im Gegenteil heute - 40 Jahre später - weiter verbreitet denn je?

> Auf Systemen mit hunderten Tasks, mehreren Kernen, umfangreichster
> Software mit großen Datenmengen ist OOP sicher ein Ansatz, die komplexe
> Lage in den Griff zu bekommen.

Aktuell scheint es der einzige Ansatz zu sein. Oder kennst du aktuelle 
komplexe Systeme, die komplett ohne OOP entwickelt sind?

> Das allerdings zum Preis höchster Ressourcen- Verschwendung.

Das liegt nicht an OOP an sich, und wenn man Funktionalitäten wie 
dynamische Bindung ohne OOP "zu Fuß" nachbildet, braucht das diese 
Ressourcen ebenfalls. Die stärkere Modularisierung, die mit OOP 
einhergeht (oder es zumindest sollte), braucht sicher auch Ressourcen, 
aber die hätte man ohne OOP ebenfalls, wenn man genauso modularisieren 
will.

> Ob das noch anders, ressourcensparender, aber genauso zeitökonomisch zu
> lösen wäre würde ich hier offen lassen. Daß es so aber Verschwendung pur
> bedeutet brauchen wir hier gar nicht zu diskutieren.

Soso. Hast du konkrete Beispiele, woher diese angeblich so massive 
Verschwendung kommen soll?

W.S. schrieb:
> Und kannst du per Software dann auch Serial3..Serial99 kreieren oder
> Serial1 vom Chip entfernen?
> Nein?
> Du hast ganz offensichtlich den OOP Ansatz nicht verstanden.

Die Grundlage von OOP ist nicht, dass man Dinge dynamisch erzeugen und 
entfernen kann.

> Objekte sind Daten mit eigener Funktionalität und nicht Tüten, die man
> über andere Dinge stülpt.

Objekte stellen nach außen eine Funktionalität zur Verfügung und kapseln 
dazu intern Daten und andere ggf. benötigte Ressourcen.

> Insbesondere nicht über Hardware aller Art.

Warum nicht?

J. S. schrieb:
> W.S. schrieb:
>> Objekte
>> sind Daten mit eigener Funktionalität und nicht Tüten, die man über
>> andere Dinge stülpt. Insbesondere nicht über Hardware aller Art.
>
> Es sind Tüten. Das Objekt hat einen gpio als member, es ist kein gpio.
> Und so kann man das mit allen Hardwareeinheiten machen.

Das Objekt repräsentiert gegenüber dessen Nutzer eine Hardware. Wie es 
das intern tut, bleibt ihm überlassen. Das nennt man Abstraktion und 
Kapselung, zwei sehr wichtige Grundkonzepte der Programmierung, auch 
außerhalb von OOP.

Ralf schrieb:
> OOP führt für dieselbe Hardware eine Masse abstrakter Begrifflichkeiten
> samt einer Menge Bürokratie ein. OOP füllt schnell 1000seitige Bücher
> und erfordert jahrelange Ein/Umgewöhnung.

So ein Unsinn.

von Ralf (Gast)


Lesenswert?

MCUA schrieb:
> Die Hälfte von OOP ist schlichtweg dummes (theor.) Geschwätz

Statt sich das reinzuziehen ist es wesentlich zielführender, das 
Datenblatt seines Controllers zu studieren und alle dessen (leider 
heutzutage noch allzu beschränkten) Möglichkeiten passgenau zu nutzen!

von W.S. (Gast)


Lesenswert?

J. S. schrieb:
> ein Ausgang ist
> ein Ojbekt, ein Eingang ist ein Objekt, SPI ist ein Objekt, usw.
> Dabei wird die Hardware dem Objekt zugeordnet

Also was denn nun? Ein Eingang ist bei dir ein Objekt, die Hardware (als 
solche...) wird einem Objekt zugeordnet usw. ???

Du scheinst genauso kraus zu denken wie du schreibst. Offenbar ist 
verstehendes Lesen nicht dein Ding.

Ich versuche mal wieder, es dir zu erklären: Objekte sind Daten mit 
einer eigenen Funktionalität. Man kann sie kreieren und auch wieder 
löschen. Und das so oft man es will und wann man es will. In einer (hier 
nicht genannten, aber in dieser Hinsicht bekloppten) Programmiersprache 
Werden Objekte auch automatisch ermordet, sobald die Ebene, wo man sie 
erzeugt hatte, verlassen wird. Aber das nur nebenbei. Ich möchte mal den 
sehen, der bei solcher Gelegenheit irgend ein Stück aus dem Silizium 
heraushackt... So etwas ist reine Software und hat überhaupt nichts mit 
Hardware zu tun. Allenfalls mit dem Abfragen der Hardware. Kapiere das 
endlich mal.

W.S.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> es wie am PC nun auch am kleinen
> Mikrocontroller zelebrieren zu müssen.

Es gibt überhaupt gar keinen Grund es nicht einzusetzen, wenn man es 
einsetzen möchte, weil es zero-cost ist.

von MCUA (Gast)


Lesenswert?

> Objekte stellen nach außen eine Funktionalität zur Verfügung und kapseln
> dazu intern Daten und andere ggf. benötigte Ressourcen.
Schon wieder so ein Theorie-Geschwätz.
Wenn das jemand in einer 'nichtOOP-Sprache' schreibt, programmiert, 
macht er genau das Selbe;
Es sieht optisch nur anders aus, ist anders sortiert.


 Gesch

von W.S. (Gast)


Lesenswert?

MCUA schrieb:
> Die Hälfte von OOP ist schlichtweg dummes (theor.) Geschwätz.

Drücke dich mal konkreter aus: Die Hälfte von dem, was die Leute hier 
über OOP schwätzen, ist dummes Geschwätz. Das sehe ich auch so.

Aber daß objektorientierte Programmierung deswegen ebenfalls dummes 
Geschwätz sei, ist wiederum nur dummes Geschwätz.

Sowas kommt offenbar nur Leuten in den Sinn, die an Datentypen nur 
Integer in diversen Geschmacksrichtungen kennen und alles andere wie 
Boolean, Zeichen, Objekte, Zeiger und so weiter grundsätzlich nur als 
Untermengen von Integerzahlen ansehen.

Und nein, ereignisgesteuerte Programmierung ist noch etwas anderes und 
hat nix mit OOP zu tun.

W.S.

von MCUA (Gast)


Lesenswert?

> und alle dessen (leider
> heutzutage noch allzu beschränkten) Möglichkeiten passgenau zu nutzen!
beschränkte?
Da wäre dann die Frage, was du überhaupt kennst?
(ich befürchte mal, noch lange nicht alle)
(Manual mit 2-3000 Seiten schon mal gesehen?)

von Rolf M. (rmagnus)


Lesenswert?

W.S. schrieb:
> J. S. schrieb:
>> ein Ausgang ist
>> ein Ojbekt, ein Eingang ist ein Objekt, SPI ist ein Objekt, usw.
>> Dabei wird die Hardware dem Objekt zugeordnet
>
> Also was denn nun? Ein Eingang ist bei dir ein Objekt, die Hardware (als
> solche...) wird einem Objekt zugeordnet usw. ???
>
> Du scheinst genauso kraus zu denken wie du schreibst. Offenbar ist
> verstehendes Lesen nicht dein Ding.
>
> Ich versuche mal wieder, es dir zu erklären: Objekte sind Daten mit
> einer eigenen Funktionalität.

Nein. Objekte stellen eine Funktionalität bereit und können dazu intern 
Ressourcen halten, die aber normalerweise nicht direkt nach außen 
exponiert werden sollten.

> Man kann sie kreieren und auch wieder löschen. Und das so oft man es will
> und wann man es will.

Das kann man mit einer einfachen Datenstruktur oder Array oder z.B. auch 
einem einzelnen Integer auch. Das heißt nicht, dass man es muss.

> In einer (hier nicht genannten, aber in dieser Hinsicht bekloppten)
> Programmiersprache Werden Objekte auch automatisch ermordet, sobald die
> Ebene, wo man sie erzeugt hatte, verlassen wird. Aber das nur nebenbei.

Interessante Art, den größten Vorteil, den C++ gegenüber vielen anderen 
OOP-Sprachen (insbesondere denen mit GC) hat, zu beschreiben…

> Ich möchte mal den sehen, der bei solcher Gelegenheit irgend ein Stück
> aus dem Silizium heraushackt... So etwas ist reine Software und hat
> überhaupt nichts mit Hardware zu tun. Allenfalls mit dem Abfragen der
> Hardware. Kapiere das endlich mal.

Man mus kein "Stück aus dem Silizium heraushacken", aber man kann z.B. 
die verwendete Hardwarekomponente abschalten oder in irgendeinen 
Grundzustand versetzen.
Im Übrigen gibt es durchaus auch Beispiele, wo dynamisch zu entfernende 
Hardware existiert, z.B. wenn man einen USB-Host programmiert.

MCUA schrieb:
>> Objekte stellen nach außen eine Funktionalität zur Verfügung und kapseln
>> dazu intern Daten und andere ggf. benötigte Ressourcen.
> Schon wieder so ein Theorie-Geschwätz.
> Wenn das jemand in einer 'nichtOOP-Sprache' schreibt, programmiert,
> macht er genau das Selbe;

Ja natürlich, hab ich ja oben geschrieben. Nur unterstützt OOP einen 
dabei und macht es einfacher.

von MaWin (Gast)


Lesenswert?

W.S. schrieb:
> Ich versuche mal wieder, es dir zu erklären: Objekte sind Daten mit
> einer eigenen Funktionalität.
> bla bla

Nichts davon widerspricht Objekte für Hardware zu nutzen.
Absolut gar nichts.

Der einzige Unterschied zwischen einem Hardwareobjekt und einem reinen 
Softwareobjekt ist, dass man das Hardwareobjekt nicht (sinnvoll) 
beliebig oft instanziieren kann. In Sprachen wie Rust wird das sogar vom 
Compiler erzwungen.

von Ralf (Gast)


Lesenswert?

Rolf M. schrieb:
> Wenn ich so in die Welt schaue, sehe ich als erstes Objekte, und dies
> Objekte können bestimmte Dinge tun und auf bestimmte Weise miteinander
> interagieren. Abläufe sehe ich erst im zweiten Schritt. Das nenne /ich/
> natürlich.

Es sei Dir doch gegönnt!

> warum ist es dann nicht schon in den 80ern wieder in der Versenkung
> verschwunden, sondern ganz im Gegenteil heute - 40 Jahre später - weiter
> verbreitet denn je?

Weil es mangels besserer Mittel seine geeigneten Anwendungen hat? Leider 
tilgt das jetzt nicht automatisch die Nachteile.

> Das liegt nicht an OOP an sich

Mittelbar schon. Über die Anforderungen die mit der Verwendung 
einhergehen. Den Punkt hatten wir doch schon.

> Hast du konkrete Beispiele, woher diese angeblich so massive
> Verschwendung kommen soll?

Das stellst Du infrage? Albern.
Berühmtberüchtigt ist da das Beispiel mit dem zig Megabyte großen 
Maustreiber :) Die Verschwendung am konkreten Beispiel zu untersuchen 
hatte ich noch kein Bedürfnis, sehe aber tagtäglich die Ergebnisse! 
Mutmaßlich finden sich im Speicher eine große Anzahl von Objekten deren 
Datenfelder nie in Verwendung sind, mutmaßlich besitzen diese Programme 
intern zu viele sich aufeinander beziehende und aufbauende 
Code-Schichten und Interfaces und viel zu viele intern eigentlich 
überflüssigen Abhängigkeiten daß es schließlich zu diesen jämmerlich 
langsamen Reaktionszeiten kommt. Es hätte vielleicht in OOP Manier sogar 
besser programmiert sein können... nur, solche Experten sind dann schwer 
zu bekommen undoder es hätte zuviel Zeit gebraucht?!

Rolf M. schrieb:
> So ein Unsinn.

Stimmt. Die dicken OOP Wälzer sind nur eingebildet. Der Stefan meinte es 
wohl auch nicht ernst.

von W.S. (Gast)


Lesenswert?

MaWin schrieb:
> Es gibt überhaupt gar keinen Grund es nicht einzusetzen, wenn man es
> einsetzen möchte, weil es zero-cost ist.

Naja, es gibt schon einige Gründe mit Objekten mal nicht zu 
programmieren, als da wären:
1. die Plattform ist zu klein, weswegen es keinen Heap gibt, also auch 
keine Objekte kreiert werden können.
2. die Programmiersprache ist zu doof, weil sie keine Objekte kennt. 
Dann muß man das Ganze quasi zu Fuß nachbilden. Ist auch nicht 
jedermanns Ding.
3. Das Projekt benötigt keine Objekte. Dann wäre es nur überflüssiger 
Kram, sowas zu verwenden.

W.S.

von MCUA (Gast)


Lesenswert?

Was hat das mit Datentypen zu tun?
In ASM gibt es mehr Datentypen, als man zählen kann!
Man kann auch OO denken und programmieren in ASM; nur erzähl das mal 
einem.

von Stefan F. (Gast)


Lesenswert?

Rolf M. schrieb:
> Objekte ... können intern Ressourcen halten, die aber
> normalerweise nicht direkt nach außen exponiert werden sollten.

Das ist einer der Lehrsätze, von denen ich wenig halte.

Wenn wir von einer 3rd Party Bibliothek reden, passt das. Leider wird 
dieser Punkt teilweise dermaßen dogmatisch eingetrichtert, dass 
Programmierer ohne Bedarfsanalyse für jeden Furz Getter und Setter 
schreiben. Gerne werden dazu auch noch zahlreiche unbenutzte Methoden 
und Konstruktoren geschrieben, die niemals benutzt werden - einfach weil 
sie zum selbst definierten "Standard" dazu gehören. Sie verplempern 
unnötige Arbeitszeit und je nach Compiler läuft das Programm damit auch 
langsamer.

Ich sehe ein Problem darin, dass klassisch ausgebildete OOP 
Programmierer (Akademiker) sich oft viel zu wenig Gedanken über die 
Fähigkeiten der Hardware machen und was für einen Maschinencode der 
Compiler generiert. Sie lieben hoch komplexe Objektmodelle, wissen aber 
nicht einmal, wie ein String im Speicher abgelegt wird und welche 
Min/Max Werte ein 16 Bit Integer hat.

Da kann den Ansatz von Google schon verstehen, zumindest die Anfänger 
nicht allzu sehr mit den ausgefuchsten Feinheiten von OOP zu 
beschäftigen, sondern mit den wirklich wichtigen Dingen, die funktional 
und performance relevant sind.

von W.S. (Gast)


Lesenswert?

Rolf M. schrieb:
>> Ich versuche mal wieder, es dir zu erklären: Objekte sind Daten mit
>> einer eigenen Funktionalität.
>
> Nein. Objekte stellen eine Funktionalität bereit und können dazu intern
> Ressourcen halten,

Noch einer, der nur schwammige Vorstellungen hat.

Also: Ressourcen sind VOR jeglichem Programmlauf vorhanden und können 
weder geschaffen noch beseitigt werden. Kreiere mal auf einem AVR einen 
RAM von 100 MB. Nicht etwa vorhandenen RAM belegen, sondern den RAM 
selber kreieren... Also Objekte haben interne Daten. Das ist richtig und 
auch ihr Daseinszweck. Und nix mit "können" sondern stattdessen 
"müssen", denn ohne interne Daten können sie keinerlei eigene 
Funktionalität haben, denn dann wäre nichts da, um die Zustände, die man 
für jegliche Funktionalität benötigt, zu merken.

Es ist schon so, wie ich es geschrieben habe. Und nicht anders.

W.S.

von MCUA (Gast)


Lesenswert?

> Ich sehe ein Problem darin, dass klassisch ausgebildete OOP
> Programmierer (Akademiker) sich oft viel zu wenig Gedanken über die
> Fähigkeiten der Hardware machen und was für einen Maschinencode der
> Compiler generiert. Sie lieben hoch komplexe Objektmodelle, wissen aber
> nicht einmal, wie ein String im Speicher abgelegt wird und welche
> Min/Max Werte ein 16 Bit Integer hat.
Sachichdoch!
Die fragen 'Hardware - was ist das?'

von MCUA (Gast)


Lesenswert?

Und wenn er in einer nicht OO-Sprache schreibt?
Ist das Objekt dann verschwunden?

von MaWin (Gast)


Lesenswert?

W.S. schrieb:
> 1. die Plattform ist zu klein, weswegen es keinen Heap gibt, also auch
> keine Objekte kreiert werden können.

Selten so einen Unsinn gelesen.

> 2. die Programmiersprache ist zu doof, weil sie keine Objekte kennt.
> Dann muß man das Ganze quasi zu Fuß nachbilden. Ist auch nicht
> jedermanns Ding.

Ja. Bin davon ausgegangen, dass man eine Sprache verwendet, die OOP 
kann, wenn man OOP programmiert.
War vielleicht dumm von mir das anzunehmen.

> 3. Das Projekt benötigt keine Objekte. Dann wäre es nur überflüssiger
> Kram, sowas zu verwenden.

Was wäre denn ein Projekt, das keine Objekte "benötigt"?

von Ralf (Gast)


Lesenswert?

W.S. schrieb:
> 3. Das Projekt benötigt keine Objekte. Dann wäre es nur überflüssiger Kram,
> sowas zu verwenden.

Der Standardfall bei Mikrocontroller-Projekten.

MCUA schrieb:
> In ASM gibt es mehr Datentypen...

Das schöne daran: Die Kategorisierung als "Datentyp" brauchts noch nicht 
mal, das Programm geht schlicht mit einer Anzahl Datenbytes um. In Asm 
erkennt man erst, wieviel begrifflichen Ballast Hochsprachen mit sich 
herumschleppen.

von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Naja, es gibt schon einige Gründe mit Objekten mal nicht zu
> programmieren, als da wären:
> 1. die Plattform ist zu klein, weswegen es keinen Heap gibt, also auch
> keine Objekte kreiert werden können.

so ein Unfug. Du benutzt keine OOP, willst es aber besser wissen und der 
Welt erklären.

Wer zwingt dich Objekte auf dem Heap zu erzeugen? Und ständig erzeugen 
und zerstören zu wollen? Das ist völliger Quatsch. Die Objekte können 
genausogut einmal statisch erzeugt werden. Im Linkerscript kann man noch 
die Destruktoren für statische Objekte löschen. Spart Platz weil dieser 
Code ja nie aufgerufen wird.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Der Standardfall bei Mikrocontroller-Projekten.

Aha. Also bei einem LED-Blinker, also dem Trivialfall, kann man die LED 
bereits als Objekt implementieren.

von Stefan F. (Gast)


Lesenswert?

MCUA schrieb:
> Und wenn er in einer nicht OO-Sprache schreibt?
> Ist das Objekt dann verschwunden?

Man kann in jeder Programmiersprache objektorientiert programmieren.

von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> Also Objekte haben interne Daten. Das ist richtig und
> auch ihr Daseinszweck. Und nix mit "können" sondern stattdessen
> "müssen", denn ohne interne Daten können sie keinerlei eigene
> Funktionalität haben, denn dann wäre nichts da, um die Zustände, die man
> für jegliche Funktionalität benötigt, zu merken.

ja und wo ist das Problem? Wenn ich drei Schnittstellen habe brauche ich 
drei Fifos. Prozedural liegt der Buffer dafür irgendwo rum und ich 
brauche eine Konstante damit ich mit n Schnittstellen auch n Buffer 
habe. In OOP liegt der Buffer im Objekt, da wo er hingehört. Und mit der 
Anzahl der Instanzen hat man automatisch die richtige Anzahl Buffer. 
Nicht mehr und nicht weniger.

von J. S. (jojos)


Lesenswert?

Stefan F. schrieb:
> Man kann in jeder Programmiersprache objektorientiert programmieren.

man kann einiges zu Fuss nachbauen, die Typsicherheit wie in C++ oder 
gar Rust erreicht man damit nicht.

von Ralf (Gast)


Lesenswert?

MCUA schrieb:
> beschränkte?

In ihrer Intelligenz beschränkte!
Das hatte ich in Thread- Anfangszeiten mal thematisiert.

MaWin schrieb:
> Also bei einem LED-Blinker, also dem Trivialfall, kann man die LED
> bereits als Objekt implementieren.

Schon. Aber wieso sollte man das so umständlich denken? Was bringt das?
Die LED ist nix anderes als ein Bit im Ausgangsregister des betreffenden 
Ports. Punkt.

von Stefan F. (Gast)


Lesenswert?

MCUA schrieb:
> Und wenn er in einer nicht OO-Sprache schreibt?
> Ist das Objekt dann verschwunden?

Stefan F. schrieb:
> Man kann in jeder Programmiersprache objektorientiert programmieren.

J. S. schrieb:
> man kann einiges zu Fuss nachbauen, die Typsicherheit wie in C++ oder
> gar Rust erreicht man damit nicht.

Danach hat MCUA nicht gefragt. Er wollte wissen, ob Objekte ohne OOP 
Sprache existieren können.

Dass OOP Sprachen für OOP hilfreich sind, ist ja wohl klar. Sonst würden 
sie nicht so heißen.

von Ralf (Gast)


Lesenswert?

Stefan F. schrieb:
> ob Objekte ohne OOP Sprache existieren

Was für eine akademische nutzlose Frage.
Du kannst alles und jedes bezeichnen wie Du magst. Ich kenne nur eine 
Art Objekte: Die, die man wirklich anfassen kann. Also z.B. den 
Controller.

von Stefan F. (Gast)


Lesenswert?

Ralf schrieb:
> Was für eine akademische nutzlose Frage.

Sage das dem MCUA, nicht mir.

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> Ich kenne nur eine
> Art Objekte: Die, die man wirklich anfassen kann. Also z.B. den
> Controller.

Der Brunnenrand begrenzt den Horizont.
Das ist ganz normal.
Wundere dich nicht darüber.

von Maxe (Gast)


Lesenswert?

Stefan F. schrieb:
> Rolf M. schrieb:
>> Objekte ... können intern Ressourcen halten, die aber
>> normalerweise nicht direkt nach außen exponiert werden sollten.
>
> Das ist einer der Lehrsätze, von denen ich wenig halte.
>
> Wenn wir von einer 3rd Party Bibliothek reden, passt das.

Es sollten möglichst viele Programmteile wie eine Bibliothek aufgebaut 
sein, und intern sollten sich diese wieder anderer Programmteile 
bedienen, die idealerweise selber wie Bibliotheken aufgebaut sind. Das 
sind Abstraktionen, ohne die Programmierung nicht auskommt, aber man 
kann sie halt besser oder schlechter machen.

> Leider wird
> dieser Punkt teilweise dermaßen dogmatisch eingetrichtert, dass
> Programmierer ohne Bedarfsanalyse für jeden Furz Getter und Setter
> schreiben. Gerne werden dazu auch noch [...]

Ja, manches wird halt übertrieben.

"Programming is the compromise between abstraction and getting things 
done."- Maxe

von Uwe D. (monkye)


Lesenswert?

MCUA schrieb:
> Was hat das mit Datentypen zu tun?
> In ASM gibt es mehr Datentypen, als man zählen kann!
> Man kann auch OO denken und programmieren in ASM; nur erzähl das mal
> einem.

Ja, keiner sagt das die Applikationen dann nicht laufen. Nur ist die 
Wartbarkeit, Fehlersuche und Erweiterbarkeit nicht auf dem gleichen 
(Kosten-) Niveau.
Wer Sicherheit und Verlässlichkeit benötigt, kann natürlich auch ADA 
einsetzen. Aber auch da lauern Objekte…

von Ralf (Gast)


Lesenswert?

EAF schrieb:
> Der Brunnenrand begrenzt den Horizont.

Und die Fantasie Wolkenkuckucksheime zu bauen ist unbegrenzt.

von Stefan F. (Gast)


Lesenswert?

Maxe schrieb:
> Es sollten möglichst viele Programmteile wie eine Bibliothek aufgebaut
> sein, ... Das sind Abstraktionen

mit denen man wunderbar Arbeitszeit verplempern kann.

von Ralf (Gast)


Lesenswert?

Maxe schrieb:
> Ja, manches wird halt übertrieben.

OOP drängt förmlich zur Übertreibung.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Schon. Aber wieso sollte man das so umständlich denken? Was bringt das?

Weil diese Denkweise auch einfacher sein kann.
Abstraktionen können, wenn richtig umgesetzt, ein Programm vereinfachen.

> Die LED ist nix anderes als ein Bit im Ausgangsregister des betreffenden
> Ports. Punkt.

Nix Punkt.
Eine LED kann deutlich mehr sein, als ein Bit im Portregister.

Sie könnte Blinken, mit verschiedenen Frequenzen und Mustern, sie könnte 
ein Timeout haben, sie kann Farben haben, etc....
All diese Dinge kann man in der LED-Klasse abstrahieren.

led.blink();
led.blink_fast();
led.on();
led.off();
...

Das ist schön zu lesen, sauber gekapselt und braucht keinerlei weiterer 
Kommentare im Code.

von Uwe D. (monkye)


Lesenswert?

Stefan F. schrieb:
> Ich sehe ein Problem darin, dass klassisch ausgebildete OOP
> Programmierer (Akademiker) sich oft viel zu wenig Gedanken über die
> Fähigkeiten der Hardware machen und was für einen Maschinencode der
> Compiler generiert. Sie lieben hoch komplexe Objektmodelle, wissen aber
> nicht einmal, wie ein String im Speicher abgelegt wird und welche
> Min/Max Werte ein 16 Bit Integer hat.

Die suboptimale Ausbildung betrifft doch nicht alle jungen Entwickler. 
Und: das kann schlicht an der Ausbildungseinrichtung liegen, aber nicht 
am OOP.

> Da kann den Ansatz von Google schon verstehen, zumindest die Anfänger
> nicht allzu sehr mit den ausgefuchsten Feinheiten von OOP zu
> beschäftigen, sondern mit den wirklich wichtigen Dingen, die funktional
> und performance relevant sind.

‚Go‘ wurde nicht für talentfreie OOP Einsteiger entworfen. (eher so Kram 
wie Cloud, Nebenläufigkeit, komplexer Code)

von Uwe D. (monkye)


Lesenswert?

Ralf schrieb:
> Maxe schrieb:
>> Ja, manches wird halt übertrieben.
>
> OOP drängt förmlich zur Übertreibung.

Beschäftige Dich mal mit den Konzepten und Regeln, dann kannst Du Dir 
die Antworten selber geben.

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> Sie könnte Blinken, mit verschiedenen Frequenzen und Mustern, sie könnte
> ein Timeout haben, sie kann Farben haben, etc....
> All diese Dinge kann man in der LED-Klasse abstrahieren.

Ja, so hübsch wie überflüssig.
Hängt die LED an einem Pin hat sie fix eine Farbe. Hängt sie an mehreren 
kann sie halt mehrere haben. Für irgendwelche Frequenzen oder sonstige 
Besonderheiten langt zugeordnet jeweils eine Variable. Alles fix, alles 
hartverdrahtet, keinerlei Notwendigkeit einer wie auch immer 
ausgestalteten abstrakten Perspektive.

> led.blink();
> led.blink_fast();
> led.on();
> led.off();
> ...
> Das ist schön zu lesen

Ja, noch hübscher.
Nur setzt diese Befehlsfolge keinerlei OOP voraus. Das kann man auch als 
Makro haben. Ganz ohne Punkt, Klammern und Semikolon.

> Abstraktionen können, wenn richtig umgesetzt, ein Programm vereinfachen.

Ich nutze andauernd "Abstraktionen".
Allerdings reichen dafür anschauliche Bezeichner für Aktionen und 
Hardware-Bestandteile völlig.

von Stefan F. (Gast)


Lesenswert?

Uwe D. schrieb:
> Die suboptimale Ausbildung betrifft doch nicht alle jungen Entwickler.

Nein natürlich nicht. Aber ich habe diese Defizite bei mehreren jungen 
Akademikern gesehen. Ausgerechnet bei denen hätte ich es nicht erwartet.

Ich habe das Programmieren als 16 Jähriger einsam im Keller gelernt, als 
die Mädchen mich immer nur als guten "Kumpel" sahen. Von einer 
Universität erwarte ich viel mehr. Ist das zu viel verlangt?

von Stefan F. (Gast)


Lesenswert?

Uwe D. schrieb:
> ‚Go‘ wurde nicht für talentfreie OOP Einsteiger entworfen.

Dann lies das mal:

"The key point here is our programmers are Googlers, they’re not 
researchers. They’re typically, fairly young, fresh out of school, 
probably learned Java, maybe learned C or C++, probably learned Python. 
They’re not capable of understanding a brilliant language but we want to 
use them to build good software. So, the language that we give them has 
to be easy for them to understand and easy to adopt."

Rob Pike, Entwickler bei Google und Co-Autor von Go. Mit diesen Worten 
machte er Werbung für Go.

von Ralf (Gast)


Lesenswert?

Uwe D. schrieb:
> Und: das kann schlicht an der Ausbildungseinrichtung liegen, aber nicht
> am OOP.

Natürlich. Der Programmierer ist schuld oder die Ausbildungseinrichtung. 
Nur ja nicht die Natur von OOP. Das bleibt tabu.

Uwe D. schrieb:
> Beschäftige Dich mal mit den Konzepten und Regeln

Danke, hab ich.
Mit der Erkenntnis daß es OOP bei den Mikros nicht braucht.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Nur setzt diese Befehlsfolge keinerlei OOP voraus

Hat auch niemand behauptet.

Aber es ist offensichtlich, dass du keine Ahnung von OOP hast.
Na gut. Dann nutze es halt nicht.
Aber akzeptiere bitte, dass es Leute gibt, die es verstanden haben und 
nutzen möchten.

Mit deiner Totschlagargumentation "es geht auch anders" kann man alle 
Sachen tot schlagen.
Warum programmierst du nicht direkt im Hex-File-Format? Da ist doch 
alles drin, was man braucht. Einen Assembler oder gar eine Hochsprache 
braucht man gar nicht.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Mit der Erkenntnis daß es OOP bei den Mikros nicht braucht.

Falsch.

Deine Erkenntnis ist, dass du es nicht brauchst.

von Rolf M. (rmagnus)


Lesenswert?

Ralf schrieb:
> Rolf M. schrieb:
>> Wenn ich so in die Welt schaue, sehe ich als erstes Objekte, und dies
>> Objekte können bestimmte Dinge tun und auf bestimmte Weise miteinander
>> interagieren. Abläufe sehe ich erst im zweiten Schritt. Das nenne /ich/
>> natürlich.
>
> Es sei Dir doch gegönnt!

Danke. Ich frage mich nur, wie du die Welt siehst.

>> warum ist es dann nicht schon in den 80ern wieder in der Versenkung
>> verschwunden, sondern ganz im Gegenteil heute - 40 Jahre später - weiter
>> verbreitet denn je?
>
> Weil es mangels besserer Mittel seine geeigneten Anwendungen hat? Leider
> tilgt das jetzt nicht automatisch die Nachteile.

Das würde dann aber auch bedeuten, dass der rein prozedurale Stil noch 
weniger geeignet ist, denn sonst würde man ja den statt OOP nehmen.

>> Das liegt nicht an OOP an sich
>
> Mittelbar schon. Über die Anforderungen die mit der Verwendung
> einhergehen. Den Punkt hatten wir doch schon.

Ja, du lamentierst dauernd von dieser ach so riesigen 
Ressourcenverschwendung, die damit angeblich einhergehen soll. Die ist 
meiner Ansicht nach weitgehend eingebildet. Die kann es zwar durchaus 
geben, wenn man nicht weiß was man tut, aber das ist auch keine 
OOP-spezifische Eigenheit.

>> Hast du konkrete Beispiele, woher diese angeblich so massive
>> Verschwendung kommen soll?
>
> Das stellst Du infrage? Albern.

Was ist daran albern, wenn ich deine unbelegte Behauptung, die nicht 
meiner Erfahrung entspricht, in Frage stelle?

> Berühmtberüchtigt ist da das Beispiel mit dem zig Megabyte großen
> Maustreiber :) Die Verschwendung am konkreten Beispiel zu untersuchen
> hatte ich noch kein Bedürfnis, sehe aber tagtäglich die Ergebnisse!

Du bringst das ganz konkret mit OOP in Verbindung, aber das Problem ist 
nicht die OOP. Das Problem sind Leute, die sich nicht um den 
Ressourcenverbrauch kümmern. Davon habe ich auch schon genug Software 
ohne OOP gesehen, die das geschafft hat.

> Mutmaßlich finden sich im Speicher eine große Anzahl von Objekten deren
> Datenfelder nie in Verwendung sind, mutmaßlich besitzen diese Programme
> intern zu viele sich aufeinander beziehende und aufbauende
> Code-Schichten und Interfaces und viel zu viele intern eigentlich
> überflüssigen Abhängigkeiten daß es schließlich zu diesen jämmerlich
> langsamen Reaktionszeiten kommt.

Viele Mutmaßungen…

> Rolf M. schrieb:
>> So ein Unsinn.
>
> Stimmt. Die dicken OOP Wälzer sind nur eingebildet. Der Stefan meinte es
> wohl auch nicht ernst.

Was du meinst, sind keine "OOP-Wälzer", sondern Wälzer zu bestimmten 
komplexen Frameworks, die halt objektorientiert umgesetzt sind. Die gibt 
es auch zu nicht objektorientierten Frameworks. Schau dir nur mal den 
klassischen "Petzold" über Win32-Programmierung in C (1100 Seiten) an 
oder z.B. Bücher über OpenGL. Naturgemäß gibt es davon mehr über 
OO-basierte Frameworks, aber das liegt daran, dass es eben heute unter 
den großen Frameworks auch mehr OO-basierte gibt als andere.

Stefan F. schrieb:
> Rolf M. schrieb:
>> Objekte ... können intern Ressourcen halten, die aber
>> normalerweise nicht direkt nach außen exponiert werden sollten.
>
> Das ist einer der Lehrsätze, von denen ich wenig halte.

Naja, ich finde ihn in den meisten Fällen sinnvoll, eben aus Gründen der 
Kapselung, damit unerheblich ist, wie die Daten intern abgelegt sind und 
sich ändern können, ohne dass das für den Nutzer einen Unterschied 
macht.
Aber es gibt auch Ausnahmen. So finde ich es unsinnig, bei einer Klasse, 
die im Wesentlichen nur Daten zusammenfasst, für jedes Element einen 
Getter und einen Setter zu schreiben, nur damit der Aufrufer nicht 
direkt an die Variable kommt.

> Wenn wir von einer 3rd Party Bibliothek reden, passt das. Leider wird
> dieser Punkt teilweise dermaßen dogmatisch eingetrichtert, dass
> Programmierer ohne Bedarfsanalyse für jeden Furz Getter und Setter
> schreiben.

Genau das meine ich. Ich stimme dir zu, dass das nicht unbedingt 
sinnvoll ist.

> Gerne werden dazu auch noch zahlreiche unbenutzte Methoden
> und Konstruktoren geschrieben, die niemals benutzt werden - einfach weil
> sie zum selbst definierten "Standard" dazu gehören.

Das hängt auch etwas davon ab, wie man da herangeht. Man kann beim 
Erstellen der Klasse da alles implementieren, was einem dazu einfällt, 
oder man fängt mit einer minimalen Umsetzung an und erweitert die nach 
Bedarf. Dieses Vorgehen finde ich besser.

> Ich sehe ein Problem darin, dass klassisch ausgebildete OOP
> Programmierer (Akademiker) sich oft viel zu wenig Gedanken über die
> Fähigkeiten der Hardware machen und was für einen Maschinencode der
> Compiler generiert. Sie lieben hoch komplexe Objektmodelle, wissen aber
> nicht einmal, wie ein String im Speicher abgelegt wird und welche
> Min/Max Werte ein 16 Bit Integer hat.

Davon gibt es heute leider viele. Aber ich sehe das auch nicht als ein 
OOP-spezifisches Problem an.

W.S. schrieb:
> Rolf M. schrieb:
>>> Ich versuche mal wieder, es dir zu erklären: Objekte sind Daten mit
>>> einer eigenen Funktionalität.
>>
>> Nein. Objekte stellen eine Funktionalität bereit und können dazu intern
>> Ressourcen halten,
>
> Noch einer, der nur schwammige Vorstellungen hat.

Meine Vorstellungen sind sehr konkret. Sie sind nur anders als deine.

> Also: Ressourcen sind VOR jeglichem Programmlauf vorhanden und können
> weder geschaffen noch beseitigt werden.

Ressourcen sind für mich alles, was ein Programm benötigt. Die können 
innerhalb des Programms selbst oder außerhalb sein. Manche sind immer 
da, andere können dynamisch erzeugt werden (auf dem PC z.B. ein Fester, 
eine Datei oder eine Netzwerkverbindung).

> Kreiere mal auf einem AVR einen RAM von 100 MB. Nicht etwa vorhandenen
> RAM belegen, sondern den RAM selber kreieren...

Du scheinst Ressourcen mit Hardware gleichzusetzen. Ich tue das nicht.

> Also Objekte haben interne Daten. Das ist richtig und auch ihr
> Daseinszweck.

Das können dabei direkt Nutzdaten, aber auch z.B. sowas wie Handles 
sein, die auf externe Ressourcen verweisen.

> Und nix mit "können" sondern stattdessen "müssen", denn ohne interne
> Daten können sie keinerlei eigene Funktionalität haben, denn dann wäre
> nichts da, um die Zustände, die man für jegliche Funktionalität benötigt,
> zu merken.

Wie gesagt: Sie können auch nur sowas wie ein Handle auf die 
eigentlichen Ressourcen enthalten.

MaWin schrieb:
>> 2. die Programmiersprache ist zu doof, weil sie keine Objekte kennt.
>> Dann muß man das Ganze quasi zu Fuß nachbilden. Ist auch nicht
>> jedermanns Ding.
>
> Ja. Bin davon ausgegangen, dass man eine Sprache verwendet, die OOP
> kann, wenn man OOP programmiert.
> War vielleicht dumm von mir das anzunehmen.

Man kann schon auch OOP in Sprachen machen, die dafür keine direkte 
Unterstützung haben (siehe z.B. GTK), aber ich bin auch kein Freund 
davon.

Stefan F. schrieb:
> Ich habe das Programmieren als 16 Jähriger einsam im Keller gelernt, als
> die Mädchen mich immer nur als guten "Kumpel" sahen. Von einer
> Universität erwarte ich viel mehr. Ist das zu viel verlangt?

Ich fürchte: Ja.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Rolf M. schrieb:
> Man kann schon auch OOP in Sprachen machen, die dafür keine direkte
> Unterstützung hat (siehe z.B. GTK), aber ich bin auch kein Freund davon.

Ist mir bekannt. Siehe auch mein Beispiel: Linux Kernel.
Aber das sind alles Altprojekte.
Niemand, der halbwegs bei Verstand ist, würde im Jahr 2022 ein solches 
Projekt so starten.

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> Aber es ist offensichtlich, dass du keine Ahnung von OOP hast
MaWin schrieb:
> dass du es nicht brauchst.

Schön. So kann man eine Diskussion auch beenden. Wirkt aber nicht 
unbedingt ahnungsvoll sondern eher hilflos wenn man nicht zwingend 
begründen kann.

> Aber akzeptiere bitte, dass es Leute gibt, die es verstanden haben und
> nutzen möchten.

Ich hab es auch verstanden, will es aber NICHT nutzen. Warum nur sollte 
ich daraus jetzt folgern wollen anderen den Spaß verderben zu müssen? 
Spaß ist das Entscheidende und ich glaube OOP macht vielen (zuviel) 
Spaß. Es könnte nur, öfter als zugegeben, der reine Spaß an 
intellektuellen Denk/Abstrahierübungen sein :)

> Warum programmierst du nicht direkt im Hex-File-Format?

Nennst Du das anschaulich?
Alles hat seine Grenzen.
Nach unten wie nach oben.
Es gilt die gesunde Mitte zu treffen.
Individuell.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Nennst Du das anschaulich?

Nein. Anschaulich wäre für mich durchaus eine objektorientierte 
Implementierung.

> wenn man nicht zwingend begründen kann.

Begründungen gab es genug. Nur keine, die du akzeptierst.
Und das ist dein Problem. Nicht meins.

> will es aber NICHT nutzen

Ja dann, viel Spaß.
Und ich würde es gerne nutzen.
Wo ist jetzt noch einmal dein Problem?
Sind es deine ausgedachten Performanceeinbußen, die angeblich von OOP 
kommen sollen?

von Gerhard O. (gerhard_)


Lesenswert?

Ralf schrieb:
>> led.blink();
>> led.blink_fast();
>> led.on();
>> led.off();
>> ...

Das kann man durch vielerlei Facetten sehen.

"led.on()" sieht zwar sehr sauber aus. Nur muss man jetzt anderswo 
nachschauen wie und wo das im Detail gemacht wird. Wenn ich an uC HW 
arbeite ist mir eigentlich "PORTC |= (1<<7) lieber; sofort im Kontext 
meiner HW sichtbar und ich kann den PIN sofort ändern wenn es mir 
belieben sollte. Mit funktionellen MAKROs kann man es noch etwas 
"verschönern".

Gerade beim experimentieren ist es praktisch wenn ich direkt in der 
Funktion die HW schnell ändern kann ohne mich anderswo durchsichten zu 
müssen. Gerade wenn man sich nach einem Jahr wieder durchwursteln will 
ist es oft ärgerlich wenn man sich nicht mehr erinnert welche Header 
Dateien konsultiert werden müssen. Wenn man gerade wochenlang daran 
arbeitet, kennt man alles im Schlaf. Ist aber nach längerer Zeit nicht 
mehr so zugänglich.

Dann kommt noch dazu, dass man in einen gemeinsamen Header File oder am 
Anfang alle PORT Definitionen auf einmal überblicken kann.

Wenn man wirklich schnell mit der HW umgehen will, ist mir weniger als 
mehr Abstraktion 1000 mal lieber.

Es kommt halt darauf an was man gerade machen will. Wer professionelle 
permanente Anwendungen ins Leben rufen will, sieht das natürlich ganz 
anders.

Was mich betrifft ziehe ich eben die direkte Art des Programmieren vor. 
Ist halt nicht mehr so zeitgemäß, mir passt es aber so besser und ich 
habe einen besseren Überblick. Ich will alles übersichtlich geordnet 
haben und sofort auffindbar. Beim HW-Nahes Vorgehen ist das ein Vorteil.

Wenn ich HW entwickle denke ich gleich in parallel welche Auswirkungen 
meine HW-Entscheidungen auf die FW-Entwicklungs-Komplexität hat. Ich 
sehe das nicht in Isolation. Auf diese Weise kann man sich manchmal 
recht unangenehme Umwege ersparen.

Auch wenn man etwas forensisch durchgehen will, finde ich OOP irgendwie 
unübersichtlicher. In prozeduralen Sprachen ist das (für mich) 
irgendwie klarer.

Wenn man mit Zustandsmaschinen viel macht, da finde ich nicht-OOP aus 
meiner Sicht auch irgendwie zweckmäßiger.

Ich denke die Ansichten gehen wie bei der Religion weit auseinander. Ich 
bin für HW-Nahes Vorgehen um so wenig wie möglich Abstraktion zwischen 
SW und HW zu haben. Aber das ist auf mich bezogen und ist weder falsch 
oder richtig, es betrifft lediglich mich.

Der Einzige, der die Autorität hat, zu bestimmen, ist der Chef der für 
das Projekt verantwortlich ist und bezahlt. Wenn der will dass alles in 
OOP gemacht wird, so wie das hier geschildert wurde, dann wird es eben 
so gemacht. Alte Säcke wie mich, würde er überhaupt nicht kennen 
wollen;-)

Ich setze OOP Methoden nur dort ein, wo es für die Anwendung vom 
HW-Standpunkt klare Vorteile hat.

Jedenfalls höre ich mir hier gerne an wie "die andere Seite" es macht, 
bin bereit zu lernen wenn ich davon einen Vorteil sehe und sehe mir vom 
perspektivisch vom Gipfel gerne an wie andere es machen;-)

Diesen Lehrsatz finde ich recht praxisnah:

"A designer knows he has achieved perfection not when there is nothing 
left to add, but when there is nothing left to take away"

Antoine de Saint-Exupery

Moderne SW könnte sich da wahrscheinlich eine Scheibe abschneiden.

Das trifft auf embedded Designs und Technik im Allgemeinen ganz 
besonders zu.

Als alter Sack finde ich den "digitalen" Weg, den die Menschheit gehen 
will, bedenklich, weil es augenscheinlich mehr und mehr darauf 
hinausläuft den Benutzern die infinitesimal "in a thousand cuts" seine 
Autonomie wegzunehmen. Beispiele dafür gibt es genug in der Wirtschaft.

von Ralf (Gast)


Lesenswert?

Rolf M. schrieb:
> Ich frage mich nur, wie du die Welt siehst.

Ich sehe die Welt wie sie ist: Als Hardware die programmiert wird wonach 
diese denn verlangt um einen bestimmten Zweck zu erfüllen. Auf direktem 
Wege!
Da muß man kein künstliches Objekte-Weltbild dazwischen/darüberlegen.

> Das würde dann aber auch bedeuten, dass der rein prozedurale Stil noch
> weniger geeignet ist

Unter Umständen ja.
Der Stein des Weisen ist da noch nicht gefunden. Möglicherweise überholt 
uns das Quantencomputing ja schon bis es soweit ist. Bis dahin streiten 
sich selbst die OOP Experten untereinander!

Rolf M. schrieb:
> Viele Mutmaßungen…

an denen vermutlich was dran ist!
Oder etwa nicht? Was könnte den Speicher sonst so verstopfen, die 
nächstgrößere SSD Bestellung forcieren, die Programme verlangsamen? 
Geheime Kräfte?

von MaWin (Gast)


Lesenswert?

Gerhard O. schrieb:
> Wer professionelle
> permanente Anwendungen ins Leben rufen will, sieht das natürlich ganz
> anders.

Ja ok.
Ich sprach jetzt die ganze Zeit nicht von Hobby-Frickelkram, sondern von 
ernsthafter Softwareentwicklung.

Gerhard O. schrieb:
> "led.on()" sieht zwar sehr sauber aus. Nur muss man jetzt anderswo
> nachschauen wie und wo das im Detail gemacht wird. Wenn ich an uC HW
> arbeite ist mir eigentlich "PORTC |= (1<<7) lieber;

Pardon, du musst bei led.on() irgendwo nachschauen, was gemacht wird und 
bei PORTC |= (1<<7) nicht?
Was ist denn mit dir los?

Bei mir ist das genau anders herum. Um herauszufinden, was PORTC |= 
(1<<7) macht, muss ich mindestens einmal den Schaltplan konsultieren.

Es ist doch 99% der Zeit völlig egal, welcher Pin konkret geschrieben 
wird. Und deshalb abstrahiert man das in etwas lesbares weg.
Mit OOP hat das noch gar nichts zu tun. Nur mir gesundem 
Menschenverstand.

von DANIEL D. (Gast)


Lesenswert?

Mein Gott ihr Heulsusen Lebenszeit ist nun mal begrenzt, alles hat vor 
und Nachteile, und manchmal funktioniert das eine und auch das andere.

Oder anders ausgedrückt ich kaufe mir doch keinen Bagger um den Garten 
umzugraben.

Die Diskussion ist so dermaßen sinnlos. Es wird komplett aneinander 
vorbei diskutiert.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> an denen vermutlich was dran ist!
> Oder etwa nicht?

Genau. Ziemlich sicher nicht.

> Was könnte den Speicher sonst so verstopfen, die
> nächstgrößere SSD Bestellung forcieren, die Programme verlangsamen?

Die Zero-Cost-Abstraktionen schon einmal per Definition nicht.
Die brauchen keinerlei Laufzeit und keinerlei Speicher.

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> Ziemlich sicher nicht.

Aufstampf! Dir ist doch sicher klar daß so ein einsamer Satz kaum 
Überzeugungspotential hat?

> Die Zero-Cost-Abstraktionen schon einmal per Definition nicht.
> Die brauchen keinerlei Laufzeit und keinerlei Speicher.

Was es stattdessen verbrät hatten wir ja nun schon erläutert. Man darf 
angesichts der Thread-Länge aber gut und gerne aufs Vergessen setzen :)

DANIEL D. schrieb:
> alles hat Vor- und Nachteile

Das passt immer!
Was Fans jeweils davon höher gewichten und sturer abstreiten dürfte klar 
sein.

von MCUA (Gast)


Lesenswert?

>>> Und wenn er in einer nicht OO-Sprache schreibt?
>>> Ist das Objekt dann verschwunden?
>> ob Objekte ohne OOP Sprache existieren
> Sage das dem MCUA, nicht mir.
Ihr hat den Sinn dahinter nicht verstanden.
Es gibt überhaupt kein Programm, dass nicht auch als Objekt angesehen 
werden kann.
Daran sieht man das Geschwafel hier.
Selbst die Hollerith-Maschinen von 1887 bestanden aus Objekt(en) (die 
anders aussahen)

von J. S. (jojos)


Lesenswert?

Gerhard O. schrieb:
> Wenn ich an uC HW
> arbeite ist mir eigentlich "PORTC |= (1<<7) lieber;

Hmm, mein Compiler wirft einen Fehler weil er PORTC nicht kennt.

Es geht doch dabei um Abstraktion. Und die DigitalOut oder was auch 
immer Klasse wird als Komponente getestet damit ich mich darauf 
verlassen kann. Ein guter Editor springt auch gleich mit ctrl-klick zum 
Quellcode und gitlens zeigt mir gleich wer den Code wann verbrochen hat.
Und spätestens bei komplexeren Hardwareschnittstellen ist das mit direkt 
eingebettetem Code vorbei oder komplett unleserlich.

MaWin schrieb:
> Niemand, der halbwegs bei Verstand ist, würde im Jahr 2022 ein solches
> Projekt so starten.

doch, die Zephyr Macher. Aber die haben wohl beim Linux Kernel 
abgeguckt.

DANIEL D. schrieb:
> Die Diskussion ist so dermaßen sinnlos. Es wird komplett aneinander
> vorbei diskutiert.

Nein, da werden unbewiesene Behauptungen in den Raum geworfen. Da wird 
vor OOP abgeschreckt. Wer sich dafür interessiert sollte z.B. den 
Stroustrup Klassiker kaufen, aber nicht auf Leute wie Ralf oder W.S. 
hören.

: Bearbeitet durch User
von Ralf (Gast)


Lesenswert?

J. S. schrieb:
> Wer sich dafür interessiert sollte z.B. den Stroustrup Klassiker kaufen,

Unbedingt J.S.
So hab ich das auch gehandhabt.
Lass danach den Leuten aber die Freiheit, zu einer eigenen Entscheidung 
zu kommen. Dann ist alles gut.

von J. S. (jojos)


Lesenswert?

Ralf schrieb:
> Lass danach den Leuten aber die Freiheit, zu einer eigenen Entscheidung
> zu kommen. Dann ist alles gut.

klar, aber wo steht da drin das es alles Resourcenverschwendung ist oder 
Objekte dynmaisch erzeugt werden müssen?

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Aufstampf! Dir ist doch sicher klar daß so ein einsamer Satz kaum
> Überzeugungspotential hat?

Du bist doch hier derjenige, der überzeugen will, dass OOP schlecht ist.
Bisher hat das noch nicht funktioniert.

Versuche es also weiter.

> Was es stattdessen verbrät hatten wir ja nun schon erläutert.

Aha. Habe ich nicht mitbekommen. Kannst du es noch einmal 
zusammenfassen?

von DANIEL D. (Gast)


Lesenswert?

J. S. schrieb:
> klar, aber wo steht da drin das es alles Resourcenverschwendung ist oder
> Objekte dynmaisch erzeugt werden müssen?

Vielleicht ist es Ressourcenverschwendung etwas zu lernen was man nicht 
unbedingt braucht.

von J. S. (jojos)


Lesenswert?

ja, wenn man mit der Einstellung 'das will ich nicht' rangeht, dann ist 
es vergeudete Zeit.
Deshalb schrieb ich 'wer sich dafür interessiert'.

: Bearbeitet durch User
von Ralf (Gast)


Lesenswert?

J. S. schrieb:
> das es alles Resourcenverschwendung ist

1: Woher sich die ableitet hab ich erklärt.
2: Ständige Wiederholungen langweilen.

MaWin schrieb:
> Du bist doch hier derjenige, der überzeugen will, dass OOP schlecht ist.

3:Sie hat ihr Einsatzgebiet, ersetzt aber längst nicht alles. Davon war 
die Rede.
Bist Du persönlich gekränkt?

MaWin schrieb:
> Kannst du es noch einmal zusammenfassen?

GOTO 2

von Ralf (Gast)


Lesenswert?

J. S. schrieb:
> ja, wenn man mit der Einstellung 'das will ich nicht' rangeht,
> dann ist es vergeudete Zeit.
> Deshalb schrieb ich 'wer sich dafür interessiert'.

Du scheinst nur davon auszugehen daß das Studium der Fachkektüre 
automatisch zu Begeisterung und lebenslanger Anwendung führt. Das ist 
ein Irrtum.

von J. S. (jojos)


Lesenswert?

Ralf schrieb:
> 1: Woher sich die ableitet hab ich erklärt.

nein, nur behauptet das OOP nur für Programme und Daten im 100 MB 
Bereich gebraucht würde. Das ist keine Erklärung.

von MCUA (Gast)


Lesenswert?

> Die Zero-Cost-Abstraktionen schon einmal per Definition nicht.
> Die brauchen keinerlei Laufzeit und keinerlei Speicher.
Wenn es aber zur Laufzeit mehrere Klassen durchläuft, die ihrerseits 
erst mal Berechnungen usw durchführen (müssen), sind es keine 
Zero-Cost-Abstraktionen.

von Ralf (Gast)


Lesenswert?

J. S. schrieb:
> nein, nur behauptet das OOP nur für Programme und Daten im 100 MB
> Bereich gebraucht würde. Das ist keine Erklärung.

Nun beginnt wohl die Phase sich beliebiges aus den Fingern zu saugen?
Belassen wir es dabei!

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> Ich sehe die Welt wie sie ist

Das ist nicht wahr!
Das ist gelogen.

Deine Sinne und Wahrnehmung sind begrenzt.
Unbekanntes wird mit Fantasiegebilden ausgefüllt.


Nein, was du sieht ist nur eine Projektion.
Du selber projizierst dein inneres Bild, der Welt, auf die Welt.
Und dieses siehst du, mehr nicht.

Aufmerksame Zeitgenossen bemerken wenn sich Sprünge/Fehlerstellen in der 
Projektion bilden und korrigieren ihr Weltbild.

von MaWin (Gast)


Lesenswert?

MCUA schrieb:
> Wenn es aber zur Laufzeit mehrere Klassen durchläuft, die ihrerseits
> erst mal Berechnungen usw durchführen (müssen), sind es keine
> Zero-Cost-Abstraktionen.

Schöner kann man seine Unkenntnis kaum noch zur Schau stellen.

Ralf schrieb:
>> Kannst du es noch einmal zusammenfassen?
>
> GOTO 2

Kommt also nichts mehr.
Auch gut.

> Bist Du persönlich gekränkt?

Dass ich mich von einem anonymen Nichtsblicker aus dem Internet 
persönlich kränken lasse. Soweit wirds noch kommen. Ganz bestimmt.

von Ralf (Gast)


Lesenswert?

MCUA schrieb:
> Wenn es aber zur Laufzeit mehrere Klassen durchläuft, die ihrerseits
> erst mal Berechnungen usw durchführen (müssen), sind es keine
> Zero-Cost-Abstraktionen.

Lass gut sein.
Am Beispiel EAF ist abzulesen wozu zuviel OOP Gegenwind führt. Das wird 
dann allzu irrational.

von DANIEL D. (Gast)


Lesenswert?

Es wird sicher seine vielen unterschiedlichen Gründe haben dass man für 
diese oder jene Anwendung jeweils das eine oder andere bevorzugt. 
Immerhin ist sowohl das eine als auch das andere weit verbreitet.

Über die Grenze zu diskutieren wann das eine oder andere sinnvoller ist, 
ergibt keinen Sinn, da sie sicher fließend mit reichlich 
Überschneidungen verläuft.

von Uwe D. (monkye)


Lesenswert?

Stefan F. schrieb:
> Uwe D. schrieb:
>> ‚Go‘ wurde nicht für talentfreie OOP Einsteiger entworfen.
>
> Dann lies das mal:
>
> "The key point here is our programmers are Googlers, they’re not
> researchers. They’re typically, fairly young, fresh out of school,
> probably learned Java, maybe learned C or C++, probably learned Python.
> …..

Stefan, den Aspekt will ich nicht klein reden. Also ich habe >20 Jahre 
im direkten MS-Umfeld verbracht und das, was nicht mit den alten Zöpfen 
gut ging, war alles rund um Azure und dessen Ökosystem…

Und Google bzw. AWS haben das gleiche Thema. Das haut in die selbe Kerbe 
wie RUST (da gibt es hier ja auch so einen schönen Thread) & Co.

von MCUA (Gast)


Lesenswert?

>> Wenn es aber zur Laufzeit mehrere Klassen durchläuft, die ihrerseits
>> erst mal Berechnungen usw durchführen (müssen), sind es keine
>> Zero-Cost-Abstraktionen.
> Schöner kann man seine Unkenntnis kaum noch zur Schau stellen.
Was du nicht alles sagst.
Du schreibst statt kompaktem Code zig Klassen, die mit Codierung alle 
erst mal durchlaufen werden müssen, und laberst dann was von 
'Zero-Cost-Abstraktionen'. Träum weiter.

von MCUA (Gast)


Lesenswert?

> Kannst du es noch einmal zusammenfassen?
Kannst du lesen?

von MCUA (Gast)


Lesenswert?

Die Anzahl 'seiner' Klassen, die in WIRKLICHKEIT 
'Zero-Cost-Abstraktionen' sind: Keine!

von Le X. (lex_91)


Lesenswert?

Wurde "Moby" hier schon erwähnt?

von Ralf (Gast)


Lesenswert?

Der Empfindlichkeit mancher Leute merkt man klar an, wieviel 
Wunschdenken, wieviel Dogmatik, wieviel Ideologie hier im Spiel ist. Ihr 
schönes Denk-Spielzeug darf keinesfalls kritisiert werden, dann sind sie 
gleich auf 180. Da dreht sich offensichtlich das ganze Selbstverständnis 
drum.
Ich programmiere ja auch aus Leidenschaft, aber so mag ich nicht enden! 
Schönen Sonntag noch!

von Rolf M. (rmagnus)


Lesenswert?

Ralf schrieb:
> Der Empfindlichkeit mancher Leute merkt man klar an, wieviel
> Wunschdenken, wieviel Dogmatik, wieviel Ideologie hier im Spiel ist.

Ja, und zwar auf beiden Seiten.

> Ich programmiere ja auch aus Leidenschaft, aber so mag ich nicht enden!

Ich fürchte, dafür ist es zu spät.

> Schönen Sonntag noch!

Ebenso.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Der Empfindlichkeit mancher Leute merkt man klar an, wieviel
> Wunschdenken, wieviel Dogmatik, wieviel Ideologie hier im Spiel ist. Ihr
> schönes Denk-Spielzeug darf keinesfalls kritisiert werden, dann sind sie
> gleich auf 180. Da dreht sich offensichtlich das ganze Selbstverständnis
> drum.

Dieser Aussage stimme ich durchaus zu 110 % zu.

von EAF (Gast)


Lesenswert?

Ralf schrieb:
> Leidenschaft

Ist das, was Leiden schafft.

Du armes kleines Föschlein....
Musst ganz alleine ... im Brunnen ... dein Leiden erschaffen.
Keiner möchte zu dir, in deinen Brunnen.

Vielleicht ist das stickige düstere Loch ja doch nicht das gelbe vom Ei.

Tipp: Es gibt eine Außenwelt. Du musst nicht alleine in dem Loch 
verrotten.



MCUA schrieb:
> In ASM gibt es mehr Datentypen, als man zählen kann!
Jau!
Und nachts ist es kälter als draußen.

Beitrag #7281948 wurde von einem Moderator gelöscht.
Beitrag #7281949 wurde von einem Moderator gelöscht.
von Frank O. (frank_o)


Lesenswert?

Gerhard O. schrieb:
> Irgendwie finde ich die häufigen pauschale Abwertungen im Forum
> unangebracht, weil sie zu subjektiv sind und meist professionellen
> Standards und Gewohnheiten zugrunde liegen. Man darf nicht immer von
> sich auf andere schließen. Ein Neuling wird das ohnehin nicht so
> empfinden können.

Hallo mein lieber Gerhard!
Warum machen das manche hier? Ganz klar für mich. Die mussten sich 
früher durch quälen und nun kommt jemand daher und entwickelt wirklich 
was richtig Tolles und ohne wirklich genau jedes Bit zu kennen. Er muss 
sich nur seiner Kreativität widmen, was vermutlich diese anderen Typen 
gar nicht haben. Die können nur ihre Bits schieben. Natürlich nicht 
alle.
Was ist so schlimm daran, wenn das mit "KlickiBunt" klappt?
Wir hätten wohl immer noch keine Fernbedienung, Klimaanlagen und 
Standheizungen oder SmartHome, wenn wir nicht nach dem Bequemen streben 
würden.
Leider haben andere früher mit meinen Ideen Geld, sogar viel Geld 
verdient.
Wären die Sachen so einfach gewesen, also "KlickiBunt", dann hätte ich 
diese Projekte alle selbst entwickelt und wäre heute womöglich richtig 
reich.
Ich glaube diese Typen haben nur Angst, weil es das Einzige ist, was sie 
wirklich gut können.
Habe in meinem Beruf als Fluggerätemechaniker mal einen Typen kennen 
gelernt, der kannte alle Bestellnummern und Schlüsselweiten aus dem 
Kopf. Nur wenn es um komplexe Problemlösungen ging, da war er draußen.
Der ritt auch immer drauf rum, dass ich nicht immer sofort wusste 
welchen Schlüssel ich brauche und dass ich mir die Nummern nicht merkte.
Ich war insgesamt ein Jahr in dem Unternehmen. Schon nach kurzer Zeit 
holte der Chef mich immer bei Problemen dabei und der Typ stand in 
zweiter Reihe, mit großen Augen.
Diese Typen haben nur eine Sache richtig drauf, aber auch nur, weil sie 
das ewig machen. Keiner weiß mehr was die im Anfang für schlechte 
Anfänger waren.

Beitrag #7283617 wurde von einem Moderator gelöscht.
von Frank O. (frank_o)


Lesenswert?

Ralf schrieb im Beitrag #7283617:
> Das hatte der Gerhard doch gar nicht für schlimm befunden.

Gerhard war auch gar nicht gemeint.
Ich habe das nur aufgegriffen.

Habe ich übrigens auch geschrieben, dass das nicht alle sind.
Aber hier gibt es zwei, drei Leute, die meinen man müsste erstmal 
Assembler und dann C und überhaupt ganz viel Elektronik lernen und erst 
dann, nach ganz langer Zeit, dürfen sie einen Mikrocontroller 
programmieren.
Die wollen im Grunde nicht, dass das jeder kann. Maximal Gleichgesinnte 
dürfen dazu stoßen.
Aber zum Glück haben die nichts zu sagen und können nur mit ihren 
abwertenden Bemerkungen kommen.

Beitrag #7283639 wurde von einem Moderator gelöscht.
von EAF (Gast)


Lesenswert?

Ralf schrieb im Beitrag #7283639:
> Nun kommt ein Anfänger mit Arduino vorbei und baut
> womöglich das gleiche Projekt mit viel einfacheren
> Mitteln.
Welche dann C++ sind.

Beitrag #7283646 wurde von einem Moderator gelöscht.
von EAF (Gast)


Lesenswert?

Ralf schrieb im Beitrag #7283646:
> Assembler
Nein!
Die von dir beschriebene "schnelle+einfache Projektentwicklung" beruht 
bei Arduino auf C++.
Sowas wäre in ASM nicht erreichbar.

von J. S. (jojos)


Lesenswert?

EAF schrieb:
> Ralf schrieb:
>> Nun kommt ein Anfänger mit Arduino vorbei und baut
>> womöglich das gleiche Projekt mit viel einfacheren
>> Mitteln
> Welche dann C++ sind.

Naja, viele Anfänger halten es für eine Arduino Sprache. Und sie 
benutzen die vorhandenen Objekte, C++ programmieren würde ich das noch 
nicht nennen. Aber man ist auf einer guten Spur und kann alles nutzen 
und erstellen was die Sprache hergibt.

von J. S. (jojos)


Lesenswert?

Aber das scheint in der Tat ein Punkt zu sein, das den selbstherrlichen 
Königen da ein Zacken aus der Krone bricht.

von W.S. (Gast)


Lesenswert?

MaWin schrieb:
> Pardon, du musst bei led.on() irgendwo nachschauen, was gemacht wird und
> bei PORTC |= (1<<7) nicht?

Das allegemeine aneinander-vorbei-Heulen ist ja noch nicht zuende - 
oder?
Also, mal zum gefälligen Bedenken:

1. led.on() setzt das Definieren und Kreieren eines Objektes voraus. 
Wenn man das in der Ebene der Algorithmen macht, dann schafft man damit 
einen eigentlich unerwünschten Hardwarebezug. Alternative: Sowas in eine 
separaten Quelle für die Lowlevel-Dinge tun. Allerdings ist dann die 
Frage, wieso man dort dafür erst noch ein Objekt schaffen will, denn mit 
einer ganz simplen Funktion led_on() ist das viel einfacher erledigt. 
Kein Definieren, Kreieren und Destruieren eines Objekts, keine VMT, nix 
außer der nackten Funktionalität des Ausschaltens.
2. Das Unterbringen von sowas wie PORTC |= (1<<7) in der Ebene der 
Algorithmen kann je nach Anzahl der Verwendungen Platz oder Zeit sparen, 
ist vergleichbar mit inline. Aber es schafft auch einen derben 
Hardwarebezug und macht jegliches Portieren schwer. Sowas käme bei ganz 
kleinen und/oder langsamen Plattformen in Frage. Leserlich wird es, wenn 
man es durch einen passenden Kommentar ergänzt - was ich für guten Stil 
halte.

So, wärend es für PORTC |= (1<<7) durchaus Gefilde gibt, wo sowas in 
Ordnung ist, gibt es für led.on() eigentlich keinen sinnvollen Grund. 
Falls es sich nicht um eine LED oder sonstige Lampe etc. handelt, 
sondern um einen Button auf dem Grafikdisplay, dann sieht das völlig 
anders aus. Der ist dann nämlich ein Objekt und hat Zustände, die 
optisch signalisiert werden können.

Hier hätten wir also den Unterschied zwischen Hardware und Software mal 
wieder vor Augen. Viel wichtiger ist allerdings der Verlauf dieses 
Threads: Hier zeigt sich deutlich, weswegen genau das Thema des Threads, 
also das Verwenden von eigentlich zu großen/schnellen Plattformen 
passiert: Anstatt eine einfache und zugleich saubere Lösung einer 
Aufgabe zu wählen, wird zu immer aufgedunseneren Methoden gegriffen, 
bloß um es im Quelltext so sparsam wie möglich stehen zu haben. Was 
dadurch eigentlich an Folgen verursacht wird, ist den Leuten egal.

W.S.

Beitrag #7283664 wurde von einem Moderator gelöscht.
von J. S. (jojos)


Lesenswert?

W.S. schrieb:
> 1. led.on() setzt das Definieren und Kreieren eines Objektes voraus.

und das ist gut so. Im Konstruktor kann der angegebene Pin als Ausgang 
konfiguriert werden. Das gehört ja zusammen und damit Kapitel 1 
'Kappselung' abgehakt.
Beim prozeduralen Ansatz muss vorher der Ausgang separat konfiguriert 
werden. Das ist ein typischer Anfängerfehler in Arduino, das wird oft 
vergessen. Ja, hier ist Arduino inkonsequent und prozedural statt OOP. 
Aber es war enie Entscheidung der Arduino Macher vor X Jahren, ist so.

von DANIEL D. (Gast)


Lesenswert?

Frank O. schrieb:
> Habe ich übrigens auch geschrieben, dass das nicht alle sind.
> Aber hier gibt es zwei, drei Leute, die meinen man müsste erstmal
> Assembler und dann C und überhaupt ganz viel Elektronik lernen und erst
> dann, nach ganz langer Zeit, dürfen sie einen Mikrocontroller
> programmieren.
> Die wollen im Grunde nicht, dass das jeder kann. Maximal Gleichgesinnte
> dürfen dazu stoßen.
> Aber zum Glück haben die nichts zu sagen und können nur mit ihren
> abwertenden Bemerkungen kommen.

Also ich behaupte mal, wer irgendwelches Wissen oder Fähigkeiten 
abwertet ist doof. Zu behaupten man brauche kein Wissen über ASM, oder 
Elektronik, hat doch eigentlich das gleiche Niveau wie wenn man 
behauptet man bräuchte kein OOP.

Jedes Nichtwissen schränkt immer ein, genauso wie wenn man irgendwelche 
Fähigkeiten nicht besitzt.

Ich kann das nicht also ist es doof. Kindergarten.

von EAF (Gast)


Lesenswert?

Ralf schrieb im Beitrag #7283664:
> Daß weiß jeder Kenner der Materie.

ASM kennt keine Datentypen
ASM warnt nicht
usw.

Diese klaren Hints, Warnungen helfen deutlich den C und C++ Arbeiten 
viel schneller  fertig zu werden.

Jeder Handwerker weiß, dass er mit gutem Werkzeug schneller zurande 
kommt.

Ralf schrieb im Beitrag #7283664:
> Das mag darauf beruhen,
Es mag nicht, sondern es beruht darauf!
Modularität, Wiederverwendbarkeit und Portabilität!
> Einmal schreiben überall verwenden

Wieviel µC werden von Arduino unterstützt, mehr oder weniger direkt?
Wohl ALLE, für die es einen Gcc mit C++ gibt.

Wieviel µC unterstützt dein Assembler?
Eine Familie!
Keinerlei Portabilität mit anderen µC Familien.
Null.

Ja, ich weiß, DU in deinem AVR ASM Brunnen brauchst das alles nicht.
Aber verallgemeinern, lässt sich das nicht.
Dein Horizont ist eben dein Horizont.
Mehr nicht.

Beitrag #7283688 wurde von einem Moderator gelöscht.
von EAF (Gast)


Lesenswert?

DANIEL D. schrieb:
> Ich kann das nicht also ist es doof. Kindergarten.

Ja, so wirds wohl meist sein!
Die ASM Priester sind an C/C++ gescheitert.
Die OOP Ablehner an C++/OOP

Das ist ja auch noch OK....
Auf allen Ebenen kann man was bringen!
Ein guter ASM Programmierer ist mir alle male lieber, als ein 
Schaumschläger, der mir meine Lieblingssprache kaputtquatschen will, dem 
man bei jedem Wort auch noch anmerkt, dass er Null Ahnung davon hat.

von DANIEL D. (Gast)


Lesenswert?

Ralf schrieb im Beitrag #7283688:
> DANIEL D. schrieb:
>> Jedes Nichtwissen schränkt immer ein
>
> Das ist nur richtig im Rahmen Deiner Feststellung zuvor:
> DANIEL D. schrieb:
>> Vielleicht ist es Ressourcenverschwendung etwas zu lernen was man nicht
>> unbedingt braucht

Das hat aber eher was damit zu tun dass man als Mensch normal gewisse 
Beschränkungen hat. Und gewisse Dinge sehr zeitaufwendig sind. Also muss 
man halt schauen was man will.

Es ist nun mal so dass ich keine zehn Programmiersprachen beherrsche, 
und dann noch zehn Instrumente spielen kann, und dazu noch acht 
verschiedene Sprachen spreche. Und natürlich in 20 verschiedenen 
Sportarten Profi bin.

Die eigene Unfähigkeit setzt einem halt gewisse Grenzen.

von J. S. (jojos)


Lesenswert?

DANIEL D. schrieb:

> Das hat aber eher was damit zu tun dass man als Mensch normal gewisse
> Beschränkungen hat. Und gewisse Dinge sehr zeitaufwendig sind. Also muss
> man halt schauen was man will.

Das verstehe und akzeptiere ich, nur im direktem Vergleich von C und C++ 
erkenne ich die Vorteile bei letzterem. Und ich habe gut 20 Jahre wie am 
Fließband programmiert.
Ein Kollege und ich hatten auch mal den Versuch unternommen C++ bzw. OOP 
zu vermitteln. Das war auch erfolglos, es fehlte aber auch der Druck das 
verstehen und anwenden zu müssen. Und es war lange lange vor der Arduino 
Zeit.

> Die eigene Unfähigkeit setzt einem halt gewisse Grenzen.

So eine Resignation ist auch kein guter Startpunkt, das muss man schon 
wertfrei angehen und versuchen zu verstehen was OOP versucht anders zu 
machen.

Interessant ist noch das ein Arduino User auch ohne C++ Kenntnisse 
Objekte benutzen kann. Wie ein bekannter User hier im Forum es Punkt 
Menus in der IDE nennt. Dann hat eine Variable eben 
.irgendeine_Funktion(). Und irgendwie ist es einleuchtend das es 
Serial.print() und Serial.println() usw gibt.

Beitrag #7283711 wurde von einem Moderator gelöscht.
von EAF (Gast)


Lesenswert?

Ralf schrieb im Beitrag #7283711:
> EAF schrieb:
>> ASM kennt keine Datentypen
>
> Das ist auch sehr gut so.
> Bürokratie, die ich sofort entsorgen würde.
> Die Gedanken sind frei so wie die Anzahl verwendeter Datenbytes.

Du möchtest die Sinnhaftigkeit von Datentypen und strenger(?) 
Typisierung negieren?
Dein Ernst?
evtl. die letzten 60 Jahre, in deinem Brunnenfroschdasein, verschlafen?

Herrlich absurd, wenn da nur nicht diese Priester Attitüden wären

von MCUA (Gast)


Lesenswert?

Das Literarische Quartett.

Beitrag #7283732 wurde von einem Moderator gelöscht.
Beitrag #7283735 wurde von einem Moderator gelöscht.
von Gerd (Gast)


Lesenswert?

Bei Arduino geht es um Einfachheit für den Programmierer. Einfachheit 
ist Trumpf.

Die TTB (Time To Blink, die Zeit der ersten Inbetriebnahme der IDE und 
dem anschließen des Mikrocontrollers, bis er blinkt) ist bei Arduino 
unschlagbar und dürfte so bei ca. 5 Minuten liegen. Das bietet keine 
andere IDE. Die Verfügbaren Anleitungen im Internet sind unendlich. Auf 
einem ESP32 kann man mit dem Arduino Framework Anwendungen mit WiFi 
erzeugen, die mit einem anderen System erst nach Jahren gemacht werden 
könnten.

Wenn es interessiert, kann auch mal die Geschichte zu BASIC nachlesen. 
Das würde erst auch als einfaches Tool für Wirtschaftsingenieure 
entwickelt, um ihnen das Programmieren beizubringen. Es war nicht als 
ernsthafte Programmiersprache gedacht. Da alles andere zu der Zeit aber 
extrem kompliziert war und nur von Experten programmiert werden konnte, 
hatte es eine unglaubliche Verbreitung erreicht, auch wenn es heute 
längst durch besser Alternativen ersetzt wurde.

von M. K. (sylaina)


Lesenswert?

J. S. schrieb:
> Hmm, mein Compiler wirft einen Fehler weil er PORTC nicht kennt.
>
> Es geht doch dabei um Abstraktion. Und die DigitalOut oder was auch
> immer Klasse wird als Komponente getestet damit ich mich darauf
> verlassen kann.

Wäre doch gut, wenn dir schon dein Compiler sagt, dass es den Port, den 
du verwenden willst, nicht gibt. Bei deiner Abstraktion weißt du erst, 
dass es nicht funktionieren kannst, wenn du versuchst am Mikrocontroller 
verzweifelt eine LED an den nicht vorhanden PORTC anzuschließen... ;)

Es hat halt alles seine Vor- und Nachteile. ;)

von MaWin O. (mawin_original)


Lesenswert?

M. K. schrieb:
> Es hat halt alles seine Vor- und Nachteile. ;)

Wie bereits gesagt: Man kann machen Abstraktionen gut; man kann machen 
Abstraktionen schlecht.
Die Arduino-Digital-API ist ein Paradebeispiel defür, wie man alles 
verkacken kann.

von M. K. (sylaina)


Lesenswert?

MaWin O. schrieb:
> Die Arduino-Digital-API ist ein Paradebeispiel defür, wie man alles
> verkacken kann.

Wenn man betrachtet, wie erfolgreich Arduino ist, würde ich nicht davon 
sprechen, dass man da alles verkackt hat ;)

von Joerg W. (joergwolfram)


Lesenswert?

M. K. schrieb
> Wäre doch gut, wenn dir schon dein Compiler sagt, dass es den Port, den
> du verwenden willst, nicht gibt.

Das mache ich zum Beispiel in meinen eigenen Bibliotheken:
1
portpin_set_output(PORT_C,4);
wird bei einem Controller ohne Port C (z.B. bei allen Renesas-Typen, bei 
denen sind die Ports numerisch 0..14) einen Fehler werfen, weil PORT_C 
dort nirgendwo definiert ist. Den  Unterstrich habe ich übrigens 
deswegen eingeführt, um Kollisionen mit Register-Namen zu vermeiden.

Ansonsten muss ich aus eigener Erfahrung sagen, dass jemand, der früher 
die meisten Z80-Befehle auswendig konnte und im Kopf assembliert hat und 
zwischenzeitlich über ASM nach C gekommen ist, sich ungemein schwer mit 
OOP tut.

Jörg

Beitrag #7283924 wurde von einem Moderator gelöscht.
von J. S. (jojos)


Lesenswert?

M. K. schrieb:
> Wäre doch gut, wenn dir schon dein Compiler sagt, dass es den Port, den
> du verwenden willst, nicht gibt. Bei deiner Abstraktion weißt du erst,
> dass es nicht funktionieren kannst, wenn du versuchst am Mikrocontroller
> verzweifelt eine LED an den nicht vorhanden PORTC anzuschließen... ;)

Die Abstraktionsschicht muss ja auch kompiliert werden. Und da würden 
schon die falschen Headerfiles zu Fehlern führen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Joerg W. schrieb:
> Das mache ich zum Beispiel in meinen eigenen
> Bibliotheken:portpin_set_output(PORT_C,4);
> wird bei einem Controller ohne Port C (z.B. bei allen Renesas-Typen, bei
> denen sind die Ports numerisch 0..14) einen Fehler werfen, weil PORT_C
> dort nirgendwo definiert ist. Den  Unterstrich habe ich übrigens
> deswegen eingeführt, um Kollisionen mit Register-Namen zu vermeiden.

Und was passiert, wenn Du
1
portpin_set_output(PORTC, 4);

oder
1
portpin_set_output(PORT_C, 8);

schreibst?

Oder ein beliebter Fehler in der AVR-Gemeinde:
1
SPCR0 = SPI2X0;


> Ansonsten muss ich aus eigener Erfahrung sagen, dass jemand, der früher
> die meisten Z80-Befehle auswendig konnte und im Kopf assembliert hat und
> zwischenzeitlich über ASM nach C gekommen ist, sich ungemein schwer mit
> OOP tut.

Damit bist Du sicher nicht allein. Wer zuviel ASM oder C eingesaugt hat, 
tut sich schwer mit Abstraktionen.

von MaWin O. (mawin_original)


Lesenswert?

M. K. schrieb:
> MaWin O. schrieb:
>> Die Arduino-Digital-API ist ein Paradebeispiel defür, wie man alles
>> verkacken kann.
>
> Wenn man betrachtet, wie erfolgreich Arduino ist, würde ich nicht davon
> sprechen, dass man da alles verkackt hat ;)

Ja doch. Das kann man sehr wohl.
Nur weil etwas verbreitet ist, wird es nicht automatisch gut.
Manchmal sogar ganz im Gegenteil. Starke Verbreitung verhindert 
Änderungen.

J. S. schrieb:
> Die Abstraktionsschicht muss ja auch kompiliert werden. Und da würden
> schon die falschen Headerfiles zu Fehlern führen.

Wenn man sich nicht auf diese antiquierte Sprache C beschränken würde, 
wäre noch viel mehr (Typ-)Sicherheit möglich.

HAL können typsicher, speichersicher, threadsicher, interruptsicher, 
idiotensicher und zero-cost sein.
Siehe embedded-hal für Rust.

von J. S. (jojos)


Lesenswert?

Joerg W. schrieb:
> portpin_set_output(PORT_C,4);

und wenn der portpin nicht auf Ausgang eingestellt ist? Werden die 
Argumente auf Gültigkeit überprüft? Das wird dann üblicherweise dem 
Performancegott geopfert.
In der bösen HAL sind dafür überall ASSERT Makros drin. Vermutlich 
werden diese von vielen als überflüssiger Code angesehen, aber da wird 
nur Code erzeugt wenn vorher ein Symbol definiert wird um diese 
Überprüfungen zu aktivieren.

von MaWin O. (mawin_original)


Lesenswert?

J. S. schrieb:
> und wenn der portpin nicht auf Ausgang eingestellt ist? Werden die
> Argumente auf Gültigkeit überprüft? Das wird dann üblicherweise dem
> Performancegott geopfert.

Oder halt zero-cost vom Typsystem geprüft.
Kannst du machen gut. Kannst du machen kacke.
Man hat die Wahl.
Arduino hat eine Wahl getroffen.

von Wilhelm M. (wimalopaan)


Lesenswert?

J. S. schrieb:
> Das wird dann üblicherweise dem
> Performancegott geopfert.

Vieles kann man zur Compilezeit machen (in C++).

von DANIEL D. (Gast)


Lesenswert?

Naja und wie sieht es mit Zeitkritischen Anwendungen aus, wofür 
Mikrocontroller nun einmal sehr oft genutzt werden, lässt sich das mit 
OOP auch gut kontrollieren?

von J. S. (jojos)


Lesenswert?

DANIEL D. schrieb:
> lässt sich das mit
> OOP auch gut kontrollieren?

ja.

von MaWin O. (mawin_original)


Lesenswert?

DANIEL D. schrieb:
> Naja und wie sieht es mit Zeitkritischen Anwendungen aus, wofür
> Mikrocontroller nun einmal sehr oft genutzt werden, lässt sich das mit
> OOP auch gut kontrollieren?

Selbstverständlich. Zero-cost bedeutet zero-cost.
Keine zusätzliche Laufzeit.
Kein zusätzlicher RAM-Bedarf.
Kein zusätzlicher Flash-Bedarf.
Null.

Man kann natürlich in OOP Code so schreiben, dass mehr Ressourcen 
verwendet werden. Vor allem, wenn man Features verwendet, die ohne OOP 
nicht "einfach so" zur Verfügung stehen. z.B. vtables. Aber diese Kosten 
hat man genau so auch, wenn man vtables in C implementiert.

Ein Programmcode implementiert in statischer OOP hat keinen zusätzlichen 
Overhead verglichen mit dem gleichen Code in rein klassischen C.

Und ich bin übrigens kein Freund von komplexer OOP mit tiefer 
(Mehrfach-)Vererbung und pipapo.
Aber eine vernünftige Objektbasierung hilft enorm beim Strukturieren des 
Programms.

von Wilhelm M. (wimalopaan)


Lesenswert?

DANIEL D. schrieb:
> Naja und wie sieht es mit Zeitkritischen Anwendungen aus, wofür
> Mikrocontroller nun einmal sehr oft genutzt werden, lässt sich das mit
> OOP auch gut kontrollieren?

Der Begriff OOP beinhaltet (typischerweise) die Konzepte:

- Kapselung via Klassen
- Inklusionspolymorphie durch Vererbung
- Laufzeitpolymorphie durch Inklusionspolymorphie
- weitere Polymorphiearten: ad-hoc Polymorphie, parametrische 
Polymorphie

Bei µC kommen viel mehr die Konzepte Kapselung und parametrische und 
ad-hoc-Polymorphie zum Einsatz als die Laufzeitpolymorphie.

von Wilhelm M. (wimalopaan)


Lesenswert?

MaWin O. schrieb:
> Und ich bin übrigens kein Freund von komplexer OOP mit tiefer
> (Mehrfach-)Vererbung und pipapo.

Das ist heute niemand mehr im Gegensatz zu den ganz frühen Anfangszeiten 
der OOP. Heute gilt: Komposition vor Vererbung.

von MaWin O. (mawin_original)


Lesenswert?

Wilhelm M. schrieb:
> Heute gilt: Komposition vor Vererbung.

Da stimme ich uneingeschränkt zu.

von Wilhelm M. (wimalopaan)


Lesenswert?

J. S. schrieb:
> In der bösen HAL sind dafür überall ASSERT Makros drin. Vermutlich
> werden diese von vielen als überflüssiger Code angesehen, aber da wird
> nur Code erzeugt wenn vorher ein Symbol definiert wird um diese
> Überprüfungen zu aktivieren.

Nein, andersherum: die Laufzeit-Zusicherungen werden entfernt, wenn 
NDEBUG gesetzt wird.

von J. S. (jojos)


Lesenswert?

in HAL gibt es in vielen Funktionen:
1
  /* Check the parameters */
2
  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
3
  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));
4
  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));

und assert_param macht:
1
/* Exported macro ------------------------------------------------------------*/
2
#ifdef  USE_FULL_ASSERT
3
/**
4
  * @brief  The assert_param macro is used for functions parameters check.
5
  * @param  expr If expr is false, it calls assert_failed function
6
  *         which reports the name of the source file and the source
7
  *         line number of the call that failed.
8
  *         If expr is true, it returns no value.
9
  * @retval None
10
  */
11
#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
12
/* Exported functions ------------------------------------------------------- */
13
void assert_failed(uint8_t *file, uint32_t line);
14
#else
15
#define assert_param(expr) ((void)0U)
16
#endif /* USE_FULL_ASSERT */

Das hat also nichts mit NDEBUG zu tun sondern USE_FULL_ASSERT.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

J. S. schrieb:
> in HAL gibt es in vielen Funktionen

Nicht alle HAL sind STM-HAL ;-)

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

ich dachte mit 'böser' HAL war klar welche gemeint ist...

von Wilhelm M. (wimalopaan)


Lesenswert?

J. S. schrieb:
> ich dachte mit 'böser' HAL war klar welche gemeint ist...

Zumindest enthält sie ja schon mal Laufzeitzusicherungen ;-)

Wobei ein µC Programmierer ja möglichst Compile-Zeit-Zusicherungen (bzw. 
einfach Compiler-Fehlermeldungen wegen z.B. nicht erfüllter 
Typ-Anforderungen) haben möchte stattdessen. Und das kann eine in C 
geschriebene HAL eben nur sehr begrenzt im Gegensatz zu C++.

von Rolf M. (rmagnus)


Lesenswert?

Wilhelm M. schrieb:
> Nein, andersherum: die Laufzeit-Zusicherungen werden entfernt, wenn
> NDEBUG gesetzt wird.

Nicht die Zusicherungen, sondern deren Überprüfung.

von Wilhelm M. (wimalopaan)


Lesenswert?

Rolf M. schrieb:
> Wilhelm M. schrieb:
>> Nein, andersherum: die Laufzeit-Zusicherungen werden entfernt, wenn
>> NDEBUG gesetzt wird.
>
> Nicht die Zusicherungen, sondern deren Überprüfung.

Nö, das assert-Macro evaluiert in dem Fall zu einem leeren String. Damit 
entfernt der Präprozessor als nicht-interaktiver Editor die Zusicherung.

von M. K. (sylaina)


Lesenswert?

MaWin O. schrieb:
> Nur weil etwas verbreitet ist, wird es nicht automatisch gut.

Hätte man bei Arduino alles verkackt hätte sich dieses System ganz 
sicher nie verbreitet. Wer bestanden hat hat noch lange keine Note 1 
oder 2, da hast du recht. Aber der hat auch ganz sicher keine Note 5 
oder 6. ;)

von Rolf M. (rmagnus)


Lesenswert?

Wilhelm M. schrieb:
> Nö, das assert-Macro evaluiert in dem Fall zu einem leeren String.

Ja, richtig.

> Damit entfernt der Präprozessor als nicht-interaktiver Editor die
> Zusicherung.

Die Zusicherung ist das, was du bzw. dein Code durch Hinschreiben des 
assert abgibt. Je nach Einstellung überprüft der Compiler diese oder 
nicht. Aber auch wenn er das nicht überprüft, bleibt es trotzdem das, 
was zugesichert wurde.

von Wolfgang R. (Firma: www.wolfgangrobel.de) (mikemcbike)


Lesenswert?

Wenn ich böser HAL lese, muss ich sofort an 2001 denken...

von Joerg W. (joergwolfram)


Lesenswert?

*portpin_set_output(PORTC, 4);*
1
rc/test_01_blink.c: In function 'main':
2
src/test_01_blink.c:15:2: error: incompatible type for argument 1 of 'portpin_set_output'
3
  portpin_set_output(PORTC,4);
4
  ^
5
In file included from ./inc/board.h:2:0,
6
                 from src/test_01_blink.c:1:
7
/usr/local/toolchain/unilib/avr/include/unilib.h:7346:6: note: expected 'unsigned char' but argument is of type 'volatile union PORTC_T'
8
 void portpin_set_output(unsigned char port,unsigned char pin);
9
      ^
10
make: *** [Makefile:69: build/src/test_01_blink.o] Fehler 1

Bei anderen Controllern mit PORT C (z.B. HCS08) gibt es kein PORTC 
Register.

*portpin_set_output(PORT_C, 8);*

Würde entweder PTC8 auf Output setzen oder PTC0, wenn Port C nur 8 Bits 
breit ist. Da die Pin-Nummer ja eine Variable ist, kann die ja im 
Programm parktisch den ganzen Bereich von 0 bis 255 einnehmen:
1
for(i=0;i<8;i++) portpin_set_output(PORT_C, i);
ist ja auch gültig, daher habe ich mich für Modulo entschieden, das 
lässt sich leicht und schnell mit einem AND realisieren.

Jörg

von Frank O. (frank_o)


Lesenswert?

DANIEL D. schrieb:
> Jedes Nichtwissen schränkt immer ein, genauso wie wenn man irgendwelche
> Fähigkeiten nicht besitzt.

Im wesentlichen bin ich bei dir. Dennoch hast du, so glaube ich, das 
nicht verstanden, was ich damit sagen wollte.
Jeder der halbwegs etwas lernen will, wird später sowieso mehr über 
Elektronik wissen, mehr über Programmiersprachen und diese benutzen. 
Aber im Anfang ist man doch froh, wenn das so irgendwie klappt, das was 
man machen wollte.

Da will jemand etwas bauen, lesen wir doch täglich, und kann sich die 
Problematik noch nicht im Geringsten vorstellen.
Ich hatte schon einige Jahre mit Elektronik zu tun, dachte ich.
Als ich hier anfing zu lernen und das Kapitel "Kondensator" im TS 
gelesen hatte, wusste ich, dass ich nicht einmal annähernd die Bauteile 
kannte.

Aber gerade bei Arduino ist es doch so, dass fundamentales Wissen 
erstmal nicht nötig ist.
Vergleichen wir das mit dem Autofahren. Du musst einen Führerschein 
besitzen. Das ist dein Grundwissen. Viele wollen nur Auto fahren, einige 
machen noch dne Ölwechsel selbst und andere können die ganze Elektronik, 
haben Diagnosegeräte und zerlegen, wenn nötig, die ganze Karre.
Also lasst die, die nur fahren wollen, doch auch nur fahren.
Von den Typen, die hier immer so auf die Sahne hauen, möchte ich mal 
sehen, ob die auch einen ganzen Motor zerlegen und wieder zusammensetzen 
können, sodass er auch noch läuft.
Und der, der das kann, hat der schon ein Dach verlattet und gedeckt, 
Wände gemauert ...
Ich bin mir sicher, jeder der mit Arduino anfängt etwas zu machen, hat 
auf anderen Gebieten auch gute Kenntnisse.

von DANIEL D. (Gast)


Lesenswert?

Frank O. schrieb:
> Aber gerade bei Arduino ist es doch so, dass fundamentales Wissen
> erstmal nicht nötig ist.
> Vergleichen wir das mit dem Autofahren. Du musst einen Führerschein
> besitzen. Das ist dein Grundwissen. Viele wollen nur Auto fahren, einige
> machen noch dne Ölwechsel selbst und andere können die ganze Elektronik,
> haben Diagnosegeräte und zerlegen, wenn nötig, die ganze Karre.
> Also lasst die, die nur fahren wollen, doch auch nur fahren.
> Von den Typen, die hier immer so auf die Sahne hauen, möchte ich mal
> sehen, ob die auch einen ganzen Motor zerlegen und wieder zusammensetzen
> können, sodass er auch noch läuft.
> Und der, der das kann, hat der schon ein Dach verlattet und gedeckt,
> Wände gemauert ...
> Ich bin mir sicher, jeder der mit Arduino anfängt etwas zu machen, hat
> auf anderen Gebieten auch gute Kenntnisse.

Ist halt auch die Frage wo man herkommt, ein Mensch welcher berufsmäßig 
PC Software programmiert und das Hobby Microcontroller entdeckt, wird 
sicher anders an die Sache herangehen als z.b ein Mensch welcher 
Elektronik beherrscht, und sich auch das Programmieren von 
Microcontrollern aneigenen will.

Natürlich wäre es geil wenn man Programmieren kann ASM, C und C++, in 
der Lage ist Schaltungen und Platinenlayouts zu erstellen, und am besten 
noch analoge Elektronik und bis zum selbstentwickelten Schaltenetzteil 
und was weiß ich beherrscht. Aber realistisch betrachtet braucht man 
Unmengen an Wissen und Erfahrung um davon jeweils nur einzelne Dinge 
wirklich gut zu beherrschen. Es reicht nicht ein Buch gelesen zu haben.

Seien wir ehrlich Dinge machen Spaß wenn man sie gut kann. Und es gibt 
ja auch noch andere Dinge im Leben neben der Elektronik. Also muss man 
halt eine Auswahl treffen, und wenn man schon seine Microcontroller 
programmieren kann, wird man vermutlich viel eher etwas anderes lernen, 
vielleicht das Bearbeiten von Metall oder was auch immer für die eigenen 
Projekte und Wünsche vorteilhaft ist, anstelle einer Programmiersprache 
welche schwer zu erlernen ist, und im Vergleich zu anderen Dingen einen 
geringeren mehrwert bietet. Das meine ich mit Investieren.

Ich habe einen 3D Drucker hier rumstehen welcher seit Jahren nicht 
fertig wird. Aber ich bin handwerklich begabt, also baue ich mir einfach 
den Kram direkt aus Holz und Metall wenn es sein muss. Meistens denke 
ich mir das es halt viel schöner als Plastik zu verwenden, und schon 
fehlt die Motivation sich die Arbeit zu machen den 3D Drucker 
fertigzustellen. Dabei bin ich in der Lage ein CAD (skatchup) 
ausreichend zu bedienen. Ja wäre ja wirklich geil wenn man alles könnte 
aber man ist halt beschränkt.

von Stefan F. (Gast)


Lesenswert?

Frank O. schrieb:
> Aber gerade bei Arduino ist es doch so, dass fundamentales Wissen
> erstmal nicht nötig ist.
> Vergleichen wir das mit dem Autofahren.

So weit brauchst du gar nicht ab schweifen.Denke nur an Bauklötze, Lego, 
Fischer Technik und Metallbaukästen. Wie viele echte Baumeister haben 
wohl damit angefangen? Ich vermute: fast alle.

> Also lasst die, die nur fahren wollen, doch auch nur fahren.

Sehr gut, gefällt mir.

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.