Anfrage Programmierung Raspberry Pi

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Anfrage Programmierung Raspberry Pi

Beitrag von PascalDragon »

theo hat geschrieben:
Fr 28. Aug 2020, 17:19
Mathias hat geschrieben:
Fr 28. Aug 2020, 16:04
Hatte ich auch kurz angeschaut, aber asm brauche ich im Moment nicht auch noch, obwohl es vielleicht ganz erhellend wäre.
Wieso asm ?
Es ist Pascal-Code.
Ich habe nur kurz reingeschaut https://wiki.freepascal.org/AVR_Program ... _assembler
und auch der Rest der Seite sieht nicht "gesund" aus. :mrgreen:
Inline Assembler ist dann nötig, wenn es auf die Performance ankommt und der Compiler (egal ob FPC oder GCC) das nicht optimiert genug bekommt. In den meisten Fällen ist es allerdings nicht nötig. Sogar die CLI und SEI Sachen weiter oben können durch Intrinsics ersetzt werden.

Und die Bitspielereien mit Variablen hast du auch in C.

Da FPC mittlerweile auch ESP32/ESP8622 unterstützt sehe ich für mich keinen großartigen Grund mehr C für sowas zu verwenden. :D
FPC Compiler Entwickler

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Anfrage Programmierung Raspberry Pi

Beitrag von Socke »

PascalDragon hat geschrieben:
Sa 29. Aug 2020, 11:22
Da FPC mittlerweile auch ESP32/ESP8622 unterstützt sehe ich für mich keinen großartigen Grund mehr C für sowas zu verwenden. :D
In C bekommst du aber deutlich mehr fertige Bibliotheken um externe Komponenten (Displays etc.) anzusteuern. Klar kannst du die auch in Pascal hineinlinken, aber willst du das wirklich?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Anfrage Programmierung Raspberry Pi

Beitrag von pluto »

Socke hat geschrieben:In C bekommst du aber deutlich mehr fertige Bibliotheken um externe Komponenten (Displays etc.) anzusteuern.
Nicht alle brauchen, diese Bibliotheken... ich selbst bevorzuge sie zwar auch.... aber ich würde gerne ohne sie auskommen, weil dann sind die Programme nehme ich an, deutlich kleiner und an meine Anforderungen besser angepasst.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfrage Programmierung Raspberry Pi

Beitrag von theo »

PascalDragon hat geschrieben:
Sa 29. Aug 2020, 11:22
Da FPC mittlerweile auch ESP32/ESP8622 unterstützt sehe ich für mich keinen großartigen Grund mehr C für sowas zu verwenden. :D
Tja, vielleicht liegt es auch an der Doku.
Die Beispiele in der Arduino IDE sind für mich (Anfänger) sehr einfach zu verstehen und machen Spaß. Die C Syntax bemerke ich nicht mal. (Mache sowieso Javascript, PHP, C).
Die Links zu dem Thema für Lazarus sind für mich abschreckend. Es wird nur geshiftet und geasmt und ich habe überhaupt keinen Plan, worum es geht.
Definitiv nicht für Einsteiger gedacht. Lieber C als chinesisch. :wink:

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anfrage Programmierung Raspberry Pi

Beitrag von Mathias »

Nehmen wir mal an, du baust ein 8x8x8 Led-Cube mit Multiplex und Schieberegistern.
Mit shiftOut von Arduino hast du ein geflimmer
Wen du die durch manuelle Portansteuerung mit Bitshiften ersetzt, hast du schon eine über 10x Steigerung.
Und wen du noch direkt den spi Port nimmst hast nochmal 10x Steigerung,
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfrage Programmierung Raspberry Pi

Beitrag von theo »

@Mathias: Sprichst du mit mir?
Ich bezweifle das nicht, ich habe bloss etwas ganz anderes gemeint, nämlich, dass es keine Beispiele für Einsteiger gibt, welche Appetit machen, das Ding mit Lazarus zu programmieren.
Mach doch bitte mal EIN einfaches Beispiel.
Wie würde z.B. so etwas mit Lazarus aussehen?

Code: Alles auswählen

unsigned long previousMillis = 0; // speichert den Zeitpunkt an dem zuletzt geschalten wurde
const long interval = 1000; // Länge der Pause in ms

void setup() {
  pinMode(3, OUTPUT); // LED 1
  pinMode(4, OUTPUT); // LED 2
  pinMode(8, INPUT);  // Taster
}

void loop() {
  if (digitalRead(8) == HIGH){
    digitalWrite(4, !digitalRead(4)); // Schaltet LED an pin 4 AN/AUS
  }
 unsigned long currentMillis = millis(); // Aktuelle Zeit wird in currentMillis gespeichert
  if (currentMillis - previousMillis >= interval) { // Falls mehr als 1000 ms vergangen sind
     previousMillis = currentMillis; // Zeitpunkt der letzten Schaltung wird festgehalten 
  digitalWrite(3, !digitalRead(3)); // LED wird ein- bzw. ausgeschaltet
  }
}

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anfrage Programmierung Raspberry Pi

Beitrag von Mathias »

Was die Portzugriff anbelang, dann gucke mal hier. Der unterste Teil ist sehr interessant für Pascalianer.

https://wiki.lazarus.freepascal.org/AVR ... _output/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfrage Programmierung Raspberry Pi

Beitrag von theo »

