Forum: Mikrocontroller und Digitale Elektronik Buch: Realtime C++


von IJustWannaKnow (Gast)


Lesenswert?

Kennt jemand diese Werk, ist es empfehlenswert? Ich habs geschenkt 
bekommen. MFG.

:
von Walter T. (nicolas)


Lesenswert?

IJustWannaKnow schrieb:
> Ich habs geschenkt
> bekommen. MFG.

Dann kannst Du Dir ja selbst eine Meinung bilden.

von Cyblord -. (cyblord)


Lesenswert?

Walter T. schrieb:
> IJustWannaKnow schrieb:
>> Ich habs geschenkt
>> bekommen. MFG.
>
> Dann kannst Du Dir ja selbst eine Meinung bilden.

Dann müsste er es ja lesen. Heute sitzt man vor einem Buch, geht dann 
aber ins Netz und fragt wie dieses Buch so ist. Irre!

von Yalu X. (yalu) (Moderator)


Lesenswert?

Es könnte ja sein, dass beim Öffnen des Buchs eine aggressive Giftspinne
herausspringt. Da fragt man besser diejenigen, die das vielleicht schon
erlebt haben ;-)

von esd-impuls (Gast)


Lesenswert?

Achtung, Bücher mache Geräusche beim zuschlagen. Nicht erschrecken :D

von IJustWannaKnow (Gast)


Lesenswert?

Ich mag euch. Ich musste schmunzeln...

ne ernsthaft. meine Erfahrung in dem Gebiet reicht nicht aus um zu 
beurteilen ob das Buch gut ist.

Beitrag #6424570 wurde von einem Moderator gelöscht.
von Yalu X. (yalu) (Moderator)


Lesenswert?

IJustWannaKnow schrieb:
> ne ernsthaft. meine Erfahrung in dem Gebiet reicht nicht aus um zu
> beurteilen ob das Buch gut ist.

Einer, der schon alles zum Thema weiß, wird vermutlich dieses Buch nicht
mehr lesen und kann deswegen ebenfalls kein Urteil darüber abgeben.

Während du das  Buch liest, wirst du spüren, ob dein Wissen zunimmt oder
nicht. Sollte das während der ersten 20% nicht der Fall sein, kannst das
Buch ja jederzeit wieder weglegen.

von void (Gast)


Lesenswert?

Es ist schon etwas her, dass ich das Buch gelesen habe. Aber ich 
versuche es trotzdem mal.

Der Autor Christopher Kormanyos erschien mir recht praxisnah zu sein und 
seine Strukturierung des Buches fand ich gut. Zum einen erklärt er vom 
Einstieg her gut worauf es bei der Verwendung von C++ auf µC ankommt und 
baut dann schrittweise auf dem Wissen auf. Er verwendet zwar einen 
bestimmten µC Typen in dem Buch, erklärt aber wie es generisch für 
verschiedene µC gemacht werden kann/soll und vor allem verfängt sich 
nicht in "bei diesem µC Typen muss man jetzt so uns so in dieser und 
genau dieser IDE des Herstellers klicken" wie es gerne bei verschiedenen 
Büchern im Arduino/RPi Kontext passiert.
Sehr gut finde ich auch, dass alle Code-Beispiele auch für mehr 
µC-Targets auf seinem github-Konto zu finden sind.
https://github.com/ckormanyos/real-time-cpp

Zum C++. Die Sprachkonstrukte von C++ welche kleinen, hardwarenahen Code 
ermöglichen stellt Christopher klar da und auch die verschieden Vorteile 
von C++ gegenüber reinem C.
In meiner Praxiserfahrung jedoch kann C++ diesen Vorteil nicht 
ausspielen, da in der Entwicklung von low-level Treibern, HAL u.ä. eher 
hardware-orientierte Personen arbeiten welche sich eben nicht in die 
Tiefe mit den Besonderheiten von neuen C++ Sprachkonstrukten auskennen 
und daher eher C verwenden.

Beispiel: Mit C++ zur Kompile-Zeit Dinge prüfen zu können was mit C so 
nicht geht ist ein klarer Vorteil. Aber eben diese Möglichkeit bringt 
auch Komplexität mit sich, welche a) man kennen und beherrschen und b) 
am Ende wieder in irgendeinem Headerfile verstecken möchte wie man es 
bei C schon mit endlosen #define-Orgien gemacht hat...
1
// C
2
#include <mcu_registers.h>
3
(...)
4
  // Enable the timer0 compare match a interrupt.
5
  TIMSK0 = 0x02;
1
// C++
2
#include <mcu_registers_cpp.h>
3
4
template<typename addr_type,
5
         typename reg_type>
6
struct reg_access_dynamic final
7
{
8
(...)
9
  static void reg_set(const addr_type address, const reg_type value) { *reinterpret_cast<volatile reg_type*>(address)  = value; }
10
(...)
11
};
12
13
const std::uintptr_t address =
14
  reinterpret_cast<std::uintptr_t>(&register_timsk0);
15
(...)
16
  // Enable the timer0 compare match a interrupt.
17
  reg_access_dynamic<std::uintptr_t,
18
                     std::uint8_t>::reg_set(address, UINT8_C(0x02));

Yalu X. schrieb:
> Einer, der schon alles zum Thema weiß, wird vermutlich dieses Buch nicht
> mehr lesen und kann deswegen ebenfalls kein Urteil darüber abgeben.

Dann oute ich mich hiermit mal als jemand, der nicht schon alles zum 
Thema wusste. ;-)

von So so... (Gast)


Lesenswert?

Bitte mal fuer nicht-C++ler: Soll das das Aequivalent sein?

von mh (Gast)


Lesenswert?

So so... schrieb:
> Bitte mal fuer nicht-C++ler: Soll das das Aequivalent sein?

Wenn das sein C++ Äquivalent sein soll, macht er etwas falsch.

von void (Gast)


Lesenswert?

mh schrieb:
> Wenn das sein C++ Äquivalent sein soll, macht er etwas falsch.

Im MCAL der Register-Zugriffs-Abstraktion sieht das schon so aus.
Auf Applikations-Seite natürlich schön aufgeräumt.
https://github.com/ckormanyos/real-time-cpp/blob/master/examples/chapter06_14/src/app/led/app_led.cpp

Und wenn du es besser kannst, schreib halt selber ein Buch oder höre auf 
zu meckern.

von mh (Gast)


Lesenswert?

void schrieb:
> mh schrieb:
>> Wenn das sein C++ Äquivalent sein soll, macht er etwas falsch.
>
> Im MCAL der Register-Zugriffs-Abstraktion sieht das schon so aus.
> Auf Applikations-Seite natürlich schön aufgeräumt.
> 
https://github.com/ckormanyos/real-time-cpp/blob/master/examples/chapter06_14/src/app/led/app_led.cpp
>
> Und wenn du es besser kannst, schreib halt selber ein Buch oder höre auf
> zu meckern.

Kannst du mir in ein paar Worten erklären was da abstrahiert wird bzw. 
was genau der Vorteil dieser MCAL ist?

Soweit ich das in den Beispielen sehen kann, wird da "toggle eine LED" 
auf 20 Dateien augeteilt und hinter einem Haufen Templates versteckt.

(Ich habe aufgehört in dem repo rumzustöbern, als ich eine Datei 
"cstdint" gefunden habe. Die Datei enthält, was man erwartet und sorgt 
danut für undefined behavior.)

von void (Gast)


Lesenswert?

mh schrieb:
> Soweit ich das in den Beispielen sehen kann, wird da "toggle eine LED"
> auf 20 Dateien augeteilt und hinter einem Haufen Templates versteckt.

Genau. Und in klassischem C hättest du ein Haufen von #defines in header 
files versteckt. ;-)


> Kannst du mir in ein paar Worten erklären was da abstrahiert wird bzw.
> was genau der Vorteil dieser MCAL ist?

Der MCAL (oder auch HAL) abstrahiert erstmal nur die Hardware-Zugriffe. 
Soweit kein Unterschied zu einem MCAL in C.
Im Buch wird dann aber auf die spezifischen Vorteile eingegangen, welche 
die Implementierung eines MCAL in C++ bringen kann. Die da z.B. wären 
zur Kompile-zeit Berechnungen ausführen zu lassen und stringente 
Typ-Prüfung.
1
  // C
2
  static RCC_OscInitTypeDef RCC_OscInitStruct;
3
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
4
  RCC_OscInitStruct.HSEFreq = 16000000; // 16MHz Quarz am externen Oszillator 'HSE'
5
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
6
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
7
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
8
  RCC_OscInitStruct.PLL.PLLFreqOut = 960000000; // 96MHz PLL out fuer CPU-Takt
9
10
  if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
11
  {
12
    /* Initialization Error */
13
    Error_Handler();
14
  }

Mit ein bischen wenig Glück erzeugt der C-Kompiler hier kein Fehler beim 
kompilieren und der Code läuft. Es wird zur Laufzeit im RAM die Struktur 
RCC_OscInitStruct angelegt, belegt Speicher und Pointer darauf werden 
hin und her übergeben beim Funktionsaufruf. (naja, noch schlimmer wäre 
wenn alle Parameter einzelnd übergebenen würden.)
Und später fällt dir noch auf, dass die CPU mit 16MHz und nicht wie 
gedacht mit 96MHz läuft.
1
  // C++
2
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
3
  RCC_OscInitStruct.HSEFreq = 16000000; // 16MHz Quarz am externen Oszillator 'HSE'
4
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
5
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
6
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
7
  RCC_OscInitStruct.PLL.PLLFreqOut = 960000000; // 96MHz PLL out fuer CPU-Takt
8
9
  mcal::RCC::Osc.config(&RCC_OscInitStruct);

Der C++-Kompiler wirft den Fehler "reg_set REG_PLL_MULT out of bound", 
weil er für die PLL-Multiplier-Bits den Wert 60 ermittelt hat jedoch der 
von dir oben so verschmähte reg_set() wusste, dass nur 4bit für die 
PLL-Multiplier-Bits vorgesehen sind.
Ist nicht schlimm, Benutzter Fehler halt 960MHz anstatt 96MHz 
geschrieben. Es war eine Null zuviel der Kompiler hat es gemerkt. Nach 
der Korrektur beim zweiten Kompilieren errechnet der C++-Kompiler den 
Wert für den die PLL-Multiplier-Bits passen zur kompile-Zeit aus (6) und 
schreibt am Ende nur den/die Register-Zugriff(e) in das Executable. Kein 
belegter RAM, keine Pointer-Übergabe, kein Funktionsaufruf.

Das Buch erklärt jetzt wie man dies in C++ hinbekommt.
Nicht erwähnt ist aber natürlich, dass Personen benötigen werden die 
diese C++ Eigenheiten kennen und auch nutzten können und wollen.

von mh (Gast)


Lesenswert?

void schrieb:
> Der C++-Kompiler wirft den Fehler "reg_set REG_PLL_MULT out of bound",
> weil er für die PLL-Multiplier-Bits den Wert 60 ermittelt hat jedoch der
> von dir oben so verschmähte reg_set() wusste, dass nur 4bit für die
> PLL-Multiplier-Bits vorgesehen sind.

Dann erklär mal, wie das mit dem von dir "gezeigten"
1
static void reg_set(const addr_type address, const reg_type value);
gehen soll.

Beitrag #6426301 wurde von einem Moderator gelöscht.
Beitrag #6426309 wurde von einem Moderator gelöscht.
Beitrag #6426311 wurde von einem Moderator gelöscht.
Beitrag #6426314 wurde von einem Moderator gelöscht.
Beitrag #6426316 wurde von einem Moderator gelöscht.
Beitrag #6426317 wurde von einem Moderator gelöscht.
Beitrag #6426318 wurde von einem Moderator gelöscht.
Beitrag #6426319 wurde von einem Moderator gelöscht.
Beitrag #6426320 wurde von einem Moderator gelöscht.
von Erich H. (Gast)


Lesenswert?

void schrieb:
> Es wird zur Laufzeit im RAM die Struktur RCC_OscInitStruct angelegt,
> belegt Speicher und Pointer darauf werden hin und her übergeben beim
> Funktionsaufruf.

..bei ausgeschalteter (globaler) Optimierung?

von fltr (Gast)


Lesenswert?

Man sollte auch erwähnen, dass der Autor auf die Unterschiede ASM/C/C++ 
eingeht und auch Disassmblies vergleicht. Und schneidet C++ oft 
mindestens so gut ab wie ASM eines erfahrenen Entwicklers.

Beitrag #6426343 wurde von einem Moderator gelöscht.
von P. S. (namnyef)


Lesenswert?

Ich weiß nicht was euer Problem ist. Das ist kein Roman, der einem 
gefällt oder eben nicht. Das ist ein Sachbuch. Und da kann man sich ja 
ruhig mal umhören, ob es etwas taugt. Es sollte doch wohl auf der Hand 
liegen, dass man diese Einschätzung möglicherweise nur eingeschränkt 
selbst vornehmen kann. Schließlich liest man ein Sachbuch in der Regel 
um etwas dazu zu lernen und hat auf dem jeweiligen Gebiet unter 
Umständen eher weniger Erfahrung.

von void (Gast)


Lesenswert?

mh schrieb:
> Dann erklär mal

Nein. Entweder du ließt das Sachbuch, oder eben nicht. Ich erkläre es 
dir nicht.

Erich H. schrieb:
> ..bei ausgeschalteter (globaler) Optimierung?
 Ich habe nicht behauptet, dass ein C-Kompiler da gar nichts machen kann 
(Ja natürlich kannst du z.B. ihn bitten mal inlining zu verwenden). Aber 
eben kann ein C++-Kompiler mehr. Das erklärt dieses Buch.

P. S. schrieb:
> Ich weiß nicht was euer Problem ist.

Das Problem von manchen Leuten hier im Forum ist, dass Sie ewig gestrige 
Nörgler sind. Hätte ich vorher wissen sollen, dass etwas zu dem Buch zu 
sagen hier total vergebene Zeitverschwendung war. Damit bin ich dann 
Mal raus.

von Paul Peter Schm. (Gast)


Lesenswert?

