Überwachung Strg + F2
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Überwachung Strg + F2
Hallo,
in meinem Programm auf dem Raspberry Pi verwende ich die GPIO - Pins um Schaltvorgänge auszulösen. Das ich bei normalem Programmende die Pins wieder auf den Anfangszustand setze ist selbstverständlich.
Wenn ich aber über Strg + F2 das Programm sofort beende, dann bleiben die Pins im letzten Zustand erhalten, was nicht sein darf. Ein Neustart des Programms würde das Problem lösen, dauert aber eine gefühlte Ebigkeit.
Gibt es eine Möglichkeit, entweder vor dem engültigen Ende an das Programm noch etwas an das Programm zu senden, um die Pins in einen definierten Zustand zu setzen und erst dann das Programm zu beenden oder noch eine Sicherheitsabfrage
einzufügen, um das versehntliche Beenden in einem undefinierten Zustand zu verhindern?
in meinem Programm auf dem Raspberry Pi verwende ich die GPIO - Pins um Schaltvorgänge auszulösen. Das ich bei normalem Programmende die Pins wieder auf den Anfangszustand setze ist selbstverständlich.
Wenn ich aber über Strg + F2 das Programm sofort beende, dann bleiben die Pins im letzten Zustand erhalten, was nicht sein darf. Ein Neustart des Programms würde das Problem lösen, dauert aber eine gefühlte Ebigkeit.
Gibt es eine Möglichkeit, entweder vor dem engültigen Ende an das Programm noch etwas an das Programm zu senden, um die Pins in einen definierten Zustand zu setzen und erst dann das Programm zu beenden oder noch eine Sicherheitsabfrage
einzufügen, um das versehntliche Beenden in einem undefinierten Zustand zu verhindern?
Re: Überwachung Strg + F2
Probier mal das:
Code: Alles auswählen
uses .. baseunix;
...
procedure DoSig(signal: longint; info: psiginfo; context: psigcontext); cdecl;
begin
writeln('Receiving signal: ', signal);
end;
...
initialization
new(na);
new(oa);
na^.sa_Handler := SigActionHandler(@DoSig);
fillchar(na^.Sa_Mask, sizeof(na^.sa_mask), #0);
na^.Sa_Flags := 0;
{$ifdef Linux}// Linux specific
na^.Sa_Restorer := nil;
{$endif}
if fpSigAction(SIGTERM, na, oa) <> 0 then
begin
writeln('Error: ', fpgeterrno, '.');
halt(1);
end;
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Überwachung Strg + F2
Hallo,
danke für die schnelle Antwort hat aber leider nicht geklappt.
danke für die schnelle Antwort hat aber leider nicht geklappt.
Re: Überwachung Strg + F2
Schade.aro hat geschrieben:danke für die schnelle Antwort hat aber leider nicht geklappt.

Soll ich jetzt wie die Mama fragen: Was hat denn nicht geklappt?
Oder interessiert es dich gar nicht mehr?
Re: Überwachung Strg + F2
Keine Ahnung, ob man dem Debugger mitgeben kann, dass nach dem Break noch eine Operation durchgeführt werden soll, aber man könnte das genau umgekehrt lösen.aro hat geschrieben:Gibt es eine Möglichkeit, entweder vor dem engültigen Ende an das Programm noch etwas an das Programm zu senden
Man könnte ein Programm starten, welches nur die Defaultwerte setzt, wenn es geschlossen wird. Dieses könnte man mit dem Start des aktuellen Projekts starten (Projekt muss dem anderen Programm mitteilen, dass es noch läuft (z.B. per IPC)).
Falls du ein unter Windows funktionierendes Bsp. benötigst, müsste ich mal meine Beispiele durchsuchen, irgendwann hatte ich sowas ähnliches mal probiert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Überwachung Strg + F2
Durch den Debugger gekilled zu werden ist kein natürlicher Programmtod. Der Debugger unterbricht den Prozess und wirft diesen Komplett aus der Prozess Tabelle raus, der Speicher wird Rausgeworfen und das war es. Genauso wie wenn du weißt du wirst sterben (z.B. an Krebs) schreibst du dein Testament, wenn ein Verrückter Axtmörder kommt und dich entzwei teilt kannst du ja auch kein Testament mehr schreiben. Der Axtmörder ist in diesem Fall der GDB und das Testament ist der "Aufräum" Code.
Die einfachste Lösung ist da immer die beste: Stoppe das Programm einfach nicht via Strg + F2. Denn wenn das so oft Vorkommt, dass es für dich wirklich zu einen Problem wird (Normalerweise muss man das ja wenn überhaupt nur 1-2 mal so beenden, und da ist das noch nicht wirklich störend) solltest du dir Gedanken um eine Abbruchbedingung machen
Die einfachste Lösung ist da immer die beste: Stoppe das Programm einfach nicht via Strg + F2. Denn wenn das so oft Vorkommt, dass es für dich wirklich zu einen Problem wird (Normalerweise muss man das ja wenn überhaupt nur 1-2 mal so beenden, und da ist das noch nicht wirklich störend) solltest du dir Gedanken um eine Abbruchbedingung machen
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Überwachung Strg + F2
Hallo,
ich denke es liegt daran, das ich kein Signal bekomme, das ich auswerten kann. Und wo nichts gesendet wird kann man leider auch nichts empfangen.
Es passiert ja auch nicht so oft aber wenn man so in der Arbeit ist, dann passierts eben doch das iene oder andere Mal - Macht der Gewohnheit.
Ich werde wohl am besten ein keines Tool schreiben müssen, das startbereit die Pins schnell zurücksetzt.
Das ist zwar nicht die Lösung, die ich erreichen wollte aber besser als nichts. Und nichts hält so lange wie ein Provisorium.
ich denke es liegt daran, das ich kein Signal bekomme, das ich auswerten kann. Und wo nichts gesendet wird kann man leider auch nichts empfangen.
Es passiert ja auch nicht so oft aber wenn man so in der Arbeit ist, dann passierts eben doch das iene oder andere Mal - Macht der Gewohnheit.
Ich werde wohl am besten ein keines Tool schreiben müssen, das startbereit die Pins schnell zurücksetzt.
Das ist zwar nicht die Lösung, die ich erreichen wollte aber besser als nichts. Und nichts hält so lange wie ein Provisorium.
- af0815
- Lazarusforum e. V.
- Beiträge: 6764
- 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: Überwachung Strg + F2
Das ist sicher dei einfachste Lösung und wenn das Tool auch noch in Lazarus unter Tools ablegst, so ist es auch einfach aus der IDE heraus auf zu rufen. In dem Fall, wenn das Programm durch das BS oder den Debugger hart beendet wird, ist das die einzige Lösung. Im normalen Betrieb hast du später ja keinen GDB am laufen.aro hat geschrieben:Ich werde wohl am besten ein keines Tool schreiben müssen, das startbereit die Pins schnell zurücksetzt.
Das ist zwar nicht die Lösung, die ich erreichen wollte aber besser als nichts. Und nichts hält so lange wie ein Provisorium.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 130
- Registriert: Di 26. Jul 2011, 19:58
- OS, Lazarus, FPC: Deepin 20.2; Lazarus 2.0.0 + dfsg-2
- CPU-Target: 64Bit
Re: Überwachung Strg + F2
Problem gelöst. Ein Pin aktiviert in einer Schleife ständig ein retriggerbares Monoflop (z.B. 74CHT123 lässt sich direkt ansteuern). Wenn Programm zu ende ist oder hängt, bleiben Impulse aus und nach Ablauf der Verzögerungszeit des Monoflop erhalte ich ein logisches Signal, das ich hardwaremäßig auswerten und verknüpfen kann. Das hilft sicher in jeder unvorhergesehenen Situation.