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


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.