irgendwie stehe ich gerade auf dem Schlauch. Es geht um ein embedded
Gerät mit Windows CE 6 und dem CompactFramework 2.0. Das verwendete
Prozessor Board (Compulab X270) hat einen Hardware Watchdog mit an
Bord. Dieser soll dann auch benutzt werden. Daher habe ich jetzt im
ersten Schritt eine Klasse geschrieben, die den Watchdog einfach in
regelmäßigen Intervallen triggert. Mehr Intelligenz soll das Teil
dann später kriegen. Aber daran scheitert es jetzt schon.
Die Callback Methode des Timers wird genau einmal beim Timerstart
aufgerufen und dann nie wieder. Das Objekt wird an einer Stelle
instantiiert wo der GC es mit Sicherheit nicht abräumen kann. Auch
ein Versuch die ganze Klasse als static zu deklarieren hat nichts
gebracht. Ich bin mir sicher, ich schaue schon die ganze Zeit auf
den Fehler, kann ihn aber nicht erkennen. Hier der aufs wesentliche
gekürzte Code:
public class Watchdog
{
/// <summary>
/// The timer to call the watchdog frequently.
/// </summary>
private Timer watchdogTimer;
/// <summary>
/// The method which is called when the timer expires.
/// </summary>
private TimerCallback watchdogCallBack;
/// <summary>
/// The time to the next trigger of the watchdog.
/// </summary>
private TimeSpan watchdogInterval = new TimeSpan(0, 1, 0);
/// <summary>
/// The time the watchdog is running after the last trigger.
/// </summary>
private TimeSpan watchdogDuration = new TimeSpan(0, 1, 0);
/// <summary>
/// Start the watchdog. First initialize the callback and
/// start the timer. Then enable the hardware watchdog and
/// give it the first trigger to start.
/// </summary>
public void Start()
{
this.watchdogCallBack = new TimerCallback(this.TriggerWatchdog);
this.watchdogTimer = new Timer(
this.watchdogCallBack,
null,
0,
(int)this.watchdogDuration.Milliseconds / 2);
//// Utility.EnableWatchdog();
//// Utility.TriggerWatchdog(this.watchdogDuration.Seconds);
}
/// <summary>
/// Retrigger the watchdog for at least double the time
/// of the watchdog duration to make sure we get not an
/// unexpected reboot.
/// </summary>
/// <param name="o">General parameter not used here.</param>
private void TriggerWatchdog(object o)
{
Console.WriteLine("\nWatchdog trigger\n");
}
}
Ich hoffe, irgendjemand kann mir die Augenbinde abnehmen.
Vielen Dank schonmal
Peter
--
Antworten bitte in die NG. E-Müll Adresse wird nur selten gelesen!