Software Crash effektiv realisieren

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Software Crash effektiv realisieren

      Hallo Zusammen,

      hat jemand eine Vorstellung, wie ich eine Software Crash am PC an meinem HW erkennen kann und diese dann abschalte?

      Ich habe einen Timer1 eingebaut und diese immer per PING zu einem Bestimmten Zeit vom PC zum HW gesendet und jedes Mal den Timer1 dann zurück gesetzt.

      BASCOM-Quellcode

      1. $regfile = "usb162.dat"
      2. $crystal = 8000000
      3. '$baud = 19200
      4. $hwstack = 64
      5. $swstack = 86
      6. $framesize = 86
      7. '-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Config für den TimeOut Orange LED
      8. Config Portd.4 = Output
      9. Timeoutled Alias Portd.4
      10. Timeoutled = 1
      11. '-------------------------------------------------- WATCHDOG ZÄHLER FÜR DEN TIMEOUT ------------------------------------------
      12. Config Timer1 = Timer , Prescale = 1024 'Timer konfigurieren
      13. On Timer1 Timerroutine 'Timerinterrupt Subroutine zuweisen
      14. Enable Timer1 'Timer aktivieren
      15. Enable Interrupts
      16. Stop Timer1
      17. Dim Isttimeraktiviert As Byte
      18. '################################################### WENN TIMEOUT AUSLÖST ##########################################################################
      19. Timerroutine:
      20. Config Timer1 = Timer , Prescale = 256 'Wenn Timeout auslöst:
      21. Timer1 = 59286 'Timer auf neuen Startwert 210ms einstellen
      22. Toggle Timeoutled 'Orange LED blinken lassen
      23. Wert1 = -1
      24. Hc595_reset = 0 'Ausgänge werden geresettet
      25. Hc595_reset = 1 'Und zum Widereinschalten freigegeben
      26. Portb.7 = 1 'Hier wird der G PIN von den 74HC595'er auf 1 gesetzt, damit alle Kanäle ausgeschaltet werden.
      27. Timeout_ausgeloest = 1 'Bei dieses Gerät hat der Timeout ausgelöst, da wird einfach die Adresse gesendet
      28. Return
      29. '################################################ ENDE TIMEOUT AUSLÖSUNG ############################################################################
      30. DO
      31. '---------------------------------TIMEOUT ZEIT INTERVAL SETZEN----------------------------------------------
      32. If Wert1 = Deviceadresse Then 'Wenn die Adresse nicht abgefragt wird, wird dann beim Aktivieren der Timeout für einen Gerät, alle aktiviert.
      33. If Wert14 = 1 Then 'Timeout Interval Änderung erlauben
      34. Wert14 = 0 'Dann wieder auf null setzen für das nächste Mal
      35. Config Timer1 = Timer , Prescale = 1024
      36. Select Case Wert13
      37. Case 0 : Timerwert = 53036 'Timer auf 1.6s setzen
      38. Case 1 : Timerwert = 46005 'Timer auf 2.5s. setzen
      39. Case 2 : Timerwert = 38192 'Timer auf 3.5s. setzen
      40. Case 3 : Timerwert = 30380 'Timer auf 4.5s. setzen
      41. Case 4 : Timerwert = 22567 'Timer auf 5.5s. setzen
      42. Case 5 : Timerwert = 14755 'Timer auf 6.5s. setzen
      43. Case 6 : Timerwert = 6942 'Timer auf 7.5s. setzen
      44. Case 7 : Timerwert = 692 'Timer auf 8.0s. setzen
      45. End Select
      46. End If
      47. End If
      48. '---------------------------------TIMEOUT ZEIT INTERVAL SETZEN ENDE----------------------------------------------
      49. '---------------------------PING-------------------------------------------------
      50. If Wert11 = 1 And Isttimeraktiviert = 1 Then 'Wenn PING ankommt
      51. Wert11 = 0 'Wert11 wird zurückgesetzt
      52. Timer1 = Timerwert 'Timer auf 1sec. setzen
      53. Timeoutled = 0 'Orange LED ausschalten
      54. Timeout_ausgeloest = 0
      55. End If
      56. ' '--------------------------PING ENDE----------------------------------------------------
      57. '-------------------------------------TIMEOUT AKTIVIEREN / DEAKTIVIEREN----------------------------------------
      58. If Wert1 = Deviceadresse Then 'Wenn die gesendete DeviceAdresse von der PC Software übereinstimmt
      59. Interfaceactivated = 1 'Blaue LED einschalten
      60. Wert1 = -1 'Die DeviceAdresse Wert wird auf -1 gesetzt, damit die Blaue LED wieder ausschaltet, denn die IF Funktion befindet sich in einer Loop Schleife
      61. If Wert12 = 1 Then
      62. Wert12 = 0
      63. Start Timer1 'TimerOut aktivieren
      64. Timer1 = Timerwert 'Timer auf 1sec. setzen
      65. Isttimeraktiviert = 1 'TimeOut aktiv Variable auf 1 setzen
      66. Elseif Wert12 = 0 Then
      67. Wert12 = 0
      68. Stop Timer1 'TimeOut deaktivieren
      69. Isttimeraktiviert = 0 'Variable wieder auf NULL setzen
      70. End If
      71. Loop
      Alles anzeigen





      Nun aber wenn ich den Timer für 8sec. einstelle und dann alle 8 sec. vom PC einen Ping sende, bleibt in der Zeit mein Do...Loop Schleife irgendwie stehen.

      Wer hat da einen Rat?

      VG
      Katip

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von katipefendi ()

    • Stell mal deine timer-sub hinter das End, bzw nach der main. Die sub wird sonst gleich am Anfang durchlaufen und was macht das Programm dann mit dem 'return'? Wahrscheinlich nur Mist.
      Unten fehlt ein 'end if'.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • hi,
      in deinem Source-Code fehlt was, und zwar die TCP-Schnittstelle auf die du den PING los lässt.
      Der PING wird normalerweise nicht von dem µC beantwortet, sonder von dem Ethernet-Controller. Da s läuft einen Level tiefer ab.
      Wo kommt z.B. "Deviceadresse" her?
      Ich sehe nirgends etwas, was zu eienm Gerät "PC" senden könnte...
      Oder machst du einen PING über die Serielle? Die sehe ich auch nicht...
      cu zipp
    • zipp schrieb:

      hi,
      in deinem Source-Code fehlt was, und zwar die TCP-Schnittstelle auf die du den PING los lässt.
      Der PING wird normalerweise nicht von dem µC beantwortet, sonder von dem Ethernet-Controller. Da s läuft einen Level tiefer ab.
      Wo kommt z.B. "Deviceadresse" her?
      Ich sehe nirgends etwas, was zu eienm Gerät "PC" senden könnte...
      Oder machst du einen PING über die Serielle? Die sehe ich auch nicht...
      cu zipp
      Sehr gut erklärt, aber hier bei handelt es sich um eine USB Verbindung
    • Dennis schrieb:

      Hat man denn nicht genau dafür den Watchdog erfunden, oder verstehe ich dein Problem falsch?
      An sich ist es das was er sucht, nur die allerwenigsten PC haben eine solche funktion eingebaut. Hab das in 20 Jahren nur auf einem "normalo PC gesehen" (und da war die SW dafür schrottig) , Simatic PC oder ähnliches hat ein normalsterblicher nicht zuhause.
      Ist halt eher die Frage ob die Prüfung per PING sicher genug ist. Würde ja auch den PC neu starten wenn die Netzverbindung probleme hat. Vorteil ist halt das es keinerlei spezielle Schittstelle oder Software benötigt. Wenn am PC nicht getippt wird könnte man mit einer Virtuellen Tastatur auch die Caps oder NUM LED missbrauchen.

      Tobias