Lol, wie immer selten dämliche Kommentare hier.
Ich denke er er hat Kommentare erwartet wie, es ist gut geschrieben, die 
beispiele sind brauchbar und haben hand und Fuß..
Ich WETTE!!! wenn er geschrieben hätte, er leist gerade Buch XYZ und er 
fidnet es total gut.
, DANN!!! kämen kritiken wie
Die verwendeten Beispiele im Buch sind einfach nur schlecht.
Es enthält irre viele FEhler
Stattdessen würde ich lieber Buch `XYZ lesen.



Merke..in diesem Forum gibt es IMMeR NUR DUMME und NEGATIVE Kommentare, 
und auch die Moderatoren machen dabei mit!!


Wenn man also eine brauchbare Antwort auch eine Frage bekommen will, 
muss sie so formuliert werden, das mit dummen Antworten brauchbare 
Antworten erzielt werden


Am besten noch mit ein paar Beleidigungen gespickt und mit den Hinweisen 
das er offenbar die Deutsche Rechtschreibung nicht beherrscht

von Paul Peter Schm. (Gast)


Lesenswert?

"Das Problem von manchen Leuten hier im Forum ist, dass Sie ewig 
gestrige
Nörgler sind. Hätte ich vorher wissen sollen, dass etwas zu dem Buch zu
sagen hier total vergebene Zeitverschwendung war. Damit bin ich dann
Mal raus."



HHAHAH, ich hatte nur die eesten zwei Kommentare gelesen als ich meinen 
TExt verfasst hatte und eben erst den letzten:-)
ICh sehe wir sind der gleichen Meinung hehe

Getroffen und versenkt:-)

von Marcel (Gast)


Lesenswert?

Hmm, das Buch klinkt eigentlich sehr interessant.

Lohnt es sich das jetzt noch zu erwerben oder wird vieles durch 
C++17/C++20 obsolet/kürzer und einfacher schreibbar. Kann das jemand 
einschätzen?

von Marcel (Gast)


Lesenswert?

Ahh, ich fand einen Download. Ich werde es mir mal zu Gemüte führen!

von mh (Gast)


Lesenswert?

void schrieb:
> mh schrieb:
>> Dann erklär mal
>
> Nein. Entweder du ließt das Sachbuch, oder eben nicht. Ich erkläre es
> dir nicht.

Ich brauch das Buch nicht lesen. Es ist technisch unmöglich, das von dir 
angepriesene Verhalten mit dieser Funktionssignatur umzusetzen.

void schrieb:
> Das Problem von manchen Leuten hier im Forum ist, dass Sie ewig gestrige
> Nörgler sind.

Auf wen genau beziehst du dich und wo wird Genörgelt?

Beitrag #6426486 wurde von einem Moderator gelöscht.
von Flick12 (Gast)


Lesenswert?

Marcel schrieb:
> Ahh, ich fand einen Download. Ich werde es mir mal zu Gemüte
> führen!

Wo und mit welchem Suchbergriff(en)?

von Lutz (Gast)


Lesenswert?

Nach illegalen Downloads wirst du wohl schon selber suchen müssen.

Mich würde aber auch interessieren, ob es ein relativ aktuelles und 
empfehlenswertes, deutschsprachiges Buch speziell zum Thema C++ auf 
Mikrocontrollern gibt. Der Winter kommt...

Beitrag #6426528 wurde von einem Moderator gelöscht.
von Marcel (Gast)


Lesenswert?

Flick12 schrieb:
> Marcel schrieb:
>> Ahh, ich fand einen Download. Ich werde es mir mal zu Gemüte
>> führen!
>
> Wo und mit welchem Suchbergriff(en)?

Ich suchte einfach nur Realtime C++ auf Google und fand dann auf der 
erste Seite: 
https://www.academia.edu/37116671/Real-Time_C_Efficient_Object-Oriented_and_Template_Microcontroller_Programming_Second_Edition

Das Angebot erscheint mir nicht illegal. Ich las aber auch nicht die 
AGBs sondern meldete mich mit einem Íst mir egal Google Account bei 
denen an und bekam den Download.

Sollte das doch kein Seriöser Anbieter sein, diesen Post bitte Löschen!

Beitrag #6426530 wurde von einem Moderator gelöscht.
Beitrag #6426540 wurde von einem Moderator gelöscht.
Beitrag #6426562 wurde von einem Moderator gelöscht.
Beitrag #6426565 wurde vom Autor gelöscht.
Beitrag #6426567 wurde von einem Moderator gelöscht.
Beitrag #6426572 wurde von einem Moderator gelöscht.
Beitrag #6426576 wurde von einem Moderator gelöscht.
Beitrag #6426577 wurde von einem Moderator gelöscht.
Beitrag #6426582 wurde von einem Moderator gelöscht.
Beitrag #6426610 wurde von einem Moderator gelöscht.
von Paul Peter Schm. (Gast)


Lesenswert?

warum war jetzt eigentlich der ASM Kommentar so schlimm.
Warum wird nicht gleich der zweite dämliche  Beitrag von Walter 
gelöscht?
Cyblord etc..
alles dumme Kommentare die gleich weitere Idioten anziehen

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Paul Peter Schm. schrieb:
> warum war jetzt eigentlich der ASM Kommentar so schlimm.

moby hat hier Hausverbot.
Beim zweiten Teil deines Post geb ich dir zu 100% recht.

von Gustl B. (gustl_b)


Lesenswert?

Paul Peter Schm. schrieb:
> alles dumme Kommentare die gleich weitere Idioten anziehen

Wie kann ich helfen?

Echtzeitanwendungen gehören ausschließlich in Hardware. Vielleicht noch 
in ein FPGA, aber niemals als Software in eine CPU.

Beitrag #6426631 wurde von einem Moderator gelöscht.
Beitrag #6426634 wurde von einem Moderator gelöscht.
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Gustl B. schrieb:
> Echtzeitanwendungen

Echtzeit heist nicht, dass es sofort passieren muss.
Sondern, dass es garantiert innerhalb eines gesteckten Zeitraumes 
passieren muss.
Sowas wie die Regulierungsstäbe müssen innerhalb von 1min voll in den 
Reaktor fahren, sonst Feuerwerk ;)
Oder von Erkennung Überdruck bis Ventilöffnung dürfen max 10ms vergehen.
Sonst brauchsten neuen Kessel.

von Slickflick (Gast)


Lesenswert?

Kann es sein das Technik komplett gegen die Natur des Menschen ist? 
Meiner Erfahrung nach sind gerade Infos oder andere "Nerdwesen" 
unglaublich oft unsozial und frustriert.

Was hier im Forum extrem zur Geltung kommt. Was so eine lockere 
Buch-Frage hier ausgelöst hat, unfassbar.

von Carl D. (jcw2)


Lesenswert?

Mw E. schrieb:
> Gustl B. schrieb:
>> Echtzeitanwendungen
>
> Echtzeit heist nicht, dass es sofort passieren muss.
> Sondern, dass es garantiert innerhalb eines gesteckten Zeitraumes
> passieren muss.
> Sowas wie die Regulierungsstäbe müssen innerhalb von 1min voll in den
> Reaktor fahren, sonst Feuerwerk ;)
> Oder von Erkennung Überdruck bis Ventilöffnung dürfen max 10ms vergehen.
> Sonst brauchsten neuen Kessel.

Viele verstehen unter Echtzeit eben
  "so schnell wie möglich"
Richtiger ist aber
  "so schnell wie nötig "

von Slickflick (Gast)


Lesenswert?

Carl D. schrieb:
> Mw E. schrieb:
> Gustl B. schrieb:
> Echtzeitanwendungen
>
> Echtzeit heist nicht, dass es sofort passieren muss.
> Sondern, dass es garantiert innerhalb eines gesteckten Zeitraumes
> passieren muss.
> Sowas wie die Regulierungsstäbe müssen innerhalb von 1min voll in den
> Reaktor fahren, sonst Feuerwerk ;)
> Oder von Erkennung Überdruck bis Ventilöffnung dürfen max 10ms vergehen.
> Sonst brauchsten neuen Kessel.
>
> Viele verstehen unter Echtzeit eben  "so schnell wie möglich"
> Richtiger ist aber  "so schnell wie nötig "

Es heißt ja auch Echtzeit... Und nicht Schnellzeit. Die deutsche Sprache 
ist da schon sehr genau.

von Carl D. (jcw2)


Lesenswert?

Slickflick schrieb:
> Carl D. schrieb:
>> Viele verstehen unter Echtzeit eben  "so schnell wie möglich"
>> Richtiger ist aber  "so schnell wie nötig "
>
> Es heißt ja auch Echtzeit... Und nicht Schnellzeit. Die deutsche Sprache
> ist da schon sehr genau.

Wer versteht schon Worte ;-)

von Johannes S. (Gast)


Lesenswert?

habe mal gelesen das auch eine IBM AS400 echtzeitfähig ist. Solange die 
Lohnabrechnung rechtzeitig am Monatsende fertig ist.

Beitrag #6426663 wurde von einem Moderator gelöscht.
Beitrag #6426665 wurde von einem Moderator gelöscht.
von Carl D. (jcw2)


Lesenswert?

Johannes S. schrieb:
> habe mal gelesen das auch eine IBM AS400 echtzeitfähig ist. Solange die
> Lohnabrechnung rechtzeitig am Monatsende fertig ist.

Echtzeit hängt immer vom Problem ab.

von Gustl B. (gustl_b)


Lesenswert?

Gustl B. schrieb:
> Paul Peter Schm. schrieb:
>> alles dumme Kommentare die gleich weitere Idioten anziehen
>
> Wie kann ich helfen?

Ich dachte das sei Hinweis genug. War es leider nicht. Ich werde in 
Zukunft die passenden Tags verwenden. [/troll]

Beitrag #6426678 wurde von einem Moderator gelöscht.
Beitrag #6426683 wurde von einem Moderator gelöscht.
Beitrag #6426689 wurde von einem Moderator gelöscht.
Beitrag #6426700 wurde von einem Moderator gelöscht.
Beitrag #6426714 wurde von einem Moderator gelöscht.
Beitrag #6426821 wurde von einem Moderator gelöscht.
Beitrag #6426886 wurde von einem Moderator gelöscht.
Beitrag #6426888 wurde von einem Moderator gelöscht.
Beitrag #6426894 wurde von einem Moderator gelöscht.
Beitrag #6427068 wurde von einem Moderator gelöscht.
Beitrag #6427074 wurde von einem Moderator gelöscht.
Beitrag #6427081 wurde von einem Moderator gelöscht.
Beitrag #6427089 wurde von einem Moderator gelöscht.
Beitrag #6427090 wurde von einem Moderator gelöscht.
Beitrag #6427092 wurde von einem Moderator gelöscht.
Beitrag #6427133 wurde von einem Moderator gelöscht.
von Walter T. (nicolas)


Lesenswert?

Nebenbei: Das Buch ist über Springerlink verfügbar. Wer also eine 
Bibliothekskarte einer teilnehmenden Hochschule hat, kann sich die 
Meinung zum Buch kostenlos bilden.

Ich nehme auch an, dass das "geschenkt" des TO genau daher kommt.

Beitrag #6429507 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

Kann bitte irgendwer mal dem Mobber erklären, dass das hier ein C++ Buch 
Thread ist?
Und dass sich hier wohl niemand für sein ASM Gedöns interessiert.
Es fehl am Platze ist!

Zumindest mir geht es so.
Mich interessiert C++ auf µC schon.

Ja, mich stört der Störenfried.
Und meine Zuneigung zu ASM schrumpft dadurch auch.
Ich muss mir nur vorstellen, dass man so bekloppt werden kann, wenn man 
sich auf ASM fixiert.

Ist es so, dass einen ASM so bekloppt macht, so nervig?

Beitrag #6430745 wurde von einem Moderator gelöscht.
Beitrag #6431302 wurde von einem Moderator gelöscht.
Beitrag #6431490 wurde von einem Moderator gelöscht.
Beitrag #6431562 wurde von einem Moderator gelöscht.
von M.A. S. (mse2)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ist es so, dass einen ASM so bekloppt macht, so nervig?
Es hat den Anschein.  :)

Beitrag #6431580 wurde von einem Moderator gelöscht.
Beitrag #6431589 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

Dann will ich nix von dem Zeugs...
Da ist so manche Crackhure vernünftiger.

Außerdem hilft mir der ASM Turn, in meiner kleinen Arduino Welt, nicht 
wirklich weiter. Da bin ich lieber voll auf dem C++ Puder.
AVR, SAM, ESP, STM32, um nur die üblichsten zu nennen, mit denen ich es 
da zu tun habe

Dann auch noch den "Kendryte K210".
Dessen Flash mit ASM voll zu bekommen, ist ein 10 Jahres Projekt.

Bitte falsch verstehen!
Ich habe nix gegen Assembler.
Selber schon ordentlich den Rüssel rein gehalten.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

void schrieb:
> Genau. Und in klassischem C hättest du ein Haufen von #defines in header
> files versteckt. ;-)
darum geht es aber nicht, sondern einzig und allein um die 
Ausführungsgeschwindigkeit und da ist C gegenüber C++ in der Regel 
besser.
Weiterhin ist #define eine von vielen Möglichkeiten; viele Wege führen 
nach Rom.

void schrieb:
> Zum C++. Die Sprachkonstrukte von C++ welche kleinen, hardwarenahen Code
> ermöglichen stellt Christopher klar da und auch die verschieden Vorteile
> von C++ gegenüber reinem C.
ja schön, C++ mag Vorteile in der Syntax haben, aber so gesehen könntest 
Du auch gleich zu 'hardwarenahen):' Java übergehen - das wäre dann 
wenigstens plattform unabhängig und auch Deine Kaffeemaschine wäre dann 
realtime-fähig :-)

> In meiner Praxiserfahrung jedoch kann C++ diesen Vorteil nicht
> ausspielen, da in der Entwicklung von low-level Treibern, HAL u.ä. eher
> hardware-orientierte Personen arbeiten welche sich eben nicht in die
> Tiefe mit den Besonderheiten von neuen C++ Sprachkonstrukten auskennen
> und daher eher C verwenden.
LOL, wenn C++ in Bezug auf Realtime wirklich was bringen würde, könnte 
man die lowlevel Treiber, etc. ja jetzt ganz locker auch in C++ umsetzen 
... macht man aber nicht, weil C eben doch die bessere Wahl dafür ist.
Noch besser als C in Bezug auf Realtime ist dann Assembler - nur das 
kann ja keiner mehr und will aufgrund der Komplexität auch niemand mehr.
C++ realtime ist einzig und allein dem Umstand geschuldet, daß man 
aufgrund der Speicherresourcen keinerlei Einschränkungen mehr hat wie 
das früher der Fall war.
C++ ist eine nette Sprache, aber man muß sie nicht überall und für alles 
zwanghaft anwenden.

@ TO
Viel Spaß beim Buchverkauf

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Es fehl am Platze ist!
>
> Zumindest mir geht es so.
> Mich interessiert C++ auf µC schon.
>
> Ja, mich stört der Störenfried.
> Und meine Zuneigung zu ASM schrumpft dadurch auch.
> Ich muss mir nur vorstellen, dass man so bekloppt werden kann, wenn man
> sich auf ASM fixiert.

das paßt total in die heutige Zeit - mit Kanonen auf Spatzen schießen 
geht natürlich auch und scheint wohl auch voll in zu sein :-)) LOL

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> sondern einzig und allein um die
> Ausführungsgeschwindigkeit und da ist C gegenüber C++ in der Regel
> besser.
Das ist doch nur eine Durchhalteparole für C++ Verweigerer.
Gerade was das Register und Portgefummel angeht, liegen beide gleich 
auf. Selbst mit Assembler, und das auch noch Typesicher und ohne Makros.

Klar auf den kleinen µC fehlen viele gehobene C++ Features, wie 
Container und das ganze RuntimeTypeHandling. Schicksal.

Sicherlich kann man sich auch blöd anstellen, denn auch in C++ kann man 
Mist bauen. Bietet sogar mehr Möglichkeiten, sowohl im positiven, als 
auch im negativen.
Aber davon abgesehen bietet C keine nennenswerten Vorteile.

Robert K. schrieb:
> C++ ist eine nette Sprache, aber man muß sie nicht überall und für alles
> zwanghaft anwenden.
Was postulierst du da einen Zwang hin?
Auch ist sie nicht "nett", es dürfte die schwierigste Sprache für µC 
sein. Zumindest ich kenne keine komplexere.
Es ist einfach die mächtigere Sprache!
Unterstützt viel mehr Paradigmen.
Wenn man nur die Sicherheit von Referenzen gegenüber Zeigern betrachtet, 
hat man schon genügend Vorteil für eine Entscheidung.

OK, wenn man damit nicht klar kommt, oder dazu neigt Mist zu bauen, dann 
sollte man vielleicht die Finger von C++ lassen und sich mit C oder ASM 
beschäftigen.

Und sowieso...
Soll doch jeder seine Lieblingssprache nutzen, wenn er/sie/es die Wahl 
hat.
Da muss man keine verdrehten Argumente an den Haaren herbeizerren um 
anderen die Arbeit madig zu machen.
Schon gar nicht den Priester raus kehren!
Die ganzen Priester, egal, welchen Verein sie vertreten, sind angefüllt 
mit "Glaubenssätzen" die man bitte ja nicht auf Wahrheitsgehalt 
überprüfen darf.
Nicht immer, aber so häufig, dass man eine Regel draus ableiten kann.


Auch:
Das ist gar nicht die Frage in diesem Thread.
Sondern im Buch dreht es sich darum WIE man C++ auf µC RICHTIG nutzt.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Das ist doch nur eine Durchhalteparole für C++ Verweigerer.
> Gerade was das Register und Portgefummel angeht, liegen beide gleich
> auf. Selbst mit Assembler, und das auch noch Typesicher und ohne Makros.
>
> Klar auf den kleinen µC fehlen viele gehobene C++ Features, wie
> Container und das ganze RuntimeTypeHandling. Schicksal.
nix Schicksal, da kann man dann C anwenden (wenn man es überhaupt kann) 
und es wird ja auch immer noch gemacht.
Was meinst Du denn weshalb die ganzen Treiber und andere 
Echtzeitanwendungen in C programmiert wurden?

Arduino Fanboy D. schrieb:
> Sicherlich kann man sich auch blöd anstellen, denn auch in C++ kann man
> Mist bauen. Bietet sogar mehr Möglichkeiten, sowohl im positiven, als
> auch im negativen.
> Aber davon abgesehen bietet C keine nennenswerten Vorteile.
Der Vorteil von C ist, daß ich eben nicht Microcontroller benötige, die 
noch Anforderungen an Speicher, etc. stellen ... und genau da müßte 
Deine Argumentation ansetzen.
Wir sind eine Wegwerfgesellschaft und die paar Euro mehr für 'bessere' 
Hardware spielt überhaupt keine Rolle mehr - und genau deswegen gibt es 
C++

Arduino Fanboy D. schrieb:
> Was postulierst du da einen Zwang hin?
Das ist der Zwang sich mit C++ befassen zu müssen ...

Arduino Fanboy D. schrieb:
> Auch ist sie nicht "nett", es dürfte die schwierigste Sprache für µC
> sein. Zumindest ich kenne keine komplexere.
> Es ist einfach die mächtigere Sprache!
Die Sprache ist einfacher in der Syntax als C und viele Konzepte wie 
Fenster lassen sich mit C++ einfacher umsetzen (dafür gibt es in C dann 
GTK+ etc. und das hat es dann in sich).
Aus Marketinggründen wird komischerweise C++ dann als Wunderwaffe für 
alles und nichts angepriesen.
Es gibt noch 1000 andere Sprachen und auch die haben eine Berechtigung.

Arduino Fanboy D. schrieb:
> Wenn man nur die Sicherheit von Referenzen gegenüber Zeigern betrachtet,
> hat man schon genügend Vorteil für eine Entscheidung.
Sorry, aber wenn es um Sicherheit geht, dann ist ADA die erste Wahl - 
diese Sprache wird immer noch im militärischen Bereich angewandt und das 
sagt dann wohl alles ?!

Arduino Fanboy D. schrieb:
> OK, wenn man damit nicht klar kommt, oder dazu neigt Mist zu bauen, dann
> sollte man vielleicht die Finger von C++ lassen und sich mit C oder ASM
> beschäftigen.
Alle Sprachen kannst Du sowieso nicht beherrschen - solche Leute können 
von allen ein bißchen und sind mit Vorsicht zu genießen.
Ein guter C Programmierer wird niemals ein guter C++ Programmierer und 
umgekehrt auch nicht - Du ruinierst Dir Dein Sprachwissen, wenn Du 
ähnliche Sprachen machst.
Richtig, bleib bei C++ aber versuche nicht C++ in den Himmel zu loben 
... auch andere Sprachen haben Ihre Berechtigung.

Arduino Fanboy D. schrieb:
> Soll doch jeder seine Lieblingssprache nutzen, wenn er/sie/es die Wahl
> hat.
> Da muss man keine verdrehten Argumente an den Haaren herbeizerren um
> anderen die Arbeit madig zu machen.
> Schon gar nicht den Priester raus kehren!
Den Priester kehrst Du raus, indem Du weiter oben davon sprichst, daß es 
bei C keine Vorteile gegenüber C++ gibt - das ist schlicht falsch.

Arduino Fanboy D. schrieb:
> Die ganzen Priester, egal, welchen Verein sie vertreten, sind angefüllt
> mit "Glaubenssätzen" die man bitte ja nicht auf Wahrheitsgehalt
> überprüfen darf.
genau und deshalb solltest Du solche Aussagen ebenfalls unterlassen 
sonst bist Du selbst ein Priester für C++
Bleib bei C++ und gut ist es.

Arduino Fanboy D. schrieb:
> Das ist gar nicht die Frage in diesem Thread.
> Sondern im Buch dreht es sich darum WIE man C++ auf µC RICHTIG nutzt.
Es geht um Realtime-Programmierung ... das muß nicht zwingend 
Microcontroller sein; wir wissen nicht was in dem Buch steht und selbst 
der TO hat es ja nicht gelesen.

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> genau und deshalb solltest Du solche Aussagen ebenfalls unterlassen
> sonst bist Du selbst ein Priester für C++
> Bleib bei C++ und gut ist es.
Mein Sohn!
Natürlich darfst du meine Aussagen auf den Prüfstand stellen.
Aber nicht mir das Maul verbieten wollen.
Das ist arrogant und anmaßend.

Und noch mal:
Dieses ist ein Thread über ein C++ Buch.
Irgendwelche C und ASM Prister, auch du, sind gegen C++ eingestellt. Und 
müssen ihre "Meinung" hier in die Öffentlichkeit herausblasen. Tun dabei 
aber gleichzeitig, wenn auch indirekt kund, dass sie keine Ahnung davon 
haben. Und es auch nicht nutzen wollen.

Wie nennt man das, wenn eine Meinung herausgeblasen wird, die einer 
sachlichen Überprüfung nicht standhält?
Ein Irrtum?
Und nach hinweis, auf den Irrtum?
Eine Lüge? Oder Dummheit?

Da ist der Haken wo deine Argumentation krakelt.
Keine Sachargumente.
Keine Überprüfbarkeit.
Reine Stimmungsmache ohne Fakten.



Robert K. schrieb:
> und genau da müßte
> Deine Argumentation ansetzen.
Nee...
Deine Argumentation müsste anders aussehen!
Ich liefere dir mal ein fundiertes Argument gegen C++.

Das Interface/API einer geschickt in C abgefassten Library ist 
problemlos in C++ nutzbar. Der umgekehrte Weg ist mit C++ Libraries/APIs 
nicht so ohne weiteres möglich.


-------

Robert K. schrieb:
> Sorry, aber wenn es um Sicherheit geht, dann ist ADA die erste Wahl -
Sorry, aber das ist eine Ebene der Kommunikation, welche offensichtlich 
macht, dass du an einem Dialog nicht wirklich interessiert bist, sondern 
den Disput möchtest.
Du selber hast den Vergleich C zu C++ hier angestoßen.
Und ich sagte dir, dass alleine das Konzept der Referenzen schon genug 
Grund für einen Umstieg sein kann.
Anstatt das zugeben zu können, kommst du mit der Ablenkung ADA.

Nee...
So kommen wir nicht zusammen...

Beitrag #6433052 wurde von einem Moderator gelöscht.
Beitrag #6433065 wurde von einem Moderator gelöscht.
Beitrag #6433072 wurde von einem Moderator gelöscht.
Beitrag #6433077 wurde von einem Moderator gelöscht.
Beitrag #6433081 wurde von einem Moderator gelöscht.
Beitrag #6433099 wurde von einem Moderator gelöscht.
von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Mein Sohn!
bin ich nicht - geht's auch sachlicher?

> Natürlich darfst du meine Aussagen auf den Prüfstand stellen.
> Aber nicht mir das Maul verbieten wollen.
> Das ist arrogant und anmaßend.
Quatschikowski!
Wenn Du hier postulierst, daß C keinerlei Vorteile gegenüber C++ hat und 
gleichzeitig auch noch herausstellt, daß jede Kritik an Deiner 
Lieblingssprache einer Verschwörung aka Priestertum gleichkommt, dann 
ist das eine Doppelmoral ... und die darf man sehr wohl auch als solche 
benennen, egal ob Dir das paßt oder nicht.

>
> Und noch mal:
> Dieses ist ein Thread über ein C++ Buch.
nein, es ist eine Frage zu einem C++ Buch ... einfach mal lesen!
Er fragt ob das Buch taugt, weil er sich das Lesen ersparen will, wenn 
es nicht taugt.
Nun ja, Lesen bildet war mal früher ):

> Irgendwelche C und ASM Prister, auch du, sind gegen C++ eingestellt.
Wieso das denn, ich habe nichts gegen C++
Ich finde lediglich die Kombination C++ und Realtime mehr als 
fragwürdig.
Dafür wurde diese Sprache nicht geschaffen und den Kreis muß man nicht 
zum Quadrat verbiegen.

> Und
> müssen ihre "Meinung" hier in die Öffentlichkeit herausblasen.
Ja allerdings, damit Personaler und andere Unwissende mal was dazu 
lernen.

> Tun dabei
> aber gleichzeitig, wenn auch indirekt kund, dass sie keine Ahnung davon
> haben. Und es auch nicht nutzen wollen.
Jo, das merkt man an Deinen Aussagen.

> Wie nennt man das, wenn eine Meinung herausgeblasen wird, die einer
> sachlichen Überprüfung nicht standhält?
> Ein Irrtum?
> Und nach hinweis, auf den Irrtum?
> Eine Lüge? Oder Dummheit?
Meine Behauptungen halten sachlich stand!
Du kannst jeden Treiber, der in C geschrieben wurde auch in C++ oder 
auch in Java, usw., usw. umprogrammieren - das steht Dir frei!
Es gibt Gründe warum man das nicht macht.
Die Ausführungsgeschwindigkeit wird in Abhängigkeit von der Hardware 
langsamer, bei guter Hardware merkst Du das nicht.
In Bezug auf Realtime ist gute Hardware aber nicht das 
Totschlag-Argument.

>
> Da ist der Haken wo deine Argumentation krakelt.
> Keine Sachargumente.
> Keine Überprüfbarkeit.
> Reine Stimmungsmache ohne Fakten.
die hast Du NICHT gelesen, ebenfalls hast Du nicht gelesen, daß der TO 
eine Frage gestellt hat.
Nichts gelesen, nichts begriffen, Hauptsache DAGEGEN


>
> Das Interface/API einer geschickt in C abgefassten Library ist
> problemlos in C++ nutzbar. Der umgekehrte Weg ist mit C++ Libraries/APIs
> nicht so ohne weiteres möglich.
nochmal bei Realtime geht es um Millisekunden in der 
Ausführungsgeschwindigkeit der Anwendung und nicht um die 
Programmiersprache und der Konvertierungsmöglichkeiten.
Auf mein Treiber in C Argument gehst Du natürlich nicht ein, schon klar.

> Du selber hast den Vergleich C zu C++ hier angestoßen.
Wer hat denn angefangen?
C hat gegenüber C++ keinerlei Vorteile - das war Deine Aussage ganz weit 
oben nachzulesen.

> Und ich sagte dir, dass alleine das Konzept der Referenzen schon genug
> Grund für einen Umstieg sein kann.
aber eben nicht in Bezug auf Realtime.

> Anstatt das zugeben zu können, kommst du mit der Ablenkung ADA.
weil es Fakt ist.
ADA wird im Sicherheitsbereich immer noch eingesetzt, obwohl es C++ 
gibt.
Auch C++ hat eben Schwächen - das heißt nicht, daß C++ deswegen generell 
schlecht ist ... es kommt eben auf die Anwendung an.

>
> Nee...
> So kommen wir nicht zusammen...
Wenn man nur von einer Sprache überzeugt ist so wie Du, dann ist das 
wohl so.

von Hans-Georg L. (h-g-l)


Lesenswert?

Ich dachte in diesem Thread geht es um eine Buchbesprechung ...
OK, die Frage des TE "Ich habe ein Buch, wer liest es für mich ?" war 
wirklich blöd und die Kommentare dazu hat er damit auch verdient.

Aber es gibt hier wirklich keinen Thread über Embedded C++ wo keine 
Nebenkriegsschauplätze eröffnet werden.
C++ ist in den letzten Jahren dynamischer geworden und die verschiedenen 
Versionen machen das Lesen und Lernen aus Büchern und Beispielen auch 
nicht leichter. Aber es lohnt sich meiner Meinung nach auch dieses Buch 
zu lesen.

Mehr zur Performance von C++ gibt es hier :
http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> Wer hat denn angefangen?
Du natürlich.

Falls du das schon vergessen haben solltest, hier der Einsatz eines C 
Pristers:
Beitrag "Re: Buch: Realtime C++"

Robert K. schrieb:
> weil es Fakt ist.
Es gibt noch mehr Fakten!
z.B. "Oben ist nicht da wo unten ist!"
Hat das was mit C oder C++ zu tun?
Nee, ne?

Zeiger sind ein steter Quell von Ungemach in der C Welt, und nicht nur 
dort. Wenigstens das sollte einem jeden C Priester klar sein.
Ob es ADA gibt, oder wie verbreitet es ist, hat damit nichts zu tun.
Es ist einfach nur eine Nebelkerze.

von Johannes S. (Gast)


Lesenswert?

Robert K. schrieb:
> Wieso das denn, ich habe nichts gegen C++
> Ich finde lediglich die Kombination C++ und Realtime mehr als
> fragwürdig.
> Dafür wurde diese Sprache nicht geschaffen und den Kreis muß man nicht
> zum Quadrat verbiegen.

Die Meinung kann man haben, das zeigt aber nur das du dich damit nicht 
richtig beschäfftigt hast. Vielleicht erstmal das Buch um das es hier 
geht leen?

von void (Gast)


Lesenswert?

Robert K. schrieb im 
Beitrag "Re: Buch: Realtime C++"
> nein, es ist eine Frage zu einem C++ Buch ... einfach mal lesen!

Schon eine gewagte Aussage von jemandem der selbst behauptet es nicht 
gelesen zu haben.

> wir wissen nicht was in dem Buch steht
>  und selbst der TO hat es ja nicht gelesen. (..)
>
> Nichts gelesen, nichts begriffen


Da der einigste der das Buch gelesen hat wohl ich bin,
möchte ich mich noch bei Hans-Georg für die Weiterführende 
Literatur-Empfehlung bedanken.

Hans-Georg L. schrieb im 
Beitrag "Re: Buch: Realtime C++"
> Aber es lohnt sich meiner Meinung nach auch dieses Buch zu lesen.
> Mehr zur Performance von C++ gibt es hier:
> http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> Auf mein Treiber in C Argument gehst Du natürlich nicht ein, schon klar.
Doch doch!
Nur hast du es offensichtlich nicht als solches wahrgenommen...

Aber hier gerne nochmal:
Arduino Fanboy D. schrieb:
> Das Interface/API einer geschickt in C abgefassten Library ist
> problemlos in C++ nutzbar. Der umgekehrte Weg ist mit C++ Libraries/APIs
> nicht so ohne weiteres möglich.
Wenn eine API/Library in C genutzt werden soll, macht es Sinn diese in C 
statt in C++ zu schreiben.

Robert K. schrieb:
> nochmal bei Realtime geht es um Millisekunden in der
> Ausführungsgeschwindigkeit der Anwendung und nicht ....
Es geht auch um Speicherplatz auf µC.

Mir scheint, dass diese "Laufzeitnachteile" nur in deinem Kopf 
existieren. Einen Bezug zur Realität hat das eher nicht.
Vielleicht wäre es mal angesagt, dass du dafür ein belastbares Beispiel 
zeigst. So eine Art Diskussionsgrundlage.
Alternativ könnte ich dir auch ein Beispiel aus meiner Welt zeigen, wo 
du dir in C einen Ast abbrichst, um das so effizient hin zu bekommen.
So eine Art Schwanzvergleich.

Beitrag #6433238 wurde von einem Moderator gelöscht.
von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Du natürlich.
>
> Falls du das schon vergessen haben solltest
richtig, kam zwar nicht von Dir, aber ich mich darauf bezogen und dem 
Post stimmst Du ja zu:
> void schrieb:
>> Zum C++. Die Sprachkonstrukte von C++ welche kleinen, hardwarenahen Code
>> ermöglichen stellt Christopher klar da und auch die verschieden Vorteile
>> von C++ gegenüber reinem C.
denn, Deine Aussage:
Arduino Fanboy D. schrieb:
> Dann will ich nix von dem Zeugs...
> Da ist so manche Crackhure vernünftiger.
bezeugt ja, daß es nix besseres als C++ gibt - egal was, universelle 
Programmiersprache für alles ... also bitte, was willst Du denn 
überhaupt ?!

Arduino Fanboy D. schrieb:
> Mir scheint, dass diese "Laufzeitnachteile" nur in deinem Kopf
> existieren. Einen Bezug zur Realität hat das eher nicht.
> Vielleicht wäre es mal angesagt, dass du dafür ein belastbares Beispiel
> zeigst. So eine Art Diskussionsgrundlage.
Ich glaube Beispiele würden bei C++ Jüngern nix bringen.
Du kannst das u.a. unter Linux nachprüfen, wenn der KDE Desktop startet 
(in C++ programmiert) oder alternativ ein anderer Desktop, der in C 
programmiert wurde - insbesondere bei alten Rechner wird der Unterschied 
deutlich.
Aber ist klar, daß es jetzt 1000 Gegenargumente gibt.
Fakt ist und bleibt, daß z.B. Treiberprogramme nicht umgeschrieben 
werden in C++ entweder weil es von der Hardware gar nicht geht oder weil 
es u.a. Laufzeitprobleme gibt.

Arduino Fanboy D. schrieb:
> Alternativ könnte ich dir auch ein Beispiel aus meiner Welt zeigen, wo
> du dir in C einen Ast abbrichst, um das so effizient hin zu bekommen.
das ist richtig! Aber das ist deswegen kein Argument gegen C als 
Sprache.
Assembler würde ja auch noch gehen und das wäre dann noch besser ... nur 
eben eine Mammutaufgabe mit Assembler Inline Code.

Beitrag #6433287 wurde von einem Moderator gelöscht.
Beitrag #6433293 wurde von einem Moderator gelöscht.
Beitrag #6433300 wurde von einem Moderator gelöscht.
von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

void schrieb:
> Schon eine gewagte Aussage von jemandem der selbst behauptet es nicht
> gelesen zu haben.
na ja und, was rätst Du jetzt dem TO ?
Ich würde ihm raten das Buch zu verkaufen, weil es bei dem Buch um kein 
Anfänger-Buch handelt und der TO ist Anfänger ... davon darf man 
ausgehen allein schon aufgrund der Fragestellung!

void schrieb:
> Da der einigste der das Buch gelesen hat wohl ich bin,
> möchte ich mich noch bei Hans-Georg für die Weiterführende
> Literatur-Empfehlung bedanken.
ja toll, C++ ler unter sich - aber irgendwann habt Ihr auch mal 
angefangen und bestimmt nicht mit Literatur für Fortgeschrittene in 
dieser Sprache bzw. Highend-Entwickler.
Deswegen Verkauf solange man noch Geld dafür bekommen kann.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> Ich glaube Beispiele würden bei C++ Jüngern nix bringen.
Ja, der Glaube, das ist der wahre Kern des Priesters.

Ja, mir scheint, es macht wirklich keinen Sinn....
Es ist schon ok, dass du dich dem nicht stellen möchtest.
Total menschlich, vielleicht etwas feige, aber doch menschlich.

Beitrag #6433393 wurde von einem Moderator gelöscht.
von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ja, mir scheint, es macht wirklich keinen Sinn....
nö kann man nichts machen, gegen Argumente gibt's nur das übliche 
Gelaber

Arduino Fanboy D. schrieb:
> Total menschlich, vielleicht etwas feige, aber doch menschlich.
weiter oben habe ich die Gründe genannt - wer jede Programmiersprache 
beherrscht ist ein Hochstapler ... das geht nämlich nicht.

Fazit/Ratschlag für den TO:
Das ist kein Anfängerbuch ... so kann man sich als Anfänger am besten 
die Freude am programmieren zerstören.

von Hans-Georg L. (h-g-l)


Lesenswert?

void schrieb:
> Da der einigste der das Buch gelesen hat wohl ich bin,
> möchte ich mich noch bei Hans-Georg für die Weiterführende
> Literatur-Empfehlung bedanken.

keine Sorge ich hab es auch gelesen ;-)

Auch sehr zu empfehlen:
Scott Meyers Effective C++ in an Embedded Environment

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> weiter oben habe ich die Gründe genannt
Nein!
Du hast mehrfach behauptet, dass C++ langsamer in der Ausführung ist, 
als C.

Und jetzt bist du nicht bereit diese Behauptung durch ein 
praxisrelevantes Beispiel zu bestätigen.
Das ist das, was ich feige nenne.
Kneifen.
Behauptungen aufstellen, aber nicht bereit, den Nachweis zu führen.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Hans-Georg L. schrieb:
> Auch sehr zu empfehlen:
> Scott Meyers Effective C++ in an Embedded Environment

Das kannst Du auch in C haben und wozu kaufen, wenn es als pdf 
preiswerter geht,
Free PDF Download ... so sieht es aus mit Büchern:
https://barrgroup.com/embedded-systems/books/embedded-c-coding-standard

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Nein!
> Du hast mehrfach behauptet, dass C++ langsamer in der Ausführung ist,
> als C.
und das stimmt ja auch ... nur merkst Du das je nach Anwendung und je 
nach Hardware überhaupt nicht mehr - genau dieses Argument pro C++ 
müßtest Du eigentlich bringen! Machst Du aber nicht, das muß ich machen 
):
Aus diesem Grund programmiert auch kein normaler Mensch mehr in 
Assembler selbst wenn es um hardwarenahe Anwendungen geht.

Arduino Fanboy D. schrieb:
> Und jetzt bist du nicht bereit diese Behauptung durch ein
> praxisrelevantes Beispiel zu bestätigen.
siehe oben, Linux und die verschiedenen Desktops - daran ist mir das 
aufgefallen und ein anderer Fakt ist, daß zumindest in der Anfangszeit 
von C++ erst einmal intern vom C++ Compiler als Zwischenschritt 
unsichtbar in C umcompiliert wurde, weil C++ eben eine Obermenge von C 
ist ... falls Dir Mengenlehre überhaupt was sagt.
Ich behaupte nicht, daß C++ schlecht ist, sondern daß je nach Anwendung 
auch andere Sprachen viel sinnvoller sein können ... was Du ja partout 
nicht einsiehst!
Im Realtime Bereich wäre für mich C++ nicht unbedingt die erste Wahl - 
aber hängt auch von ganz anderen Faktoren ab. Wenn z.B. Deine Firma, 
etc. das unbedingt so will, ist ja alles gut.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Geil, meine Beiträge (z.B. auch Buchempfehlung mit Link) werden generell 
negativ bewertet nur weil sie von mir kommen ... wie dumm muß man hier 
eigentlich sein :-)

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Robert K. schrieb:
> Geil, meine Beiträge (z.B. auch Buchempfehlung mit Link) werden generell
> negativ bewertet nur weil sie von mir kommen ... wie dumm muß man hier
> eigentlich sein :-)

Hier werden keine Beiträge bewertet, sondern Autoren.

von Johannes S. (Gast)


Lesenswert?

Robert K. schrieb:
> und ein anderer Fakt ist, daß zumindest in der Anfangszeit
> von C++ erst einmal intern vom C++ Compiler als Zwischenschritt
> unsichtbar in C umcompiliert wurde, weil C++ eben eine Obermenge von C
> ist ...

Das hat der Bjarne mal 1985 gemacht weil er keinen C++ Compiler aus dem 
Hut zaubern konnte, aber mit deinen Vorurteilen bist du scheinbar auf 
diesem Stand stehen geblieben.

von Hans-Georg L. (h-g-l)


Lesenswert?

Robert K. schrieb:
> Geil, meine Beiträge (z.B. auch Buchempfehlung mit Link) werden generell
> negativ bewertet nur weil sie von mir kommen ... wie dumm muß man hier
> eigentlich sein :-)

Das Thema hier ist ein Buch über Embedded C++ und du beantwortest eine 
Empfehlung für ein dazu passendes Buch  mit etwas völlig anderem. Da 
hättest du genauso gut einen Link auf ein Kochbuch posten können.

Kapere keine Threads, mache einen eigenen für deine Ergüsse auf.
PS die Bewertung war nicht von mir, kann sie aber verstehen.

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> und das stimmt ja auch ..
Nachweis?

Robert K. schrieb:
> Linux und die verschiedenen Desktops
Das ist eine an den Haaren herbei gezerrte Nebelkerze.
Wir reden hier über µC, Echtzeit und C++.
Und du behauptest, dass C da besser da steht.
Lieferst aber keinen Nachweis.

Robert K. schrieb:
> daß zumindest in der Anfangszeit
> von C++ erst einmal intern vom C++ Compiler als Zwischenschritt
> unsichtbar in C umcompiliert wurde,
Ja und...
Damals war alles besser?
Oder, was soll das jetzt zum Thema beitragen.

Robert K. schrieb:
> weil C++ eben eine Obermenge von C
> ist ... falls Dir Mengenlehre überhaupt was sagt.
Offensichtlich sagt dir Mengenlehre weniger als mir.
Denn es gibt eine Schnittmenge, aber C ist keine Teilmenge.
Vor 30 Jahren mag das so gewesen ein.
Der Drops ist aber schon längst gelutscht.

Robert K. schrieb:
> Im Realtime Bereich wäre für mich C++ nicht unbedingt die erste Wahl -
Das sei dir ungenommen!
Deine persönliche Entscheidung macht aber nicht automatisch C für die 
bessere Sprache auf µC.

von Hans-Georg L. (h-g-l)


Lesenswert?

Ich habe auch wieder den Link auf Scott Meyers Schulungsunterlagen zum 
Thema gefunden.

https://aristeia.com/TalkNotes/C++_Embedded_Deutsch.pdf

von Hans-Georg L. (h-g-l)


Lesenswert?

Cyblord -. schrieb:
> Robert K. schrieb:
>> Geil, meine Beiträge (z.B. auch Buchempfehlung mit Link) werden generell
>> negativ bewertet nur weil sie von mir kommen ... wie dumm muß man hier
>> eigentlich sein :-)
>
> Hier werden keine Beiträge bewertet, sondern Autoren.

Das mag vielleicht daran liegen, das manche Autoren immer das gleiche 
egal zu welchem Thema schreiben. Das muss man nicht unbedingt jedesmal 
lesen sondern kann der Einfachheit halber gleich den Autor bewerten.

: Bearbeitet durch User
von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Cyblord -. schrieb:
> Hier werden keine Beiträge bewertet, sondern Autoren.
aha; für jeden Post eine erneute Einzelbewertung des Autors, LOL.



Hans-Georg L. schrieb:
> Das Thema hier ist ein Buch über Embedded C++
nein, das Thema ist Realtime C++, kennt jemand diese Werk, ist es 
empfehlenswert?

> und du beantwortest eine
> Empfehlung für ein dazu passendes Buch  mit etwas völlig anderem.
nein, ich habe dem TO die Empfehlung gegeben das Buch zu verkaufen!
Die Link-Empfehlung habe ich deshalb gemacht, weil hier so getan wird 
als ob nur C++ für embedded geeignet ist - ist es nicht, es gibt genug 
Alternativen.
Das obige Buch befaßt sich mit Realtime C++ und embedded ist dann eben 
nur ein Teilauschnitt.

Hans-Georg L. schrieb:
> Da hättest du genauso gut einen Link auf ein Kochbuch posten können.
machen die anderen hier ja auch, nur da ist es ein C++ Kochbuch?
Das ist dann besser, weil C++
Merkst Du langsam wie lächerlich es hier wird ):

Hans-Georg L. schrieb:
> Kapere keine Threads, mache einen eigenen für deine Ergüsse auf.
Jawohl, mein ... - spare Dir doch einfach Deine Rechten Ratschläge;
Dein Tonfall ist echt für die Tonne!

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Nachweis?
u.a. auch c't
siehe:
http://www.wikiservice.at/dse/wiki.cgi?ProgrammierSpracheUndLaufzeit
natürlich darf C++ keinerlei Nachteile haben - ist schon klar.

Arduino Fanboy D. schrieb:
> Ja und...
> Damals war alles besser?
> Oder, was soll das jetzt zum Thema beitragen.
d.h. der TO als Anfänger muß die Entscheidung treffen und ihm dann noch 
sowas spezielles als Buch zu empfehlen sagt ja schon einiges aus )):

Arduino Fanboy D. schrieb:
> Denn es gibt eine Schnittmenge, aber C ist keine Teilmenge.
Aha, was geht denn in C, was ich in C++ nicht nachbilden kann?
Glaubst Du doch selber nicht was Du da redest.
Genau deswegen gab es doch C++, weil bestimmte Programmierkonzepte in 
C++ wesentlich einfacher gehen ):
Aber nö, C ist eine Schnittmenge - bei einer Schnittmenge würde einiges 
was mit C funktioniert unter C++ gar nicht funktionieren ... und diese 
Aussage ist falsch.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> Aber nö, C ist eine Schnittmenge - bei einer Schnittmenge würde einiges
> was mit C funktioniert unter C++ gar nicht funktionieren ... und diese
> Aussage ist falsch.
Damit hast du dich und deine Aussagen endgültig disqualifiziert.

Siehe, z.B. die Struktur Initialisierung.
1
struct person 
2
{
3
  char name[50];
4
  int alter;
5
} ;
6
7
struct person kurt = {.name = "Maier", .alter = 42};
Damit ist der Beweis gegen "Teilmenge" geführt.


Interessanter Effekt:
Jetzt zeigt sich, dass ich nicht nur in C++ sattelfester bin, sondern 
auch in C.
Was für eine Überraschung...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Was in cpp auc nicht geht ab in C:
1
enum kekse {
2
  butter = 0x01,
3
  schoko = 0x02,
4
  supercookie = 0x03,
5
};
6
7
enum kekse variable = butter | schoko;
8
9
if (supercookie == variable) {
10
  printf("zombieland nervt!");
11
}

Das fliegt dir in cpp knallhart um die Ohren, weil da ein enum eine 
Klasse ist und vor allem typsicher und kein verdeckter int mehr.
Also troll dich zurück in deine Zombiehöhle!

(Sowas hab ich mal bei nem WLAN Treiber gesehen und das wollt in cpp 
nicht compilen)

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Damit ist der Beweis gegen "Teilmenge" geführt.
in C++ sind das dann wohl Klassen und damit ist Deine Teilmenge wieder 
hinfällig, siehe auch
https://www.learn-c.org/de/Structures
Soweit ich mich grob erinnere ist 'struct' auch schon C11 und taucht im 
ursprünglichen Ansi C nicht auf.
Ich gebe auch freimütig zu, super duper Programmierer bin ich nicht und 
brauche ich auch nicht mehr zu sein.

Arduino Fanboy D. schrieb:
> Jetzt zeigt sich, dass ich nicht nur in C++ sattelfester bin, sondern
> auch in C.
> Was für eine Überraschung...
ich sag mal so: wer glaubt beides gleich gut zu beherrschen, der irrt 
sich.
Spätestens bei GTK+ bist Du jedenfalls nicht mehr dabei, weil Du dann 
sowieso C++ wählen wirst, oder ?!

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Hier noch der Compilererror:
1
main.c: In function 'int main()':
2
main.c:68:30: error: invalid conversion from 'int' to 'kekse' [-fpermissive]
3
   68 | enum kekse variable = butter | schoko;
4
      |                       ~~~~~~~^~~~~~~~
5
      |                              |
6
      |                              int

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Mw E. schrieb:
> (Sowas hab ich mal bei nem WLAN Treiber gesehen und das wollt in cpp
> nicht compilen)
Auch in c++ gibt es wie bei c den c99, c11, usw. Standard - vielleicht 
hattest Du bei cpp einfach den falschen Compiler erwischt :-)

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Du machst eben Fehler in den Optionen des C++ Compilers.
Du kannst mit dem C++ Compiler auch C Programme compilieren, womit 
wiederum der irrsinnige Aspekt Schnittmenge vom Tisch ist.
Umgekehrt C++ Programme mit C Compiler compilieren geht nicht!

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> in C++ sind das dann wohl Klassen und damit ist Deine Teilmenge wieder
> hinfällig, siehe auch
> https://www.learn-c.org/de/Structures
> Soweit ich mich grob erinnere ist 'struct' auch schon C11 und taucht im
> ursprünglichen Ansi C nicht auf.
struct gibt es in beiden Sprachen.
Allerdings die von mir gezeigte Initialisierung nicht.
Damit ist die "Teilmenge" hinfällig.
Egal, ob du das einsehen möchtest, oder auch nicht.
Der Fakt ist völlig unabhängig von deinen Meinungen oder 
Glaubensbekenntnissen.


Robert K. schrieb:
> ich sag mal so: wer glaubt beides gleich gut zu beherrschen, der irrt
> sich.
Ach, das mag ja sein....
Aber unter dem Lichte betrachte, dürfte ich über die Jahre in C mehr 
Erfahrungen als in C++ gemacht haben. Ja, in Sachen C++ gibts für mich 
noch einiges zu lernen. Darum ist das eingangs genannte Buch auch in 
meinem Interessenbereich.

Und genau im gleichen Lichte dieser Erfahrung möchte ich behaupten:
Bitte erst C++ lernen!
Dann fällt dir C viel leichter, als umgekehrt.

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ja, in Sachen C++ gibts für mich
> noch einiges zu lernen. Darum ist das eingangs genannte Buch auch in
> meinem Interessenbereich.
vielleicht kannst Du dem TO das Buch ja preiswert abkaufen :-)
Ich sage ja nicht, daß es schlecht ist - nur für den TO wohl nicht so 
geeignet da viel zu speziell.

Arduino Fanboy D. schrieb:
> Und genau im gleichen Lichte dieser Erfahrung möchte ich behaupten:
> Bitte erst C++ lernen!
> Dann fällt dir C viel leichter, als umgekehrt.
würde ich nicht machen, weil Du Dir dann C garantiert vergraulst.
Im Prinzip die bewährte Reihenfolge:
Basic, Assembler, Pascal oder gleich C und dann C++ oder Java ... das 
reicht dann auch um einen Favoriten zu finden.

von Einer K. (Gast)


Lesenswert?

Robert K. schrieb:
> vergraulst
Vergraulen...
Darum dreht sichs doch gar nicht.
Außerdem scheint es mir, als hätte deine C Ausbildung dir das C++ 
vergrault.
Schade eigentlich...

Übrigens, eben ist wieder ein Thread hoch gehüpft, wo ich zeige, wie man 
in C++ zur Kompilezeit 2 Arrays miteinander zu einem dritten verknüpft, 
und der Kompiler das zu quasi Nichts zusammenschrumpft. 0 RAM Verbrauch, 
minimaler Code.
Ich behaupte: Das bekommt kein Assembler und kein C Programmierer 
innerhalb seiner Sprache hin. Und wenn doch, würde ich mich über eine 
gelungene Vorführung sehr freuen.
Beitrag "Re: Makro Funktionen avr-gcc"

Ob das ein schönes Beispiel ist, ka, aber es ist so Laufzeiteffizient, 
wie es nicht besser geht, mit keinem Mittel.
Es zeigt schön die Macht des C++, welche sich zur Kompilezeit zur 
Nutzung anbietet, zumindest einen Aspekt davon.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ich behaupte: Das bekommt kein Assembler und kein C Programmierer
> innerhalb seiner Sprache hin. Und wenn doch, würde ich mich über eine
> gelungene Vorführung sehr freuen.

Bitte sehr:

Dein Programm 1:1 nach C übersetzt:

1
#define arraySize 3
2
3
typedef int MeinArray[arraySize];
4
5
static MeinArray a = {1,2,3};
6
static MeinArray b = {4,5,6};
7
8
typedef struct
9
{
10
  MeinArray array;
11
} MeinContainer;
12
13
static MeinContainer fillContainer()
14
{
15
  MeinContainer c = {0};
16
  for(unsigned i = 0; i < arraySize; i++)
17
  {
18
    c.array[i] = a[i] + b[i] + i;
19
  }
20
  return c;
21
}
22
23
void setup(void) 
24
{
25
  MeinContainer c = fillContainer();
26
27
  for(unsigned i = 0; i < arraySize; i++)
28
  {
29
    PORTB = c.array[i];
30
  }
31
}

Erzeugter Assemblercode:

1
setup:
2
  ldi r24,lo8(5)
3
  out 0x18,r24
4
  ldi r24,lo8(8)
5
  out 0x18,r24
6
  ldi r24,lo8(11)
7
  out 0x18,r24
8
  ret

von Einer K. (Gast)


Lesenswert?

OK!
Danke!
Ja, geprüft und ist identisch.
Dann nehme ich meine Behauptung zurück.

Ein Fall mehr, wo beide gleichauf liegen.

Beitrag #6434020 wurde von einem Moderator gelöscht.
von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Arduino Fanboy D. schrieb:
> Außerdem scheint es mir, als hätte deine C Ausbildung dir das C++
> vergrault.
> Schade eigentlich...
das kann gut sein ... und jetzt wäre sowieso C# angesagt; 
Programmiersprachen haben einen fließenden Übergang.
Ich bin da mittlerweile auch raus.

Arduino Fanboy D. schrieb:
> Ein Fall mehr, wo beide gleichauf liegen.
Mittlerweile hat sich ja auch bei C++ viel getan; in der Anfangszeit 
fand ich C++ nicht so berauschend und hab dann auch abgeblockt bzw. 
deswegen wohl auch die Vorurteile.
Insofern würde ich an Deiner Stelle versuchen dem TO das Buch 
abzukaufen; Dir könnte es sicher noch was nützen.

von Günter N. (gnatz)


Lesenswert?

void schrieb:
> Das Problem von manchen Leuten hier im Forum ist, dass Sie ewig gestrige
> Nörgler sind. Hätte ich vorher wissen sollen, dass etwas zu dem Buch zu
> sagen hier total vergebene Zeitverschwendung war. Damit bin ich dann
> Mal raus.

Es ist leider so, dass es immer einige Leute gibt, die in fundierte 
Diskussionen unqualifizierte Bemerkungen einstreuen. Ich jedenfalls habe 
die Erläuterungen von void interessiert gelesen. Somit war das Erstellen 
jedenfalls keine Zeitverschwendung. Wer etwas - wie in diesem Fall void 
- zum Thema beitragen kann, sollte das auch tun und sich nicht durch 
Störmeldungen davon abhalten lassen.

Beitrag #6434536 wurde von einem Moderator gelöscht.
Beitrag #6434542 wurde von einem Moderator gelöscht.
von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Günter N. schrieb:
> Es ist leider so, dass es immer einige Leute gibt, die in fundierte
> Diskussionen unqualifizierte Bemerkungen einstreuen. Ich jedenfalls habe
> die Erläuterungen von void interessiert gelesen. Somit war das Erstellen
> jedenfalls keine Zeitverschwendung. Wer etwas - wie in diesem Fall void
> - zum Thema beitragen kann, sollte das auch tun und sich nicht durch
> Störmeldungen davon abhalten lassen.
merkst Du eigentlich wie armseelig dieser Post von Dir ist ?
Wahrscheinlich nicht ... RIP

von Robert K. (Firma: Zombieland) (rko)


Lesenswert?

Günter N. schrieb:
> Somit war das Erstellen
> jedenfalls keine Zeitverschwendung. Wer etwas - wie in diesem Fall void
> - zum Thema beitragen kann, sollte das auch tun und sich nicht durch
> Störmeldungen davon abhalten lassen.
für mich war der Thread sehr inspirativ - hab was im Web gefunden (hätte 
ich anfangs gar nicht gedacht das überhaupt zu finden) ... werde ich 
hier aber ganz bewußt nicht teilen, können ja die ganz schlauen Poster 
wie void machen - das überlasse ich dann dem großen void :-))
Bei Arduino Fanboy mache ich vielleicht eine Ausnahme, wenn es denn 
interessiert? Gute Enzyklopädie zu C++ :-)

von Uwe D. (monkye)


Lesenswert?

Cyblord -. schrieb:
> Walter T. schrieb:
>> IJustWannaKnow schrieb:
>>> Ich habs geschenkt
>>> bekommen. MFG.
>>
>> Dann kannst Du Dir ja selbst eine Meinung bilden.
>
> Dann müsste er es ja lesen. Heute sitzt man vor einem Buch, geht dann
> aber ins Netz und fragt wie dieses Buch so ist. Irre!

Ja, es ist eine Dienstleistung mit der sich Geld verdienen lässt. Seid 
langer Zeit, damals nicht mit einer App oder Online Rezension. Tja, die 
Bücher Top-10 bei Spiegel und Co. ist auch nix anderes...

Beitrag #6435220 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Yalu X. schrieb:
> Arduino Fanboy D. schrieb:
>> Ich behaupte: Das bekommt kein Assembler und kein C Programmierer
>> innerhalb seiner Sprache hin. Und wenn doch, würde ich mich über eine
>> gelungene Vorführung sehr freuen.
>
> Bitte sehr:
>
> Dein Programm 1:1 nach C übersetzt:
>
>
>
1
> #define arraySize 3
2
> 
3
> typedef int MeinArray[arraySize];
4
> 
5
> static MeinArray a = {1,2,3};
6
> static MeinArray b = {4,5,6};
7
> 
8
> typedef struct
9
> {
10
>   MeinArray array;
11
> } MeinContainer;
12
> 
13
> static MeinContainer fillContainer()
14
> {
15
>   MeinContainer c = {0};
16
>   for(unsigned i = 0; i < arraySize; i++)
17
>   {
18
>     c.array[i] = a[i] + b[i] + i;
19
>   }
20
>   return c;
21
> }
22
> 
23
> void setup(void)
24
> {
25
>   MeinContainer c = fillContainer();
26
> 
27
>   for(unsigned i = 0; i < arraySize; i++)
28
>   {
29
>     PORTB = c.array[i];
30
>   }
31
> }
32
>
>
> Erzeugter Assemblercode:
>
>
>
1
> setup:
2
>   ldi r24,lo8(5)
3
>   out 0x18,r24
4
>   ldi r24,lo8(8)
5
>   out 0x18,r24
6
>   ldi r24,lo8(11)
7
>   out 0x18,r24
8
>   ret
9
>

Einen Vorteil sieht man nur, wenn die Arraygröße eine bestimmte Schwelle 
überschreitet. bm09a.c und bm09b.cc wie oben:

Arraygröße 3:
1
text    data     bss     dec     hex filename
2
152       0       0     152      98 bm09a.elf
3
152       0       0     152      98 bm09b.elf

Arraygröße 20:
1
324      80       0     404     194 bm09a.elf
2
238      40       0     278     116 bm09b.elf

von Einer K. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> wenn die Arraygröße eine bestimmte Schwelle
> überschreitet.
Ja, das war klar mein Fehler!
Mein ursprüngliches Beispiel zeigt leider nicht die Wirkung des 
constexpr, sondern ehr die der "for loop unrolling" Optimierung.
Und da kann C natürlich prächtig mithalten.
Zudem ist es eine Eigenschaft des Compilers, und nicht der Sprache.

Meine Ergebnisse mit 20 Arrayelementen sehen leicht anders aus
> C++: 266 Bytes Flash - 40 Bytes RAM
> C  : 376 Bytes Flash - 80 Bytes RAM
Beides mit der Arduino IDE und Gcc 9.2


Interessant finde ich, dass kompetente Leute in der Lage und auch 
Willens sind, Annahmen und Behauptungen zu überprüfen, und dann auch die 
Ergebnisse wertfrei präsentieren.
Ich schätze mal, das ist DIE wirksame Möglichkeit, Dialoge C vs. C++ 
zu führen, ohne dass es in Grabenkämpfe ausartet.

Meinen herzlichen Dank, für diese Vorführung!

von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wilhelm M. schrieb:
>> wenn die Arraygröße eine bestimmte Schwelle
>> überschreitet.
> Ja, das war klar mein Fehler!
> Mein ursprüngliches Beispiel zeigt leider nicht die Wirkung des
> constexpr, sondern ehr die der "for loop unrolling" Optimierung.
> Und da kann C natürlich prächtig mithalten.
> Zudem ist es eine Eigenschaft des Compilers, und nicht der Sprache.
>
> Meine Ergebnisse mit 20 Arrayelementen sehen leicht anders aus
>> C++: 266 Bytes Flash - 40 Bytes RAM
>> C  : 376 Bytes Flash - 80 Bytes RAM
> Beides mit der Arduino IDE und Gcc 9.2
>
>
> Interessant finde ich, dass kompetente Leute in der Lage und auch
> Willens sind, Annahmen und Behauptungen zu überprüfen, und dann auch die
> Ergebnisse wertfrei präsentieren.
> Ich schätze mal, das ist DIE wirksame Möglichkeit, Dialoge C vs. C++
> zu führen, ohne dass es in Grabenkämpfe ausartet.
>
> Meinen herzlichen Dank, für diese Vorführung!

Etwas idiomatischer sähe es dann so aus (mit denselben Ergebnissen 
hinsichtlich Code):
1
#include <avr/io.h>
2
#include <cstdint>
3
#include <array>
4
5
using MeinArray = std::array<uint16_t, 20>;
6
7
constexpr auto a = []{
8
    MeinArray data;
9
    for(uint8_t v = 0; auto& d : data) {
10
        d = ++v;
11
    }
12
    return data;
13
}();
14
15
constexpr auto b = []{
16
    MeinArray data;
17
    for(uint8_t v = 0; auto& d : data) {
18
        d = ++v + 10;
19
    }
20
    return data;
21
}();
22
23
using MeinContainer = MeinArray;
24
25
void setup() {
26
    constexpr auto c = []{
27
        MeinContainer data;
28
        for(MeinArray::size_type i{0}; i < std::size(data); ++i) {
29
            data[i] = a[i] + b[i] + i;
30
        }
31
        return data;
32
    }();
33
    
34
    for(const auto& item : c) {
35
        PORTB = item; // Ausgabe
36
    }
37
}
38
39
int main() {}

Beitrag #6435640 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Für die Freunde des Loop-Unrolling könnte man die letzte Schleife auch 
folgendermaßen schreiben:
1
    [&]<auto... II>(std::index_sequence<II...>) {
2
        ((PORTB = c[II]), ...);
3
    }(std::make_index_sequence<std::size(c)>{});

(Und ja, ich weiß: die Schönheit des template-code liegt im Auge des 
Betrachters)

von Einer K. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> (Und ja, ich weiß: die Schönheit des template-code liegt im Auge des
> Betrachters)

Wenn es men nur das wäre......

Hier fängt es ja schon zu krankeln an:
> fatal error: cstdint: No such file or directory

von Carl D. (jcw2)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wilhelm M. schrieb:
>> (Und ja, ich weiß: die Schönheit des template-code liegt im Auge des
>> Betrachters)
>
> Wenn es men nur das wäre......
>
> Hier fängt es ja schon zu krankeln an:
>> fatal error: cstdint: No such file or directory

Nimm stattdessen
1
#include <inttypes.c>
oder
1
#include <stdint.c>
das ist beim Avr-GCC mit dabei.

avr-GCC hat keine c++ Lib, deshalb auch keine c<irgendwas> includes, 
aber auch kein <array>. Eventuell erzählt uns Wilhelm wo er das her hat.

Wobei, so kompliziert ist std:::array auch nicht.

von Einer K. (Gast)


Lesenswert?

Carl D. schrieb:
> Eventuell erzählt uns Wilhelm wo er das her hat.
Weiß nicht....
Die Indizienlage sagt was anderes.

von Wilhelm M. (wimalopaan)


Lesenswert?

Carl D. schrieb:
> Nimm stattdessen#include <inttypes.c>oder#include <stdint.c>das ist beim
> Avr-GCC mit dabei.

Nein.
Steht doch alles in der Doku:

https://en.cppreference.com/w/cpp/header/cstdint

std::array<> sollte doch als Fingerübung kein Problem sein. Wer das 
nicht will, schaut halt mal in der OSS-Version der stdlibc++ oder 
benutzt seine eigenen Programmierkentnisse.

von Carl D. (jcw2)


Lesenswert?

Wilhelm M. schrieb:
> Carl D. schrieb:
>> Nimm stattdessen#include <inttypes.c>oder#include <stdint.c>das ist beim
>> Avr-GCC mit dabei.
>
> Nein.
> Steht doch alles in der Doku:
>
> https://en.cppreference.com/w/cpp/header/cstdint
>
> std::array<> sollte doch als Fingerübung kein Problem sein. Wer das
> nicht will, schaut halt mal in der OSS-Version der stdlibc++ oder
> benutzt seine eigenen Programmierkentnisse.

Ich hab die Fingerübung längst gemacht. Ob aber jeder, der deinen Code 
ausprobieren will, das vorher auch machen will, bezweifle ich.

von Einer K. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Für die Freunde des Loop-Unrolling könnte man die letzte Schleife auch
> folgendermaßen schreiben:
>     [&]<auto... II>(std::index_sequence<II...>) {
>         ((PORTB = c[II]), ...);
>     }(std::make_index_sequence<std::size(c)>{});

Das ist ja nun auch nur die halbe Miete.
Ja, es rollt die Schleife aus, aber das Array wird dennoch im RAM 
angelegt.

Flash 326 Bytes
Ram 40 Bytes
1
// schnipp
2
        ((PORTB = c[II]), ...);
3
  b8:  8c e0         ldi  r24, 0x0C  ; 12
4
  ba:  85 b9         out  0x05, r24  ; 5
5
  bc:  8b 81         ldd  r24, Y+3  ; 0x03
6
  be:  85 b9         out  0x05, r24  ; 5
7
  c0:  8d 81         ldd  r24, Y+5  ; 0x05
8
  c2:  85 b9         out  0x05, r24  ; 5
9
  c4:  8f 81         ldd  r24, Y+7  ; 0x07
10
  c6:  85 b9         out  0x05, r24  ; 5
11
  c8:  89 85         ldd  r24, Y+9  ; 0x09
12
  ca:  85 b9         out  0x05, r24  ; 5
13
  cc:  8b 85         ldd  r24, Y+11  ; 0x0b
14
  ce:  85 b9         out  0x05, r24  ; 5
15
  d0:  8d 85         ldd  r24, Y+13  ; 0x0d
16
  d2:  85 b9         out  0x05, r24  ; 5
17
18
// schnapp

Beitrag #6436084 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> Das ist ja nun auch nur die halbe Miete.
> Ja, es rollt die Schleife aus, aber das Array wird dennoch im RAM
> angelegt.

Ja, klar.

Dann müssen wir uns etwas von diesem Arduino-Style wegbewegen:
1
using MeinArray = std::array<uint16_t, 20>;
2
class Setup {
3
    static inline constexpr auto a = []{
4
        MeinArray data;
5
        for(uint8_t v = 0; auto& d : data) {
6
            d = ++v;
7
        }
8
        return data;
9
    }();
10
    
11
    static inline constexpr auto b = []{
12
        MeinArray data;
13
        for(uint8_t v = 0; auto& d : data) {
14
            d = ++v + 10;
15
        }
16
        return data;
17
    }();
18
    
19
    using MeinContainer = MeinArray;
20
    
21
    static inline constexpr auto c = []{
22
        MeinContainer data;
23
        for(MeinArray::size_type i{0}; i < std::size(data); ++i) {
24
            data[i] = a[i] + b[i] + i;
25
        }
26
        return data;
27
    }();
28
public:
29
    static inline void init() {
30
        [&]<auto... II>(std::index_sequence<II...>) {
31
            ((PORTB = c[II]), ...);
32
        }(std::make_index_sequence<std::size(c)>{});
33
        
34
    }
35
};
36
37
int main() {
38
    Setup::init();
39
}

ergibt:
1
text    data     bss     dec     hex filename
2
324      80       0     404     194 bm09a.elf
3
218       0       0     220      dc bm09b.elf

Beitrag #6436123 wurde von einem Moderator gelöscht.
von Oliver S. (oliverso)


Lesenswert?

Eigentlich müsste jetzt mal neben dem obfuscates c Contest noch ein 
Wettbewerb kommen, für den längsten C++- Code, den der Compiler in 
maximal zwei Assembleranweisungen übersetzt.

Oliver

Beitrag #6436215 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Oliver S. schrieb:
> Eigentlich müsste jetzt mal neben dem obfuscates c Contest noch ein
> Wettbewerb kommen, für den längsten C++- Code, den der Compiler in
> maximal zwei Assembleranweisungen übersetzt.

In verschiedenen Programmiersprachen gibt es unterschiedliche Idiome, 
und in verschiedenen Programmierparadigmen gibt es unterschiedliche 
Muster (Pattern). Wer diese kennt, versteht den Code wesentlich 
schneller und sicherer.

Im Umkehrschluss gilt jedoch auch, dass manche Muster und Idiome durch 
ihre Universalität nicht immer trivial sind. Das bedeutet, dass es für 
die Unkundigen oft schwierig ist, die Bedeutung eines Musters zu 
verstehen.

Beitrag #6436320 wurde von einem Moderator gelöscht.
von Hans-Georg L. (h-g-l)


Lesenswert?

Wilhelm M. schrieb:
> In verschiedenen Programmiersprachen gibt es unterschiedliche Idiome,
> und in verschiedenen Programmierparadigmen gibt es unterschiedliche
> Muster (Pattern). Wer diese kennt, versteht den Code wesentlich
> schneller und sicherer.
>
> Im Umkehrschluss gilt jedoch auch, dass manche Muster und Idiome durch
> ihre Universalität nicht immer trivial sind. Das bedeutet, dass es für
> die Unkundigen oft schwierig ist, die Bedeutung eines Musters zu
> verstehen.

Du gehst davon aus, das immer nur Spezialisten deinen Code lesen.
Ich habe die letzten 20 Jahre meines Berufslebens im regulierten Umfeld 
verbracht und dabei unzählige Code-Reviews, interne und externe Audits 
mit gemacht. Das sitzen dann Physiker, Chemiker, Biologen usw. und alle 
wollen von dir den Nachweis haben das du Ihre Vorgaben vollständig und 
richtig umgesetzt hast. Die müssen dafür unterschreiben.
Da brauchst du verständlichen Code fürs Volk. Sonst hast du das gleiche 
Problem wie hier - ellenlange Diskussionen die nicht weiter führen.
Von daher finde ich den "Arduino Style" nicht mal so schlecht.

von void (Gast)


Lesenswert?

Wilhelm M. schrieb in 
Beitrag "Re: Buch: Realtime C++"
> (...) Wer diese kennt, versteht den Code wesentlich schneller und sicherer.
> (..) Das bedeutet, dass es für die Unkundigen oft schwierig ist, die Bedeutung
> eines Musters zu verstehen.

Hans-Georg L. schrie in 
Beitrag "Re: Buch: Realtime C++"
> Du gehst davon aus, das immer nur Spezialisten deinen Code lesen.
> Ich habe die letzten 20 Jahre meines Berufslebens im regulierten Umfeld
> verbracht und dabei unzählige Code-Reviews, interne und externe Audits
> mit gemacht. (...)
> Sonst hast du das gleiche Problem wie hier - ellenlange Diskussionen die nicht 
weiter führen.

Danke Wilhelm, Hans-Georg. Das sind genau die Erfahrungen die ich auch 
gemacht habe und eingangs schon beschrieb.
Zum einen sollte man die unterschiedlichen Paradigmen kennen, denn nur 
so kann man bewerten welche Programmiersprache für einen bestimmten 
Zweck gerade mehr oder weniger geeignet ist.
Zum andren sollte man ein Gefühl dafür haben in wie weit der Code für 
andere mit dir zusammen arbeitenden Personen verständlich 
nachvollziehbar ist.
Das ist was ein Fortgeschrittener Programmierer / "Highend-Entwickler" 
zu leisten hat und eben nicht was ein Anfänger schon kann. Der 
Unterschied zwischen Beiden sind übrigens gelesene Bücher und 
Programmieren.

Von daher mein Abschliessender Rat an den TO:
Lies ein Sachbuch und dann noch eins. Du musst nicht unbedingt mit 
"Realtime C++" anfangen. Und selber programmieren nicht vergessen...

Abschliessend zum Thema Programmiersprache:
Selbst eingesetzt habe ich meistens C, manchmal C++ und selten ASM auf 
Mikrocontrollern.

Beitrag #6436485 wurde von einem Moderator gelöscht.
Beitrag #6436497 wurde von einem Moderator gelöscht.
Beitrag #6436513 wurde von einem Moderator gelöscht.
Beitrag #6436578 wurde von einem Moderator gelöscht.
von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Auch für klein moby gilt: Ab zum Arzt!

Beitrag #6436591 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Hans-Georg L. schrieb:
> Da brauchst du verständlichen Code fürs Volk. Sonst hast du das gleiche
> Problem wie hier - ellenlange Diskussionen die nicht weiter führen.
> Von daher finde ich den "Arduino Style" nicht mal so schlecht.

Oh, der Kunde entwickelt mit - das ist bestimmt spannend ;-)

von Wilhelm M. (wimalopaan)


Lesenswert?

Zu dem Thema Idiome (in C++) gehört natürlich auch, dass man möglicht 
die Algorithmen (und Container) der Standard-Bibliothek verwenden 
sollte. Und wer die IIFE nicht mag, kann natürlich für diese "statische" 
Loop einen Algorithmus schreiben. Und ja: natürlich gehört dann 
'StaticFor' in eine eigene Header-Datei (Module) und zählt somit nicht 
zum Umfang des Beispiels. Und: natürlich ist der Maschinencode derselbe 
wie oben.
1
template<size_t N>
2
using Iterations = std::integral_constant<size_t, N>;
3
4
template<typename> struct StaticFor;
5
6
template<size_t N>
7
struct StaticFor<std::integral_constant<size_t, N>> {
8
    static inline constexpr void call(const auto f) {
9
        call_impl(std::make_index_sequence<N>{}, f);
10
    }
11
private:
12
    template<size_t... II>
13
    static inline constexpr void call_impl(std::index_sequence<II...>, const auto f) {
14
        (f(II), ...);
15
    }
16
};
17
18
template<size_t N = 20>
19
class Setup {
20
    using MeinArray = std::array<uint16_t, N>;
21
    using MeinContainer = MeinArray;
22
    static inline constexpr auto a = []{
23
        MeinArray data;
24
        std::iota(std::begin(data), std::end(data), 0, 1);
25
        return data;
26
    }();
27
    static inline constexpr auto b = []{
28
        MeinArray data;
29
        std::iota(std::begin(data), std::end(data), 0, 10);
30
        return data;
31
    }();
32
    static inline constexpr auto c = []{
33
        MeinContainer data;
34
        std::transform(std::begin(a), std::end(a), std::begin(b), std::begin(data), 
35
                       [](const auto ai, const auto bi){return ai + bi;});
36
        return data;
37
    }();
38
public:
39
    static inline void init() {
40
        StaticFor<Iterations<20>>::call([](const auto i){
41
            PORTB = c[i];
42
        });
43
//        [&]<auto... II>(std::index_sequence<II...>) {
44
//            ((PORTB = c[II]), ...);
45
//        }(std::make_index_sequence<std::size(c)>{});
46
    }
47
};
48
49
int main() {
50
    Setup<>::init();
51
}

von A. B. (Gast)


Angehängte Dateien:

Lesenswert?

Wilhelm M. schrieb:
> Zu dem Thema Idiome (in C++) gehört natürlich auch, dass man möglicht
> die Algorithmen (und Container) der Standard-Bibliothek verwenden
> sollte.

Unter welcher Umgebung compilierst du das?

Das Beispiel verwendet #include <avr/io.h> und PORTB und damit ist das 
Beispiel für die Allgemeinheit unter avr-gcc-9.3.0-mingw64 so nicht 
kompilierbar. Der oben zitierte Satz ist eine nicht erreichbare 
Wunschvorstllung.

Alexandra

von Hans-Georg L. (h-g-l)


Lesenswert?

Wilhelm M. schrieb:
> Hans-Georg L. schrieb:
>> Da brauchst du verständlichen Code fürs Volk. Sonst hast du das gleiche
>> Problem wie hier - ellenlange Diskussionen die nicht weiter führen.
>> Von daher finde ich den "Arduino Style" nicht mal so schlecht.
>
> Oh, der Kunde entwickelt mit - das ist bestimmt spannend ;-)

Nicht der Endkunde aber das Entwicklungsteam und der Gesetzgeber ...
Die Software ist nur ein Teil des Produktes.

Wenn du mal in der in der Notfallabteilung einer Klinik landest möchtest 
du bestimmt auch gerne haben, das die Laborwerte schnell und sicher sind 
die der Arzt als Grundlage für deine Behandlung nimmt.
Wenn dir aber wichtiger ist das die Software im Messgerät im schönen C++ 
geschrieben ist kannst die Behandlung ja verweigern;-).

: Bearbeitet durch User
Beitrag #6437398 wurde von einem Moderator gelöscht.
Beitrag #6437401 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Hans-Georg L. schrieb:
> Wenn du mal in der in der Notfallabteilung einer Klinik landest möchtest
> du bestimmt auch gerne haben, das die Laborwerte schnell und sicher sind
> die der Arzt als Grundlage für deine Behandlung nimmt.
> Wenn dir aber wichtiger ist das die Software im Messgerät im schönen C++
> geschrieben ist kannst die Behandlung ja verweigern;-).

Du meinst also, die Korrektheit eines Programms und "Schönheit" 
schließen sich aus? Was ist denn das für ein Quatsch?

von Hans-Georg L. (h-g-l)


Lesenswert?


Beitrag #6437437 wurde von einem Moderator gelöscht.
Beitrag #6437438 wurde von einem Moderator gelöscht.
von Walter T. (nicolas)


Lesenswert?

Hans-Georg L. schrieb:
> Zurück zum Thema und dem Buch.

Danke für den Beitrag.

Wie ich oben schon schrieb, ist es über Springerlink verfügbar und ich 
habe es angefangen und dann weggelegt. Zielgruppe scheint "Kenne C++, 
will Embedded" zu sein. Es ist meiner Meinung nach nicht geeignet für 
jemanden, der C auf Embedded Systemen kennt und in C++ einsteigen will.

: Bearbeitet durch User
von Hans-Georg L. (h-g-l)


Lesenswert?

Wilhelm M. schrieb:
> Hans-Georg L. schrieb:
>> Wenn du mal in der in der Notfallabteilung einer Klinik landest möchtest
>> du bestimmt auch gerne haben, das die Laborwerte schnell und sicher sind
>> die der Arzt als Grundlage für deine Behandlung nimmt.
>> Wenn dir aber wichtiger ist das die Software im Messgerät im schönen C++
>> geschrieben ist kannst die Behandlung ja verweigern;-).
>
> Du meinst also, die Korrektheit eines Programms und "Schönheit"
> schließen sich aus? Was ist denn das für ein Quatsch?

Wie kommst du darauf ? Natürlich nicht !

von Hans-Georg L. (h-g-l)


Lesenswert?

Walter T. schrieb:
> Hans-Georg L. schrieb:
>> Zurück zum Thema und dem Buch.
>
> Danke für den Beitrag.
>
> Wie ich oben schon schrieb, ist es über Springerlink verfügbar und ich
> habe es angefangen und dann weggelegt. Zielgruppe scheint "Kenne C++,
> will Embedded" zu sein. Es ist meiner Meinung nach nicht geeignet für
> jemanden, der C auf Embedded Systemen kennt und in C++ einsteigen will.

Da bin ich völlig deiner Meinung, das sind fast alle solche Bücher.
Wer wenig Ahnung von C++ hat und höchstens die klassische Vererbung 
kennt wird sich nach dem Durcharbeiten fragen. Alles schön und gut, die 
LED blinkt, aber wie setze ich es gewinnbringend in meiner täglichen 
Arbeit ein ?

Beitrag #6437505 wurde von einem Moderator gelöscht.
Beitrag #6437509 wurde von einem Moderator gelöscht.
Beitrag #6437515 wurde von einem Moderator gelöscht.
Beitrag #6437524 wurde von einem Moderator gelöscht.
Beitrag #6437542 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

Hans-Georg L. schrieb im Beitrag #6437524:
> Wenn du das Rad und für jeden Datentyp täglich neu erfinden willst magst
> du recht haben ;-)
Nööö.....
Mobby war damals schon von der C Datentyp Systematik überfordert.
Jetzt macht ihm nur noch ASM, ohne alle Datentypen.
Auch damit zusammenhängende Warnungen/Errors haben ihn fürchterlich 
genervt, werden darum als gängeln empfunden und somit als überflüssig 
deklariert.

Irgendwann hat er sich den Irrtum eingefangen, dass es an den Sprachen 
C und C++ liegt, und nicht an seiner überzogenen Erwartungshaltung, in 
seine begrenzten Kognitiven Fähigkeiten, dass er so unglücklich ist.

Jetzt endlich hat er/sie/es sein Glück in seiner kleinen AVR ASM Welt 
gefunden, und möchte auch dich damit überschütten.

Sei dankbar!

-----------

A. B. schrieb:
> Unter welcher Umgebung compilierst du das?
In dem Punkt ist Wilhelm steif.
Von seinem Elfenbeintürmchen aus, interessiert ihn das Fußvolk schlicht 
nicht.

Meine Einschätzung:
Nachfragen, wie deine, betonen die Distanz und damit auch seine 
Erhabenheit.

Aber, wie sagte schon Johann Heinrich Pestalozzi:
> Wohltätigkeit ist das Ersaufen des Rechts im Mistloch der Gnade

Somit ... alles im gesellschaftlich übliche Rahmen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Hans-Georg L. schrieb:
> Wilhelm M. schrieb:
>> Hans-Georg L. schrieb:
>>> Wenn du mal in der in der Notfallabteilung einer Klinik landest möchtest
>>> du bestimmt auch gerne haben, das die Laborwerte schnell und sicher sind
>>> die der Arzt als Grundlage für deine Behandlung nimmt.
>>> Wenn dir aber wichtiger ist das die Software im Messgerät im schönen C++
>>> geschrieben ist kannst die Behandlung ja verweigern;-).
v>>
>> Du meinst also, die Korrektheit eines Programms und "Schönheit"
>> schließen sich aus? Was ist denn das für ein Quatsch?
>
> Wie kommst du darauf ? Natürlich nicht !

Das beruhigt mich. Dann habe ich wohl

>>> Wenn dir aber wichtiger ist das die Software im Messgerät im schönen C++
>>> geschrieben ist kannst die Behandlung ja verweigern;-).

falsch verstanden.

Beitrag #6437609 wurde von einem Moderator gelöscht.
Beitrag #6437622 wurde von einem Moderator gelöscht.
Beitrag #6437624 wurde von einem Moderator gelöscht.
Beitrag #6437625 wurde von einem Moderator gelöscht.
Beitrag #6437626 wurde von einem Moderator gelöscht.
Beitrag #6437629 wurde von einem Moderator gelöscht.
Beitrag #6437630 wurde von einem Moderator gelöscht.
Beitrag #6437632 wurde von einem Moderator gelöscht.
Beitrag #6437633 wurde von einem Moderator gelöscht.
Beitrag #6437634 wurde von einem Moderator gelöscht.
Beitrag #6437635 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> A. B. schrieb:
>> Unter welcher Umgebung compilierst du das?
> In dem Punkt ist Wilhelm steif.
> Von seinem Elfenbeintürmchen aus, interessiert ihn das Fußvolk schlicht
> nicht.

Für etwa die AVRs mit:
1
avr-gcc (GCC) 11.0.0 20200818 (experimental)
2
Copyright (C) 2020 Free Software Foundation, Inc.
3
This is free software; see the source for copying conditions.  There is NO
4
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Allerdings gehört da natürlich eine libstdc++ dazu. Diese existiert 
nicht, und ich kann die Sourcen zu meiner Implementierung nicht 
öffentlich machen.

Soweit, so schlecht.
Doch, Leute, worum geht es hier? Erstmal um std::array<>. Dafür finden 
sich zahlreiche Implementierungen im Netz oder man schaut einfach in die 
libstdc++ des gcc.
Und so ist das mit den anderen Sachen auch. Da wäre meine 
Implementierung auch nicht mehr von Hilfe.

Allerdings lernt man doch generische Programmierung, Erstellen von 
templates und TMP nicht auf einem Arduino! Das macht man ganz normal auf 
dem PC.

Daher:
1
gcc (GCC) 11.0.0 20201009 (experimental)
2
Copyright (C) 2020 Free Software Foundation, Inc.
3
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
4
gibt KEINE Garantie; auch nicht für MARKTGÄNGIGKEIT oder FÜR SPEZIELLE ZWECKE.

Und mit etwas Kreativität kann man das obige Beispiel einfach auf dem PC 
oder im Godbolt-CE laufen lassen:
1
#include <cstdint>
2
#include <array>
3
#include <algorithm>
4
#include <numeric>
5
6
namespace UC {
7
    volatile uint8_t portb;
8
}
9
10
#define PORTB UC::portb
11
12
template<size_t N>
13
using Iterations = std::integral_constant<size_t, N>;
14
15
template<typename> struct StaticFor;
16
17
template<size_t N>
18
struct StaticFor<std::integral_constant<size_t, N>> {
19
    static inline constexpr void call(const auto f) {
20
        call_impl(std::make_index_sequence<N>{}, f);
21
    }
22
private:
23
    template<size_t... II>
24
    static inline constexpr void call_impl(std::index_sequence<II...>, const auto f) {
25
        (f(II), ...);
26
    }
27
};
28
29
template<size_t N = 20>
30
class Setup {
31
    using MeinArray = std::array<uint16_t, N>;
32
    using MeinContainer = MeinArray;
33
    static inline constexpr auto a = []{
34
        MeinArray data;
35
        std::iota(std::begin(data), std::end(data), 0);
36
        return data;
37
    }();
38
    static inline constexpr auto b = []{
39
        MeinArray data;
40
        std::iota(std::begin(data), std::end(data), 0);
41
        return data;
42
    }();
43
    static inline constexpr auto c = []{
44
        MeinContainer data;
45
        std::transform(std::begin(a), std::end(a), std::begin(b), std::begin(data), 
46
                       [](const auto ai, const auto bi){return ai + bi;});
47
        return data;
48
    }();
49
public:
50
    static inline void init() {
51
        StaticFor<Iterations<20>>::call([](const auto i){
52
            PORTB = c[i];
53
        });
54
//        [&]<auto... II>(std::index_sequence<II...>) {
55
//            ((PORTB = c[II]), ...);
56
//        }(std::make_index_sequence<std::size(c)>{});
57
    }
58
};
59
60
int main() {
61
    Setup<>::init();
62
}

Beitrag #6437641 wurde von einem Moderator gelöscht.
Beitrag #6437643 wurde von einem Moderator gelöscht.
Beitrag #6437644 wurde von einem Moderator gelöscht.
Beitrag #6437646 wurde von einem Moderator gelöscht.
Beitrag #6437666 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Allerdings lernt man doch generische Programmierung, Erstellen von
> templates und TMP nicht auf einem Arduino!

Ich danke Euch auch für diese Herabwürdigung.
Sowie auch für alle weiteren....
Möge sie der Stabilisierung, seiner Erhabenheit, dienlich sein.

von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ich danke Euch auch für diese Herabwürdigung.

Das ist doch keine Herabwürdigung von Dir. Es ist lediglich die Aussage, 
dass man das nicht auf einem Arduino richtig lernen kann. Abgesehen von 
der fehlenden libstdc++ ist es doch viel zu umständlich und völlig 
spaßbefreit.

von Hans-Georg L. (h-g-l)


Lesenswert?

Wilhelm M. schrieb:
....
> Das beruhigt mich. Dann habe ich wohl
> falsch verstanden.

Du musst nur das ganze lesen...

: Bearbeitet durch User
von Hans-Georg L. (h-g-l)


Lesenswert?

Wilhelm M. schrieb:
...
> Für etwa die AVRs mit:
> avr-gcc (GCC) 11.0.0 20200818 (experimental)
...
> Allerdings gehört da natürlich eine libstdc++ dazu.

Es macht nicht viel Sinn einen Compiler Version zu verwenden die 
"realer" kein AVR Entwickler benutzt.
...

> Allerdings lernt man doch generische Programmierung, Erstellen von
> templates und TMP nicht auf einem Arduino! Das macht man ganz normal auf
> dem PC.

Aber nicht den "embedded" Teil und auch nicht was du auf einem 
"schwachbrüstigen" MC gefälligst unterlassen solltest

...
> namespace UC {
>     volatile uint8_t portb;
> }
>
> #define PORTB UC::portb
...
>//            ((PORTB = c[II]), ...);

Das ist "embedded" an dem ganzen ...
Der Rest ist doch nur Verwirrspiel und du überzeugst keinen damit ;-)

Beitrag #6437795 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Das ist doch keine Herabwürdigung von Dir. Es ist lediglich die Aussage,
> dass man das nicht auf einem Arduino richtig lernen kann. Abgesehen von
> der fehlenden libstdc++ ist es doch viel zu umständlich und völlig
> spaßbefreit.

Ohne diese Ansage wüsste ich nicht, wann, wo und wie ich Spass haben 
kann.
Auch dafür danke ich Euch, wie für jeden anderen Krumen, welcher von 
eurem hochgelobten Tische herab fällt.

Im Ernst:
Einen AVR-GCC 10.1 baue ich mir ja noch und integriere diesen in die 
Arduino IDE,  um deiner Brotkrumenspur zu folgen...
Aber "experimental"?
Das hat dann keine Praxisrelevanz mehr.
Hier endet es!

Wilhelm M. schrieb:
> Allerdings gehört da natürlich eine libstdc++ dazu. Diese existiert
> nicht, und ich kann die Sourcen zu meiner Implementierung nicht
> öffentlich machen.
Was ich davon halte, .... das sage ich lieber nicht.

von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> Einen AVR-GCC 10.1 baue ich mir ja noch und integriere diesen in die
> Arduino IDE,  um deiner Brotkrumenspur zu folgen...
> Aber "experimental"?
> Das hat dann keine Praxisrelevanz mehr.
> Hier endet es!

Du kannst dafür genauso gut einen 10.1 nehmen. Es war die Frage, was ich 
verwende, und nicht, was man mindestens nehmen muss. Ein Blick in die 
Feature-List von cppreference lohnt sich.

von Einer K. (Gast)


Lesenswert?

Auf die Gefahr hin, mich endlos wiederholen zu müssen, auch für diese 
weitere Demütigung:
Meinen Dank!

Beitrag #6437972 wurde von einem Moderator gelöscht.
Beitrag #6437983 wurde von einem Moderator gelöscht.
Beitrag #6438238 wurde von einem Moderator gelöscht.
Beitrag #6438432 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

Hans-Georg L. schrieb:
> Es macht nicht viel Sinn einen Compiler Version zu verwenden die
> "realer" kein AVR Entwickler benutzt.

Das ist ein Scheinargument, denn es geht ja auch mit älteren Versionen 
vom g++.

Hans-Georg L. schrieb:
> Aber nicht den "embedded" Teil und auch nicht was du auf einem
> "schwachbrüstigen" MC gefälligst unterlassen solltest

Auch das ist hier kein Argument, denn es geht um ein konkretes Beispiel. 
Und all das kann man am PC oder im GB-CE sehr schön nachvollziehen. 
Warum sollte das nur für einen AVR möglich sein?

von Wilhelm M. (wimalopaan)


Lesenswert?

Das Buch ist m.E. gar nicht schlecht, weist es doch in die richtige 
Richtung: compile-computation, type-reflection, meta-functions, ...

Der Nachteil des Buches liegt m.E. darin, das es zu früh erschienen ist. 
Denn ein ganz wichtiger Baustein darin fehlt, und dass sind "concepts". 
Die sind als "concepts-ts" zwar schon eine ganze Weile im g++ enthalten, 
jedoch in einer Form, die vor der Einbringung in C++20 nochmal verändert 
wurde (keine function-style concepts mehr, einige Erweiterungen). Dies 
ist zwar nicht besonders kritisch, weil es zwar die Syntax und wenige 
features betrifft, aber nicht das Grundkonzept fallen lässt. Und 
concepts sind ein wesentlicher Bestandteil der statischen Polymorphie. 
M.E. hätte der Autor darauf hinweisen müssen, denn bekannt und verfügbar 
waren concepts schon lange vor Erscheinen des Buches. Vielleicht kommt 
ja eine neue Auflage ;-)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wilhelm M. schrieb:
> Der Nachteil des Buches liegt m.E. darin, das es zu früh erschienen ist.

Das haben Bücher auch dem Computerbereich und anderen ständig
voranschreitenden Wissensgebieten so an sich. Wenn der Autor mit der
Veröffentlichung des Buchs auf den absolut finalen C++-Standard warten
würde, könnte er davon nur wenige Exemplare verkaufen, da zu diesem
Zeitpunkt kaum noch jemand C++ nutzen wird.

Wilhelm M. schrieb:
> M.E. hätte der Autor darauf hinweisen müssen, denn bekannt und verfügbar
> waren concepts schon lange vor Erscheinen des Buches.

Warum sollte der Autor seine Leser mit neuen Features belästigen, die
noch weit von der Verabschiedung durch das Normungsgremium entfernt sind
und damit noch auf recht wackeligen Beinen stehen? Die Concepts wurden
erstmalig im Juli 2017 in den C++20-Draft aufgenommen, da hat Kormanyos
sein Buch, das im Mai 2018 veröffentlicht wurde, vermutlich schon zu 98%
fertiggestellt. Technisch finalisiert wurde der C++20-Standard Anfang
dieses Jahres (das wäre IMHO der früheste Zeitpunkt gewesen, seine
Inhalte in Lehrbücher aufzunehmen). Offiziell veröffentlicht wird er
voraussichtlich erst Ende dieses Jahres.

Natürlich gibt es immer Leute (wie bspw. du), denen das alles nicht
schnell genug geht. Diese kaufen aber keine solchen Bücher, sondern
informieren sich in den Vorabveröffentlichungen des ISO-Gremiums.
Kormanyos wäre somit ziemlich dumm, wenn er sein Buch auf diese Leute
zuschneiden würde.

> Vielleicht kommt ja eine neue Auflage ;-)

Vielleicht. Aber auch diese wird für dich viel zu spät erscheinen, da
das ISO-Gremium schon längst an an C++23 arbeitet ;-)

Beitrag #6439072 wurde von einem Moderator gelöscht.
Beitrag #6439118 wurde von einem Moderator gelöscht.
Beitrag #6439119 wurde von einem Moderator gelöscht.
Beitrag #6439120 wurde von einem Moderator gelöscht.
Beitrag #6439122 wurde von einem Moderator gelöscht.
Beitrag #6439123 wurde von einem Moderator gelöscht.
Beitrag #6439124 wurde von einem Moderator gelöscht.
Beitrag #6439125 wurde von einem Moderator gelöscht.
Beitrag #6439126 wurde von einem Moderator gelöscht.
Beitrag #6439127 wurde von einem Moderator gelöscht.
Beitrag #6439128 wurde von einem Moderator gelöscht.
Beitrag #6439129 wurde von einem Moderator gelöscht.
Beitrag #6439130 wurde von einem Moderator gelöscht.
Beitrag #6439198 wurde von einem Moderator gelöscht.
Beitrag #6439199 wurde von einem Moderator gelöscht.
Beitrag #6439200 wurde von einem Moderator gelöscht.
Beitrag #6439429 wurde von einem Moderator gelöscht.
Beitrag #6439717 wurde von einem Moderator gelöscht.
Beitrag #6439718 wurde von einem Moderator gelöscht.
Beitrag #6439719 wurde von einem Moderator gelöscht.
Beitrag #6439720 wurde von einem Moderator gelöscht.
Beitrag #6439722 wurde von einem Moderator gelöscht.
Beitrag #6439723 wurde von einem Moderator gelöscht.
Beitrag #6439724 wurde von einem Moderator gelöscht.
Beitrag #6439725 wurde von einem Moderator gelöscht.
Beitrag #6439726 wurde von einem Moderator gelöscht.
Beitrag #6439727 wurde von einem Moderator gelöscht.
Beitrag #6439728 wurde von einem Moderator gelöscht.
Beitrag #6439729 wurde von einem Moderator gelöscht.
Beitrag #6440962 wurde von einem Moderator gelöscht.
Beitrag #6440963 wurde von einem Moderator gelöscht.
Beitrag #6440964 wurde von einem Moderator gelöscht.
Beitrag #6440965 wurde von einem Moderator gelöscht.
Beitrag #6440967 wurde von einem Moderator gelöscht.
Beitrag #6440969 wurde von einem Moderator gelöscht.
Beitrag #6440971 wurde von einem Moderator gelöscht.
Beitrag #6440972 wurde von einem Moderator gelöscht.
Beitrag #6440974 wurde von einem Moderator gelöscht.
Beitrag #6440976 wurde von einem Moderator gelöscht.
Beitrag #6440977 wurde von einem Moderator gelöscht.
Beitrag #6440978 wurde von einem Moderator gelöscht.
Beitrag #6440981 wurde von einem Moderator gelöscht.
Beitrag #6440983 wurde von einem Moderator gelöscht.
Beitrag #6440985 wurde von einem Moderator gelöscht.
Beitrag #6440986 wurde von einem Moderator gelöscht.
Beitrag #6441041 wurde von einem Moderator gelöscht.
Beitrag #6441042 wurde von einem Moderator gelöscht.
Beitrag #6441087 wurde von einem Moderator gelöscht.
Beitrag #6441117 wurde von einem Moderator gelöscht.
Beitrag #6441118 wurde von einem Moderator gelöscht.
Beitrag #6441119 wurde von einem Moderator gelöscht.
Beitrag #6441120 wurde von einem Moderator gelöscht.
Beitrag #6441121 wurde von einem Moderator gelöscht.
Beitrag #6441122 wurde von einem Moderator gelöscht.
Beitrag #6441124 wurde von einem Moderator gelöscht.
Beitrag #6441125 wurde von einem Moderator gelöscht.
Beitrag #6441126 wurde von einem Moderator gelöscht.
Beitrag #6441128 wurde von einem Moderator gelöscht.
Beitrag #6441129 wurde von einem Moderator gelöscht.
Beitrag #6441130 wurde von einem Moderator gelöscht.
Beitrag #6441133 wurde von einem Moderator gelöscht.
Beitrag #6441134 wurde von einem Moderator gelöscht.
Beitrag #6441135 wurde von einem Moderator gelöscht.
Beitrag #6441137 wurde von einem Moderator gelöscht.
Beitrag #6441139 wurde von einem Moderator gelöscht.
Beitrag #6441140 wurde von einem Moderator gelöscht.
Beitrag #6441141 wurde von einem Moderator gelöscht.
Beitrag #6441142 wurde von einem Moderator gelöscht.
Beitrag #6441144 wurde von einem Moderator gelöscht.
Beitrag #6441145 wurde von einem Moderator gelöscht.
Beitrag #6441146 wurde von einem Moderator gelöscht.
Beitrag #6441147 wurde von einem Moderator gelöscht.
Beitrag #6441148 wurde von einem Moderator gelöscht.
Beitrag #6441149 wurde von einem Moderator gelöscht.
Beitrag #6441150 wurde von einem Moderator gelöscht.
Beitrag #6441151 wurde von einem Moderator gelöscht.
Beitrag #6441152 wurde von einem Moderator gelöscht.
Beitrag #6441153 wurde von einem Moderator gelöscht.
Beitrag #6441155 wurde von einem Moderator gelöscht.
Beitrag #6441156 wurde von einem Moderator gelöscht.
Beitrag #6441157 wurde von einem Moderator gelöscht.
Beitrag #6441158 wurde von einem Moderator gelöscht.
Beitrag #6441160 wurde von einem Moderator gelöscht.
Beitrag #6441163 wurde von einem Moderator gelöscht.
Beitrag #6441453 wurde von einem Moderator gelöscht.
Beitrag #6441455 wurde von einem Moderator gelöscht.
Beitrag #6441457 wurde von einem Moderator gelöscht.
Beitrag #6441933 wurde von einem Moderator gelöscht.
Beitrag #6441934 wurde von einem Moderator gelöscht.
Beitrag #6441937 wurde von einem Moderator gelöscht.
Beitrag #6441939 wurde von einem Moderator gelöscht.
Beitrag #6442446 wurde von einem Moderator gelöscht.
Beitrag #6442489 wurde von einem Moderator gelöscht.
von Einer K. (Gast)


Lesenswert?

> Das größte Problem im Leben eines Menschen,
> ist die Wahl der richtigen Gedanken
Quelle: ?

Beitrag #6444267 wurde von einem Moderator gelöscht.
von Joachim B. (jar)


Lesenswert?

IJustWannaKnow schrieb:
> ne ernsthaft. meine Erfahrung in dem Gebiet reicht nicht aus um zu
> beurteilen ob das Buch gut ist.

wenn du es durch hast und keine Fragen offen sind war es gut, bis jetzt 
wurde ich aber oft enttäuscht hatte viel Geld versenkt in schlechte 
Bücher.
Das letzte C++ Buch noch nicht durchgearbeitet, ja in dem Wort steckt 
Arbeit!

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.