Danke, das habe ich schon gesehen.
Deiner Antwort entnehme ich, dass es zu schwierig ist, dieses Stücken Code "auf Lazarus" zu übersetzen?
Macht nichts, ich bin ja bis jetzt zufrieden mit der Arduino IDE.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Anfrage Programmierung Raspberry Pi

Beitrag von pluto »

theo hat geschrieben:Deiner Antwort entnehme ich, dass es zu schwierig ist, dieses Stücken Code "auf Lazarus" zu übersetzen?
Macht nichts, ich bin ja bis jetzt zufrieden mit der Arduino IDE.
So, schwer ist das nun auch wieder nicht. Du musst den Wiki Artikel lesen, danach weiß du, wie da mit den IO Pins geht.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfrage Programmierung Raspberry Pi

Beitrag von theo »

Es ist erstaunlich, wie ihr euch um die Antwort drückt.
Übersetze doch mal den obigen Code (19 Zeilen) und dann stellst du den ins Wiki und schon hat der nächste Anfänger vielleicht Interesse, Lazarus für Arduino zu benutzen.
Ein paar andere "Hello World" Progrämmchen noch dazu und schon klappt's mit dem Anwerben.
Versteht ihr das nicht?

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Anfrage Programmierung Raspberry Pi

Beitrag von Timm Thaler »

theo hat geschrieben:
Sa 29. Aug 2020, 12:15
Die Links zu dem Thema für Lazarus sind für mich abschreckend. Es wird nur geshiftet und geasmt und ich habe überhaupt keinen Plan, worum es geht.
Das liegt einfach daran, dass in den Tuts zu Pascal sehr schnell die aufwendigeren Sachen hinterlegt sind - weil die interessant sind.

Für die einfachen, selbsterklärenden Sachen mach ich mir nicht die Mühe Tuts zu erstellen. Weil - ich mach das freiwillig.

Anders bei Arduino. Die wollten ursprünglich was verkaufen und die wollten einen niedrigschwelligen Einstieg. Also erklären die auch jeden Pillepalle.

Es ist also kein technisches, sondern ein kommunikatives Phänomen.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Anfrage Programmierung Raspberry Pi

Beitrag von Mathias »

Da hat es viele Beispiele, steht auch im Wiki.

https://github.com/sechshelme/Lazarus-E ... ATmega328p
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Anfrage Programmierung Raspberry Pi

Beitrag von Timm Thaler »

theo hat geschrieben:
Sa 29. Aug 2020, 16:56
Ein paar andere "Hello World" Progrämmchen noch dazu und schon klappt's mit dem Anwerben.
Versteht ihr das nicht?
Wir machen das hier freiwillig. Wir müssen hier niemanden etwas verkaufen.

Verstehst Du das nicht?

Das Beispiel oben ist leicht - aber leider sinnlos. Warum sollte da jemand seine Zeit ransetzen?

digitalWrite(pin, pegel) ist ein schönes Beispiel, wie Arduino die Ressourcen des AVR vergeudet. Normalerweise geht das unter Pascal ganz einfach:

PORTA := PORTA or SPIN, wobei ich mir SPIN gleich als 1<<PIN definiere, dann muss ich das Shift nicht hinschreiben. Und wenn ich nur ein Pin setzen will, macht der Compiler daraus genau einen Befehl: sbi PORTA, PIN, der dauert genau zwei Takte.

Bei digitalWrite rufst Du aber eine Funktion auf, in der ein beliebiger PIN = Variable gesetzt werden kann. Also muss digitalWrite

1. prüfen auf welchem der 4 PORTs des AVR der Pin gesetzt werden soll
2. per if-else if die Arduino-Pinnummer auf den AVR-Pin mappen - die sind nämlich nicht gleich
3. prüfen ob der Pin überhaupt Ausgang ist und ihn als Ausgang setzen
4. per OR den PIN setzen oder per AND NOT den PIN löschen

Statt eines Befehls mit 2 Zyklen wird ein Dutzend Befehle mit zig Zyklen ausgeführt - um das Gleiche zu erreichen.

Das kann man machen, man kann problemlos eine digitalWrite-Funktion schreiben und vielleicht hat das schonmal jemand gemacht. Aber ich würde da keine Zeit ransetzen, um hinterher etwas zu erhalten was schlechter funktioniert und schlechtere - viel schlechtere - Performance hat.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Anfrage Programmierung Raspberry Pi

Beitrag von pluto »

Timm Thaler hat geschrieben:Wir machen das hier freiwillig. Wir müssen hier niemanden etwas verkaufen.
Verstehst Du das nicht?
Ich finde theo hat in einem Punkt nicht ganz unrecht:

Es gibt zu wenige einfache Beispiele. Egal, wie einfach sie uns erscheinen mögen. Es geht hier nicht um das verkaufen.
Sondern um zu vermitteln, dass es mit Lazarus / FPC geht. Das man damit low level programmieren kann.
Ohne gleich ASM nutzen zu müssen oder sich durch 300 Seiten Datenblätter zu lesen, wo von ich höchsten 10% verstehen würde.

Die Wiki Seiten von "Mathias" helfen uns weiter, weil wir uns mit der Materie auskennen. Aber Leute, wie theo eben nicht.
Hier könnten wir, eine ganze reihe von LED und Button Projekte als Beispiel erstellen. Nicht nur, wie man eine LED an oder aus macht.
MFG
Michael Springwald

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Anfrage Programmierung Raspberry Pi

Beitrag von af0815 »

wie wäre es, das im in einen richtigen Thread zu diskutieren. Weil mit der Überschrift von Theo hat das nichts zu tun. :roll:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten