pascalio - Input-/Output-Bibliothek für Free Pascal

ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Re: pascalio - Input-/Output-Bibliothek für Free Pascal

Beitrag von ATILIUS_REGULUS »

Timm Thaler hat geschrieben:Das scheint Dir so, weil das Programm abstürzt, der GPIO damit nicht mehr disabled und damit noch vom vorherigen Programmlauf enabled ist.


Prinzipiell hast Du damit zwar recht, allerdings existiert das Verzeichnis /sys/class/gpio/gpio25 tatsächlich nur, während des Programmlaufs. Sobald das Programm beendet ist, gibt es das Verzeichnis nicht mehr. Wenn ich danach das Programm neu starte, wird in Beispielprogramm 1 sowohl das Verzeichnis in Create als auch das Setzen von Direction in "TGpioLinuxPin.SetDirection(AValue: TGpioDirection);" in dem ersten Schleifendurchlauf bereits gefunden (Verzeichnis /sys/class/gpio/gpio25) beziehungsweise ist gesetzt (GPIO.Direction = gdIn).
Natürlich ist dies kein strenger Beweis, es könnte bei anderen Pi Modellen oder anderen Konfigurationen anders sein, aber das Hauptproblem bleibt das Setzen des InterruptMode, welches definitiv länger dauert.

Was allerdings noch sein könnte, daß man, wenn man nach Programmende ein anderes Programm startet, welches GPIO-Pin 25 mit einem anderen Wert für GPIO.Direction initialisiert, es tatsächlich in diesem Falle länger dauert; oder wenn Pin 25 generell anderes konfiguriert war. Dies habe ich nicht explizit geprüft.

Insgesamt erscheint es daher tatsächlich sinnvoll, die Abfrage auch in Create und allen Set-Proceduren einzufügen.

An dieser Stelle nochmals danke für die Unterstützung und die Hinweise.

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: pascalio - Input-/Output-Bibliothek für Free Pascal

Beitrag von Timm Thaler »

ATILIUS_REGULUS hat geschrieben:Sobald das Programm beendet ist, gibt es das Verzeichnis nicht mehr.


Wenn es beendet wird? Oder wenn es abstürzt?

Wie soll das sonst gehen? Das Verzeichnis wird entfernt, wenn ich die zu disabelnde GPIO-Nummer in "/sys/class/gpio/unexport" schreibe. Das muss also entweder in Deinem Progamm passieren, oder von der fpgpio bei einer Exception gemacht werden.

ATILIUS_REGULUS
Beiträge: 57
Registriert: Mi 20. Feb 2013, 10:06
OS, Lazarus, FPC: KUBUNTU 14.04 (fpc 3.3.1) / Raspbian (fpc 3.3.1)
CPU-Target: x86, x64, ARM
Kontaktdaten:

Re: pascalio - Input-/Output-Bibliothek für Free Pascal

Beitrag von ATILIUS_REGULUS »

Timm Thaler hat geschrieben:Wenn es beendet wird? Oder wenn es abstürzt?

Wenn das Programm ohne Exception beendet wird, zum Beispiel Beispielprogramm 2, gibt es das Verzeichnis /sys/class/gpio/gpio25 nicht mehr.

Wenn das ursprüngliche Programm mit einer Exception beendet wurde, existierte das Verzeichnis /sys/class/gpio/gpio25 auch nach dem Programmende weiter und wurde nicht entfernt.

In beiden Fällen wird bei einem Neustart sowohl das Verzeichnis in Create als auch das Setzen von Direction in "TGpioLinuxPin.SetDirection(AValue: TGpioDirection);" unmittelbar nach dem Erzeugen/Setzen bereits gefunden.
Es könnte allerdings sein, wie ich schon erwähnt habe, daß wenn man den Pin zuvor anders konfiguriert hatte, das Erzeugen des Verzeichnisses oder das Setzen von TGpioLinuxPin.SetDirection länger dauern könnte, was ich allerdings nicht überprüft habe (Dafür müßte man strenggenommen alle möglichen Kombinationen durchgehen, um sicher zu sein...).

Antworten