Suche Bücher für Programmierung C/C++ (incl. GUI) für Raspberry Pi 3

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich bin ein absoluter Neuling was Raspberry Pi und Linux betrifft.
    Kenne mich aber aus mit Microcontrollern, Assembler, C, C++, C#, Visual Studio und .NET.

    Könnt ihr mir bitte zwei oder drei gute Bücher empfehlen die folgende Themen abhandeln (gewiss, man kann sich die Infos auch im Internet zusammensuchen, aber meiner Meinung nach sind gute Bücher effektiver):
    -- Eine Übersicht über wichtige Linux Konsolen-Befehle, zum nachschlagen
    -- Beispielprogramme für Raspberry Pi 3 in C oder C++, insbesondere was die Schnittstellen betrifft (GPIO, RS232, I2C, hardware-nahe Programmierung)
    -- Wie erzeugt man z.B. alle 1ms einen Timer Interrupt?
    -- Wie kann man Interrupts sperren und für wie lange?
    -- Schnelle Grafik-Programmierung, kann man direkt auf den Bildschirm-Speicher zugreifen?
    -- Wie kann man kurze zeitkritische Programmteile in Assembler realisieren und in das C Programm einbinden? Ein kurzes Beispiel wäre sehr hilfreich.
    -- Welches GUI ist empfehlenswert? CodeBlocks? Wie gesagt, ich kenne Visual Studio
    -- Einfache Beispiele für GUI Programmierung, ebenfalls in C oder C++
    -- Wo kriege ich die GUI Programmierumgebung her und wie installiere ich sie auf den Raspberry?
    -- Wie installiere ich Programme, wenn der Raspberry keine Verbindung zum Internet hat (und auch keine haben soll)? Nach dem was ich bisher gelesen habe, scheint das ja ein großes Problem zu sein.
    -- Sind die Unterschiede zwischen Raspberry Pi 2 und 3 groß? Muss ich bei der Auswahl der Bücher darauf achten, dass sie für Typ 3 sind? Für Typ 2 gibt es mehr Auswahl.

  • Suche Bücher für Programmierung C/C++ (incl. GUI) für Raspberry Pi 3? Schau mal ob du hier fündig wirst!

  • Hallo Maus,

    herzlich Willkommen in unserem Forum!


    Könnt ihr mir bitte zwei oder drei gute Bücher empfehlen die folgende Themen abhandeln (gewiss, man kann sich die Infos auch im Internet zusammensuchen, aber meiner Meinung nach sind gute Bücher effektiver):
    -- Eine Übersicht über wichtige Linux Konsolen-Befehle, zum nachschlagen


    Klaus Utech: Linux Befehlsreferenz kompakt
    Michael Kofler: Linux Kommandoreferenz
    TheMagPi: Conquer the Command Line

    oder einfach

    Code
    xman


    in der Kommandozeile eingeben (falls es installiert ist).

    Fortsetzung folgt...


    -- Beispielprogramme für Raspberry Pi 3 in C oder C++, insbesondere was die Schnittstellen betrifft (GPIO, RS232, I2C, hardware-nahe Programmierung)


    Die findest Du zuhauf, wenn Du gezielt danach suchst. Die Programme für alle anderen Raspberry Pi-Modelle laufen auch auf dem RPi 3 - deswegen macht es keinen Sinn, speziell etwas für RPi 3B haben zu wollen.


    -- Wie erzeugt man z.B. alle 1ms einen Timer Interrupt?


    Stichwort: IdleTimer?
    Ein Timer-Interrupt von 1 ms macht auf dem Raspberry Pi meines Erachtens wenig bis gar keinen Sinn. Denn angenommen, Dein Code würde 500 µs dauern (was beim RPi 3B nicht wirklich viel Code ausmacht), dann würde dies zu einer rund 50% CPU-Auslastung führen.

    Für die anderen Fragen solltest Du Dich erst einmal mit dem Raspberry Pi beschäftigt haben.

    Allgemein kann man sagen, dass die Programmiersprachen auf dem Raspberry Pi genaus so funktionieren wie auf anderen Systemen auch - nur ein wenig langsamer. Und dass Du mit Programmier-Software besser zurecht kommen wirst, die von Natur aus mit wenig Ressourcen zurecht kommen.

    Somit sind die Antworten auf die meisten Deiner anderen Fragen identisch mit Antworten für jedes andere System auch.


    -- Welches GUI ist empfehlenswert? CodeBlocks? Wie gesagt, ich kenne Visual Studio


    Meinst Du eine IDE (= Integrierte Entwicklungsumgebung)


    -- Einfache Beispiele für GUI Programmierung, ebenfalls in C oder C++


    ... Suchmaschine ...


    -- Wo kriege ich die GUI Programmierumgebung her und wie installiere ich sie auf den Raspberry?
    -- Wie installiere ich Programme, wenn der Raspberry keine Verbindung zum Internet hat (und auch keine haben soll)? Nach dem was ich bisher gelesen habe, scheint das ja ein großes Problem zu sein.


    Du kannst die Pakete auf einem anderen System herunterladen, auf den RPi kopieren und dann dort installieren - ist aber umständlich.


    -- Sind die Unterschiede zwischen Raspberry Pi 2 und 3 groß? Muss ich bei der Auswahl der Bücher darauf achten, dass sie für Typ 3 sind? Für Typ 2 gibt es mehr Auswahl.


    Die Unterschiede sind gering. Es gibt einige wenige Unterschiee, die mit der unterschiedlichen Hardware (Bluetooth etc.) zusammenhängen. Der Rest ist aber nahezu identisch. Daher wirst Du auf dem RPi 3B keinen Schiffbruch erleiden, wenn Du ein gutes Buch zum RPi 2B verwendest.

    Meine Tutorials, die ich für RPi B 2013/2014 geschrieben habe, funktionieren auf allen späteren RPi-Modellen ohne jegliche Änderung.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. Juni 2016 um 19:54)

  • Konkrete Buecher habe ich nicht - weil ich sie selbst nicht nutze. Ein paar Tipps, insbesondere weil du einiges an Missverstaendnissen zu haben scheinst, aber schon:

    Der PI laeuft (ausser man geht "bare metal") unter Linux. Das bedeutet so etwas wie interrupts und deren ein/ausschalten gibt es nicht, auch keine Timerinterrupts. Selbst als root hast du da nicht die Rechte zu. Die Themen, die du suchst sind also eher Linux Systemprogrammierung, Echtzeitkernel fuer verlaessliche, regelmaessige Code-Ausfuehrung.

    Eine Besonderheit des PI ist seine GPU, welche die Grafikausgabe von zB OpenGL oder das dekodieren und Darstellen von Videos uebernimmt. Direkt auf den Bildschirmspeicher zuzugreifen ist also weder moeglich, noch sinnvoll, weil sogar langsamer im Ergebnis. Es gibt diverse Libraries, die den Zugriff auf die beschleunigte Grafik erlaubt, sind zB Urho3D, Qt5 mit QML, OpenVG, OpenGL. Dafuer gibt es auch ausreichend Beispielcode da draussen.

    Den PI nicht an's Netz zu haengen zur Paketinstallation halte ich fuer einen Fehler. Kannst du machen, zerschiesst dir schnell das System bzw. wird hochgradig nervig. Solange du dazu also keinen guten Grund hast, wuerde ich das nicht so machen.

    Alternativ kann man zB mit buildroot mit einem grossen Rechner eine SD-Karte erzeugen, mit viel Software und rasend schnellen Boot-Zeiten. Ich spiele damit gerade rum - von 0 auf Login in < 3 Sekunden. Die laengste Zeit braucht das DHCP.

    Last but not least: AFAIK sind die Unterschiede zwischen PI2 & 3 gering genug. Da brauchst du mE keine Sorge haben, dass Wissen nicht anwendbar ist. Groessere Probleme bereitet eher die sich stetig entwickelnden OSse. Was unter dem einen zur Drucklegung noch ging, geht auf dem anderen nicht mehr, zumindest nicht buchstabengetreu.

  • Hallo Andreas,


    vielen Dank für deine ausführliche Antwort.


    >Stichwort: IdleTimer?

    Was ist das? Eine Google Suche nach "Raspberry IdleTimer" findet nichts brauchbares.


    >Ein Timer-Interrupt von 1 ms macht auf dem Raspberry Pi meines Erachtens wenig bis gar keinen Sinn. Denn angenommen, Dein Code würde 500 µs dauern (was beim RPi 3B nicht wirklich viel Code ausmacht), dann würde dies zu einer rund 50% CPU-Auslastung führen.

    Das ist logisch, bei 1kHz Wiederholrate sollte der Code natürlich kürzer als 500µs sein. Aber bei 800MHz CPU Takt sollte sich doch auch in 10µs schon einiges erledigen lassen. In dem Zusammenhang ist auch die Frage nach der Sperrung von Interrupts wichtig. Während der 10µs wäre es natürlich sinnvoll, dass das Betriebssystem keinen anderen Task dazwischenschieben kann.
    Gibt es ein Buch über C/C++ Programmierung für Raspberry, wo solche Fragen der hardware-nahen Programmierung behandelt werden?


    >Meinst Du eine IDE (= Integrierte Entwicklungsumgebung)

    Ich meine eine Umgebung mit der ich die grafische Benutzeroberfläche designen kann, womit ich also Buttons, PictureBox, TextBox usw an die richtigen Stellen schieben kann und dann die entsprechenden Ereignisse hinzuprogrammieren kann.


    > ... Suchmaschine ...

    Ein Buch wär mir für den Anfang lieber... die Suchmaschine kann man dann immer noch verwenden wenn man dann im Detail nicht weiterkommt.


    >Du kannst die Pakete auf einem anderen System herunterladen, auf den RPi kopieren und dann dort installieren - ist aber umständlich.

    Eben weil es umständlich ist, wäre eine detailliertere Beschreibung der Vorgehensweise sehr hilfreich.

    >Die Unterschiede sind gering.

    Das ist gut zu wissen.

    Gruß
    Michael
    Automatisch zusammengefügt:
    >Der PI laeuft (ausser man geht "bare metal") unter Linux. Das bedeutet so etwas wie interrupts und deren ein/ausschalten gibt es nicht, auch keine Timerinterrupts. Selbst als root hast du da nicht die Rechte zu.

    Das ist aber blöd. Ich darf die Interrupts nicht sperren, auch nicht kurzzeitig? Das Betriebssysten kann mein Programm zu jedem Zeitpunkt unterbrechen? Das schränkt die Möglichkeiten aber gewaltig ein.

    Gruß
    Michael

    Einmal editiert, zuletzt von maus3333 (11. Juni 2016 um 20:55)

  • Hallo Michael,


    ... Das Betriebssysten kann mein Programm zu jedem Zeitpunkt unterbrechen? ...


    der RPi ist kein µController und das ist Sinn und Zweck eines Multi-User/Multi-Tasking Betriebssystems.
    Eine kontrollbierbare Granularität von 10 µs halte ich, selbst mit einem RTOS, auf dem RPi für unmöglich.

    Vielleicht solltest Du Dich erst mal mit dem Grundkonzept und dem Aufbau des RPi auseinandersetzen, bevor Du weiterhin mit falschen Erwartungen an die Sache rangehst ...

    cu,
    -ds-

  • Es ist die Aufgabe des Kernels, solche Dinge zu tun. Den PI zu programmieren ist halt nicht uC-Programmierung. Wenn du das tun willst, bleib bei ATMEL & Co.

    Und ob das wirklich ein Problem darstellt, haengt von deinen Aufgaben ab. Was willst du ueberhaupt tun?
    Automatisch zusammengefügt:
    Zum Thema GUI-Erstellung: dort gibt es zwei grosse Systeme, einmal GTK, welches C ist, und den GUI-Editor GLADE kennt, und das C++-basierende Qt, und sein Qt-Designer. Ich nutze letzteres und bin da sehr zufrieden. Es funktioniert allerdings nicht genau so wie du das gewoehnt bist bzw. beschreibst. Man kann nicht auf Doppelklick Eventcode schreiben. Was ich auch gut finde, es heisst programmieren, nicht Code-mit-GUI-verruehren.

    Stattdessen greifst du dir die Widgets & verbindest dich mit ihren Ereignissen bzw. setzt ihre Datenmodelle. Hier ein Codeschnipsel von mir:

  • Hallo.
    ...mal mein kurzer Senf dazu.

    Ich bin in meinem ganzen Leben immer so verfahren... Interesse da ? Neugierde da ? Rpi und Zeit da ? ...loslegen.
    Grundvorraussetzungen sind natürlich Grundlagenkentnisse... besser kann's nicht funktionieren.
    Natürlich tauchen Fragen auf, die mir auch in diesem Forum beantwortet wurden.
    Aber ehrlich gesagt... ein Buch darüber hab ich so gut wie nie in die Hand genommen.

    Ich lese gerne und viel.. aber was anderes, ist genau das Gegenteil von dieser Sparte.

    gruß root

  • Ich kann's immer noch nicht so ganz glauben dass es unmöglich sein soll die Interrupts kurzzeitig zu sperren. Mal angenommen, man hat an den GPIO Pins einen DA-Umsetzer angeschlossen, der mehrere Kanäle hat die quasi gleichzeitig beschrieben werden müssen. Nacheinander reinschreiben mit 100ns Abstand ist ok, aber wenn das Betriebssysten mittendrin meint einen Taskwechsel machen zu müssen, dann ist das eben nicht ok. Wie soll man das lösen ohne die Interrupts zu sperren? Das Betriebssystem wird keinen Schaden erleiden wenn der Taskwechsel eine Mikrosekunde später erfolgt.

    Gruß
    Michael


  • Ich kann's immer noch nicht so ganz glauben dass es unmöglich sein soll die Interrupts kurzzeitig zu sperren.


    ...natürlich kann man.

    Einfaches Beispiel in Python... "Bouncetime" , um Taster zu entprellen.
    Die erste Flanke löst aus, alle folgenden werden für die Bouncetime an diesem Kanal ignoriert...

    Einmal editiert, zuletzt von root (11. Juni 2016 um 22:59)

  • Das hat mit Glauben nix zu tun - ist halt die Realitaet. Ein OS wie Linux oder Windows erlaubt's dir halt nicht. Wenn du so etwas machen willst, musst du wahlweise einen Kernel-Treiber schreiben (da geht natuerlich alles), oder zB einen DMA-Kanal oder einen Buffer nutzen.
    Automatisch zusammengefügt:
    Hier noch ein bisschen Lesestoff: http://letsmakerobots.com/node/32347.
    Automatisch zusammengefügt:
    @root Das was du da sagst stimmt nicht. Die "Interrupts" sind keine, wie schon oft genug dargelegt. Sondern einfach ein ganz normaler blockierender OS-Aufruf in einem Hintegrundthread. Alles was der macht ist dann sich zu merken, wann er das letzte mal aufgerufen wurde - und dann alles innerhalb der bouncetime zu ignorieren.

    Aber da werden weder interrupts disabled, noch sind damit hohe Taktraten und geringer Jitter zu erreichen. Zwischen dem elektrischen Signal & dem user-space code der ausgefuehrt wird kann *beliebig* viel Zeit vergehen, typischerweise natuerlich ein paar uS.

    PIGPIO macht es etwas besser, weil die einfach mit DMA sampeln, und dann spaeter wieder draufgucken, was so passiert ist im DMA-Buffer. Das verringert nicht den Jitter, aber wenn man einfach nur wissen muss *ob* und *wann* etwas passiert ist, statt darauf unmittelbar zu reagieren, ist das ausreichend.


  • PIGPIO macht es etwas besser, weil die einfach mit DMA sampeln, und dann spaeter wieder draufgucken, was so passiert ist im DMA-Buffer. Das verringert nicht den Jitter, aber wenn man einfach nur wissen muss *ob* und *wann* etwas passiert ist, statt darauf unmittelbar zu reagieren, ist das ausreichen.


    ...du redest mir von der Seele... :thumbs1:
    ...nur nen Minidenkfehler machst. Der guckt nicht in den DMA. DMA ist (D)irect(M)emory(A)cess, hat nichts mit Interrupt zu tun.
    Die Interruptfrequenz hängt sich lediglich an die DMA Frequenz.

    ... >pigpio< hatte ich vergessen zu erwähnen. :thumbs1:

    Einmal editiert, zuletzt von root (11. Juni 2016 um 23:16)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!