Überwachung Strg + F2

Für Fragen rund um die Ide und zum Debugger
Antworten
aro
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

Beitrag von aro »

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?

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

Re: Überwachung Strg + F2

Beitrag von theo »

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;   

aro
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

Beitrag von aro »

Hallo,

danke für die schnelle Antwort hat aber leider nicht geklappt.

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

Re: Überwachung Strg + F2

Beitrag von theo »

aro hat geschrieben:danke für die schnelle Antwort hat aber leider nicht geklappt.
Schade. :wink:

Soll ich jetzt wie die Mama fragen: Was hat denn nicht geklappt?
Oder interessiert es dich gar nicht mehr?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Überwachung Strg + F2

Beitrag von Michl »

aro hat geschrieben:Gibt es eine Möglichkeit, entweder vor dem engültigen Ende an das Programm noch etwas an das Programm zu senden
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.

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;  

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Überwachung Strg + F2

Beitrag von Warf »

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

aro
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

Beitrag von aro »

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.

Benutzeravatar
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

Beitrag von af0815 »

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.
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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

aro
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

Beitrag von aro »

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.

Antworten