DEENESPTFRRUARHIKOZHNL

Watchdog Driver (Wdg)

ModulWdg (Watchdog Driver)
BSW-Modul-ID102
Standard-Header#include "Wdg.h"
SWS-SpezifikationAUTOSAR_SWS_WatchdogDriver.pdf
ClusterMicrocontroller Abstraction (MCAL)

Modul-GuideKI-GENERIERT

Bedient die Watchdog-Hardware gemäß einer befristeten Triggerbedingung und schaltet ihre Betriebsmodi um.
KI-GENERIERT ungeprüft Modell: claude-opus-5-5 · Aufwand: high · Temperatur: nicht steuerbar · Prompt: 826a1515b822 Herkunft Offene Fragen (3)
Kausaler Anker: R20-11 Gültig ab R20-11 Neu synthetisiert für diesen Spezifikationsstand.
KI-generiertclaude-opus-5-5 · 2026-10-13

Bedient die Watchdog-Hardware gemäß einer befristeten Triggerbedingung und schaltet ihre Betriebsmodi um.

Der Watchdog-Treiber steuert die interne oder externe Watchdog-Hardware im Auftrag des Watchdog Managers. Dieser setzt über das Watchdog Interface nur eine befristete Triggerbedingung. Solange sie gilt, triggert der Treiber die Hardware selbst; danach läuft der Watchdog ab [SWS_Wdg_00144]. Wdg_Init setzt Standardmodus und Timeout aus der Konfiguration, und Wdg_SetMode wechselt zwischen OFF-, SLOW- und FAST-Modus [SWS_Wdg_00160]. Ein Timeout von 0 löst einen nahezu sofortigen Reset aus, und abschalten lässt sich der Watchdog nur, wenn die Konfiguration es erlaubt.

Der Watchdog-Treiber Wdg steuert die Watchdog-Hardware über vier synchrone Dienste: Wdg_Init, Wdg_SetMode, Wdg_SetTriggerCondition und Wdg_GetVersionInfo ([SWS_Wdg_00106], [SWS_Wdg_00107], [SWS_Wdg_00155], [SWS_Wdg_00109]). EcuM ruft Wdg_Init auf. Der Watchdog Manager erreicht den Treiber nur über das Watchdog Interface, das die Instanz per DeviceIndex wählt (SWS WdgIf S. 17). Interne Instanzen greifen direkt auf die Hardware zu, externe über SPI oder DIO ([SWS_Wdg_00161], [SWS_Wdg_00076]). Beide bieten dieselbe API [SWS_Wdg_00077].

kontext cluster_wdg Wdg-Instanzen (Namen je Instanz erweitert) EcuM EcuM (ECU State Manager) WdgInt Wdg (interner Watchdog) EcuM->WdgInt Wdg_Init WdgExt Wdg (externer Watchdog) EcuM->WdgExt Wdg_Init WdgM WdgM (Watchdog Manager) WdgIf WdgIf (Watchdog Interface) Auswahl per DeviceIndex WdgM->WdgIf WdgIf_SetMode WdgIf_SetTriggerCondition WdgIf->WdgInt Wdg_SetMode Wdg_SetTriggerCondition WdgIf->WdgExt Wdg_SetMode Wdg_SetTriggerCondition HwInt interne Watchdog-Hardware WdgInt->HwInt direkter Zugriff Det DET (optional) WdgInt->Det Det_ReportError Dem DEM (optional) WdgInt->Dem Dem_SetEventStatus SpiDio Spi / Dio (Handler bzw. Treiber) WdgExt->SpiDio API des Handlers/Treibers WdgExt->Det Det_ReportError WdgExt->Dem Dem_SetEventStatus HwExt externe Watchdog-Hardware SpiDio->HwExt Bus- bzw. Pinzugriff

Kontextdiagramm: EcuM initialisiert die Wdg-Instanzen, WdgM steuert sie über WdgIf. Externe Instanzen erreichen die Hardware über Spi/Dio. Quellen: [SWS_Wdg_00076], [SWS_Wdg_00161], SWS WdgM S. 86

Kern des Moduls ist die Triggerbedingung. Sie gilt als Erlaubnis, den Watchdog für die nächsten n Millisekunden zu bedienen. Solange sie gültig ist, triggert der Treiber selbst; danach läuft der Watchdog ab [SWS_Wdg_00144]. Wdg_SetTriggerCondition setzt den Zähler zurück und rechnet die Millisekunden modusabhängig in einen Zählerwert um ([SWS_Wdg_00136], [SWS_Wdg_00139]). Die interne Bedienroutine triggert und dekrementiert, solange der Zähler größer als null ist. Bei null triggert sie nicht mehr ([SWS_Wdg_00134], [SWS_Wdg_00135]). Ein Timeout von 0 erzwingt einen (nahezu) sofortigen Reset, und ein abgelaufener Zähler lässt sich nicht neu laden [SWS_Wdg_00140].

Entkoppeltes Triggern über die TriggerbedingungWdgMWdgIfWdgTimer-HardwareWatchdog-HardwareUse Case: Triggerbedingung erneuernWdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)Triggerzähler zurücksetzenRückkehrRückkehrUse Case: Bedienung im Treiberloopje Timer-InterruptInterruptaltTriggerzähler > 0Triggerzähler dekrementierenHardware triggern(ggf. mit Aktivierungscode)Triggerzähler = 0kein Triggern: Watchdog läuft abund setzt das Steuergerät zurück

Sequenzdiagramm: WdgM lädt nur den Zähler nach, das Triggern löst ein Timer-Interrupt im Treiber aus. Bei Zählerstand 0 läuft der Watchdog ab. Quellen: SWS Wdg Abb. 9.2 S. 31, [SWS_Wdg_00134], [SWS_Wdg_00135]

Wdg_Init setzt Standardmodus und Timeout-Periode aus dem Konfigurationssatz Wdg_ConfigType [SWS_Wdg_00001]. Wdg_SetMode wechselt zwischen WDGIF_OFF_MODE, WDGIF_SLOW_MODE und WDGIF_FAST_MODE und liefert E_OK nur bei vollständigem Wechsel ([SWS_Wdg_00160], [SWS_Wdg_00103]). Eine De-Initialisierung gibt es nicht. Abgeschaltet wird über den OFF-Modus [SWS_Wdg_00031], und das nur, wenn WdgDisableAllowed es erlaubt [SWS_Wdg_00025].

Im Fehlerfall meldet Wdg die Entwicklungsfehler WDG_E_DRIVER_STATE, WDG_E_PARAM_MODE, WDG_E_PARAM_CONFIG und WDG_E_PARAM_TIMEOUT [SWS_Wdg_00010]. Hinzu kommen die Produktionsfehler WDG_E_MODE_FAILED und WDG_E_DISABLE_REJECTED ([SWS_Wdg_00016], [SWS_Wdg_00179]). Diese Produktionsfehler dürften über Dem_SetEventStatus gemeldet werden [SWS_Wdg_00111]. Frage Q-f0ec41b842ebbdc9 (offen)

Rolle im Watchdog-Stack: der Treiber, der das Triggern selbst übernimmt

Der Watchdog-Treiber Wdg steuert die Watchdog-Hardware über eine kleine, synchrone API mit vier Diensten, die alle über Wdg.h verfügbar sind: Wdg_Init (Service-ID 0x00), Wdg_SetMode (0x01), Wdg_SetTriggerCondition (0x03) und Wdg_GetVersionInfo (0x04). Nur Wdg_GetVersionInfo ist reentrant ([SWS_Wdg_00106], [SWS_Wdg_00107], [SWS_Wdg_00155], [SWS_Wdg_00109]). Eine Schnittstelle zur De-Initialisierung gibt es bewusst nicht. Wenn Hardware und Umgebung ein Abschalten zulassen, geschieht es über Wdg_SetMode mit dem OFF-Modus [SWS_Wdg_00031].

Die Dienste werden von der Basissoftware aufgerufen. Der ECU State Manager ruft Wdg_Init auf (SWS EcuM S. 34). Der Watchdog Manager benötigt WdgIf_SetMode und WdgIf_SetTriggerCondition (SWS WdgM S. 86). Das Watchdog Interface bildet diese Aufrufe auf den Treiber ab und wählt die Instanz über einen nullbasierten DeviceIndex vom Typ uint8. Ist nur ein Treiber konfiguriert, darf diese Abbildung keinen Laufzeit-Overhead verursachen, etwa durch Makros (SWS WdgIf S. 17). Das zeitliche Triggern liegt vollständig im Treiber. Der Watchdog Manager setzt nur die Triggerbedingung (SWS WdgM S. 56; [SWS_Wdg_00144]).

Zur Hardware hin unterscheiden sich die Instanzen. Eine Instanz für einen internen Watchdog greift direkt auf die Hardware zu [SWS_Wdg_00161]. Eine Instanz für einen externen Watchdog nutzt die API eines Handlers oder Treibers, etwa SPI oder DIO [SWS_Wdg_00076]. Optional verwendet Wdg Det_ReportError für Entwicklungsfehler und Dem_SetEventStatus für Monitorstatus [SWS_Wdg_00111].

kontext cluster_wdg Wdg-Instanzen (Namen je Instanz erweitert) EcuM EcuM (ECU State Manager) WdgInt Wdg (interner Watchdog) EcuM->WdgInt Wdg_Init WdgExt Wdg (externer Watchdog) EcuM->WdgExt Wdg_Init WdgM WdgM (Watchdog Manager) WdgIf WdgIf (Watchdog Interface) Auswahl per DeviceIndex WdgM->WdgIf WdgIf_SetMode WdgIf_SetTriggerCondition WdgIf->WdgInt Wdg_SetMode Wdg_SetTriggerCondition WdgIf->WdgExt Wdg_SetMode Wdg_SetTriggerCondition HwInt interne Watchdog-Hardware WdgInt->HwInt direkter Zugriff Det DET (optional) WdgInt->Det Det_ReportError Dem DEM (optional) WdgInt->Dem Dem_SetEventStatus SpiDio Spi / Dio (Handler bzw. Treiber) WdgExt->SpiDio API des Handlers/Treibers WdgExt->Det Det_ReportError WdgExt->Dem Dem_SetEventStatus HwExt externe Watchdog-Hardware SpiDio->HwExt Bus- bzw. Pinzugriff

Kontextdiagramm: Wdg wird von EcuM initialisiert und vom WdgM nur indirekt über WdgIf gesteuert. Interne Instanzen greifen direkt auf die Hardware zu, externe über Spi/Dio. Quellen: [SWS_Wdg_00076], [SWS_Wdg_00161], [SWS_Wdg_00111], SWS WdgM S. 86

Vom Systemstart zum überwachten Betrieb

Wdg_Init erhält einen Zeiger auf einen Konfigurationssatz vom Typ Wdg_ConfigType. Diese Struktur ist hardwareabhängig ([SWS_Wdg_00106], [SWS_Wdg_00171]). Die Funktion initialisiert Treiber und Hardware und setzt den Standardmodus und die Timeout-Periode aus diesem Satz [SWS_Wdg_00001]. Außerdem initialisiert sie alle globalen Variablen [SWS_Wdg_00100]. Sie beschreibt nur die Controllerregister, die andere Hardwaremodule weder beeinflussen noch von ihnen abhängen. Gemeinsam genutzte Register initialisiert ein übergreifendes Systemmodul [SWS_Wdg_00101]. Bei aktivierter Entwicklungsfehlererkennung wechselt der interne Zustand nach erfolgreicher Initialisierung von WDG_UNINIT nach WDG_IDLE [SWS_Wdg_00019].

Abbildung 9.1 der Spezifikation zeigt die Arbeitsteilung: EcuM initialisiert Wdg direkt, danach steuert WdgM über WdgIf Triggerbedingung und Modus (SWS Wdg Abb. 9.1 S. 34). Für Integratoren ist wichtig: Ab Wdg_Init gelten der konfigurierte Standardmodus und die initiale Timeout-Periode [SWS_Wdg_00001]. Ist dieser Modus nicht OFF, muss die steuernde Instanz die Triggerbedingung innerhalb des Zeitfensters erneuern, sonst läuft der Watchdog ab [SWS_Wdg_00144].

Initialisierung, Triggerbedingung und ModuswechselEcuMWdgMWdgIfWdgUse Case: InitialisierungWdg_Init(ConfigPtr)Globale Variablen und Register initialisierenStandardmodus und Timeout-Periode setzenmit Entwicklungsfehlererkennung:WDG_UNINIT -> WDG_IDLERückkehrUse Case: Triggerbedingung setzenloopvor Ablauf des Zeitfensters erneuernWdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)ms in Zählerwert umrechnen(aktuellen Modus berücksichtigen)RückkehrRückkehrUse Case: ModuswechselWdgIf_SetMode(DeviceIndex, WdgMode)Wdg_SetMode(Mode)E_OK / E_NOT_OKRückgabewert von Wdg_SetMode

Sequenzdiagramm: Auf die Initialisierung durch EcuM folgen das Setzen der Triggerbedingung und das Umschalten des Modus durch WdgM über WdgIf. Quellen: SWS Wdg Abb. 9.1 S. 34, [SWS_Wdg_00001], [SWS_Wdg_00019], [SWS_Wdg_00139], SWS WdgIf S. 18

Triggerbedingung: befristete Erlaubnis zum Bedienen

Die Hardware wird nicht durch einzelne Triggeraufrufe von außen bedient. Stattdessen gilt eine Triggerbedingung: Solange sie gültig ist, bedient der Treiber die Hardware selbst. Wird sie ungültig, stellt er das Triggern ein, und der Watchdog läuft ab [SWS_Wdg_00144]. Die Spezifikation beschreibt die Bedingung als „Erlaubnis, den Watchdog für die nächsten n Millisekunden zu bedienen“. Die steuernde Instanz muss sie innerhalb dieses Fensters erneuern [SWS_Wdg_00144].

Wdg_SetTriggerCondition(uint16 timeout) setzt den Timeout-Zähler entsprechend dem übergebenen Wert zurück ([SWS_Wdg_00155], [SWS_Wdg_00136]). Der Wert wird als Millisekunden interpretiert. Der Treiber rechnet ihn intern in einen Zählerwert um [SWS_Wdg_00138] und berücksichtigt dabei den aktuellen Modus [SWS_Wdg_00139]. Der Wert 0 ist zulässig: Er beendet das Triggern (nahezu) sofort und löst damit einen (nahezu) sofortigen Watchdog-Reset aus. Steht der gespeicherte Zähler bereits auf 0, ignoriert die Funktion jeden neuen Wert [SWS_Wdg_00140]. Ein abgelaufener Zähler lässt sich also nicht mehr neu laden.

Das eigentliche Triggern erledigt eine treiberinterne Bedienroutine. Ist der Triggerzähler größer als null, dekrementiert sie ihn und triggert die Hardware [SWS_Wdg_00134]. Hat er null erreicht, tut sie nichts, und der Watchdog läuft ab [SWS_Wdg_00135]. Wird die Bedienung als Interruptroutine umgesetzt, gehören die Interrupt-Rahmen in Wdg_Irq.c [SWS_Wdg_00079]. Abbildung 9.2 zeigt dafür einen Timer-Interrupt, der das Triggern zeitlich unabhängig vom Aufruf über WdgIf auslöst (SWS Wdg Abb. 9.2 S. 31).

Entkoppeltes Triggern über die TriggerbedingungWdgMWdgIfWdgTimer-HardwareWatchdog-HardwareUse Case: Triggerbedingung erneuernWdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)Triggerzähler zurücksetzenRückkehrRückkehrUse Case: Bedienung im Treiberloopje Timer-InterruptInterruptaltTriggerzähler > 0Triggerzähler dekrementierenHardware triggern(ggf. mit Aktivierungscode)Triggerzähler = 0kein Triggern: Watchdog läuft abund setzt das Steuergerät zurück

Sequenzdiagramm: WdgM lädt den Triggerzähler nur nach, das Triggern selbst löst ein Timer-Interrupt im Treiber aus. Bei Zählerstand 0 unterbleibt das Triggern, und der Watchdog läuft ab. Quellen: SWS Wdg Abb. 9.2 S. 31, [SWS_Wdg_00134], [SWS_Wdg_00135], [SWS_Wdg_00136], [SWS_Wdg_00093]

triggerbedingung start Wdg_SetTriggerCondition(timeout) pruefMax Entwicklungsfehlererkennung aktiv und timeout > WdgMaxTimeout? start->pruefMax fehler WDG_E_PARAM_TIMEOUT melden Zähler nicht neu laden pruefMax->fehler ja pruefNull gespeicherter Zähler = 0? pruefMax->pruefNull nein ende Rückkehr zum Aufrufer fehler->ende ignorieren nichts tun (übergebenen Wert ignorieren) pruefNull->ignorieren ja umrechnen Millisekunden in Zählerwert umrechnen (aktuellen Modus berücksichtigen) pruefNull->umrechnen nein ignorieren->ende laden Timeout-Zähler zurücksetzen umrechnen->laden pruefT0 timeout = 0? laden->pruefT0 reset Triggern endet (nahezu) sofort -> Watchdog-Reset der ECU pruefT0->reset ja weiter Bedienroutine triggert, solange Zähler > 0 pruefT0->weiter nein reset->ende weiter->ende

Aktivitätsdiagramm: Wdg_SetTriggerCondition verwirft zu große Timeouts, ignoriert neue Werte bei bereits abgelaufenem Zähler und rechnet sonst modusabhängig in einen Zählerwert um. Interpretation: Die Reihenfolge der beiden Prüfungen legt die Spezifikation nicht fest. Quellen: [SWS_Wdg_00146], [SWS_Wdg_00140], [SWS_Wdg_00138], [SWS_Wdg_00139], SWS Wdg S. 29

Betriebsmodi OFF, SLOW und FAST

Wdg_SetMode schaltet Treiber und Hardware vom aktuellen Modus in WDGIF_OFF_MODE, WDGIF_SLOW_MODE oder WDGIF_FAST_MODE. Jeder Modus entspricht einer statisch konfigurierten Einstellung, etwa Toggle- oder Window-Watchdog mit unterschiedlichen Timeout-Perioden [SWS_Wdg_00160]. Die hardwarespezifischen Parameter je Modus stehen im Konfigurationssatz, der an Wdg_Init übergeben wird [SWS_Wdg_00051]. Den Typ WdgIf_ModeType importiert Wdg aus WdgIf.h [SWS_Wdg_00105]. Ein älteres Konfigurationsmodell zeigt dazu die Container WdgSettingsFast, WdgSettingsSlow und WdgSettingsOff sowie WdgDefaultMode (ECUC-Parameter Abb. 5.21 S. 377).

Wdg_SetMode liefert E_OK nur, wenn der Wechsel vollständig ausgeführt ist und alle Parameter von Treiber und Hardware die neuen Werte haben [SWS_Wdg_00103]. WdgIf reicht diesen Rückgabewert unverändert weiter (SWS WdgIf S. 18). Ob der Watchdog abgeschaltet werden darf, bestimmt der Pre-Compile-Parameter WdgDisableAllowed. Steht er auf OFF, wird eine Initialisierung mit abschaltendem Standardmodus abgelehnt [SWS_Wdg_00025]. Der Fehler WDG_E_DISABLE_REJECTED deckt laut seiner Beschreibung auch einen entsprechenden Moduswechsel ab [SWS_Wdg_00179].

modi start OFF WDGIF_OFF_MODE start->OFF Wdg_Init (Standardmodus) nur wenn WdgDisableAllowed != OFF SLOW WDGIF_SLOW_MODE start->SLOW Wdg_Init (Standardmodus) FAST WDGIF_FAST_MODE start->FAST Wdg_Init (Standardmodus) OFF->SLOW Wdg_SetMode OFF->FAST Wdg_SetMode SLOW->OFF Wdg_SetMode nur wenn Abschalten erlaubt SLOW->FAST Wdg_SetMode FAST->OFF Wdg_SetMode nur wenn Abschalten erlaubt FAST->SLOW Wdg_SetMode

Zustandsdiagramm: Wdg_Init setzt den konfigurierten Standardmodus, danach wechselt Wdg_SetMode zwischen den drei Modi. Der OFF-Modus ist nur erreichbar, wenn WdgDisableAllowed es zulässt. Quellen: [SWS_Wdg_00160], [SWS_Wdg_00001], [SWS_Wdg_00025], [SWS_Wdg_00179], [SWS_Wdg_00031]

Interne Zustände, exklusive Bereiche und Aktivierungscodes

Bei aktivierter Entwicklungsfehlererkennung führt Wdg einen internen Zustand: WDG_UNINIT bis zur erfolgreichen Initialisierung, danach WDG_IDLE [SWS_Wdg_00019]. Wdg_SetMode und die Bedienroutine setzen während ihrer Ausführung WDG_BUSY. Als letzte Operation vor der Rückkehr setzen sie wieder WDG_IDLE ([SWS_Wdg_00018], [SWS_Wdg_00052]). Beide prüfen vorher, ob der Zustand WDG_IDLE ist. Andernfalls unterbleibt der Moduswechsel bzw. das Triggern, und WDG_E_DRIVER_STATE wird gemeldet ([SWS_Wdg_00017], [SWS_Wdg_00035]). So werden Aufrufe vor der Initialisierung erkannt, ebenso Überschneidungen von Moduswechsel und Triggern.

Müssen für Datenkonsistenz Interrupts gesperrt werden, etwa beim Moduswechsel oder in der Triggerroutine, soll dies möglichst über einen exklusiven Bereich des BSW-Schedulers geschehen. Der interne Treiber darf als MCAL-Modul Interrupts auch direkt sperren [SWS_Wdg_00040]. Der Leitfaden zur BSW-Verteilung erklärt den Hintergrund: In MCAL-Treibern können Main Function, Service-API und ISR in eigenen Ausführungskontexten auf gemeinsame Peripherieregister zugreifen (BSW Distribution Guide S. 36).

Manche Hardware verlangt einen konfigurierbaren oder veränderlichen Aktivierungscode. Dann verwaltet Wdg den Code intern und übergibt jeweils den korrekten Wert. Die Hardware aktualisiert daraufhin die interne Variable mit dem nächsten erwarteten Code [SWS_Wdg_00093]. Der Triggerzyklus muss so gewählt sein, dass diese Aktualisierung garantiert stattfinden kann [SWS_Wdg_00094]. Ein konfigurierbarer Anfangscode gehört in den Konfigurationssatz. Bei hardwarefest vorgegebenem Code entfällt diese Anforderung [SWS_Wdg_00095].

zustaende start UNINIT WDG_UNINIT start->UNINIT UNINIT->UNINIT Wdg_SetMode / Bedienroutine: WDG_E_DRIVER_STATE IDLE WDG_IDLE UNINIT->IDLE Wdg_Init erfolgreich BUSY WDG_BUSY IDLE->BUSY Wdg_SetMode oder Bedienroutine beginnt BUSY->IDLE letzte Operation vor der Rückkehr BUSY->BUSY weiterer Aufruf: WDG_E_DRIVER_STATE, kein Wechsel/kein Triggern

Zustandsdiagramm: Bei aktivierter Entwicklungsfehlererkennung gelten die Zustände WDG_UNINIT, WDG_IDLE und WDG_BUSY. Aufrufe außerhalb von WDG_IDLE werden mit WDG_E_DRIVER_STATE abgewiesen. Quellen: [SWS_Wdg_00019], [SWS_Wdg_00017], [SWS_Wdg_00018], [SWS_Wdg_00035], [SWS_Wdg_00052]

Interne und externe Watchdogs: Instanzen, Dateien, Konfiguration

Ein Steuergerät kann mehrere Wdg-Instanzen haben, etwa eine für einen internen und eine für einen externen Watchdog. Dann werden API-Namen und instanzspezifische Typnamen [SWS_Wdg_00172] sowie Code- und Header-Dateinamen nach SRS_BSW_00347 erweitert ([SWS_Wdg_00169], [SWS_Wdg_00170]). Abbildung 1 zeigt die Dateistruktur mit Platzhaltern wie Wdg<xxx>.h und Wdg_<xxx>PBcfg.c (SWS Wdg Abb. 1 S. 11). Ein externer Wdg muss denselben Funktionsumfang mit semantisch identischer API bieten wie ein interner [SWS_Wdg_00077]. Sein Quellcode muss unabhängig von der Mikrocontrollerplattform sein [SWS_Wdg_00055]. Ein Beispiel aus dem Safety-Umfeld ist ein externer Window-Watchdog, der per SPI angebunden ist (EXP SafetyUseCase Abb. 4.1 S. 20).

Die Codedateistruktur ist nicht vollständig vorgegeben. Bei Bedarf umfasst sie Wdg_Lcfg.c für Link-Time-Parameter und Wdg_PBcfg.c für Post-Build-Parameter [SWS_Wdg_00079]. Wdg prüft die Konfiguration spätestens zur Compile-Zeit statisch [SWS_Wdg_00086]. Ob der Code aus ROM oder RAM läuft, legt eine statische Konfiguration fest [SWS_Wdg_00168]. Für externe Hardware nimmt Wdg die Zugriffsparameter, etwa SPI-Kanal oder DIO-Port, in seine veröffentlichten Parameter und seine Konfigurationsparameter auf [SWS_Wdg_00078]. Jüngere Releases modellieren das als Auswahlreferenz WdgExternalContainerRef auf eine DIO-Kanalgruppe, eine SPI-Sequenz oder eine I2C-Sequenz. I2C wird in R20-11 nicht ausdrücklich genannt (SWS Wdg S. 40). Gegen den Maximalwert WdgMaxTimeout prüft Wdg_SetTriggerCondition [SWS_Wdg_00146]. Das Modell der veröffentlichten Informationen enthält daneben WdgMinTimeout und WdgResolution (ECUC-Parameter Abb. 5.22 S. 380).

Verhalten im Fehlerfall

Wdg unterscheidet Entwicklungsfehler, die überwiegend nur bei aktivierter Entwicklungsfehlererkennung geprüft werden, von erweiterten Produktionsfehlern. Die Fehlercodes sind festgelegt [SWS_Wdg_00010]:

  • WDG_E_DRIVER_STATE (0x10)
  • WDG_E_PARAM_MODE (0x11)
  • WDG_E_PARAM_CONFIG (0x12)
  • WDG_E_PARAM_TIMEOUT (0x13)
  • WDG_E_PARAM_POINTER (0x14)
  • WDG_E_INIT_FAILED (0x15, ungültige Auswahl des Konfigurationssatzes)

Für Entwicklungsfehler fordert Wdg optional Det_ReportError an [SWS_Wdg_00111]. Die Fehlerfälle der einzelnen Dienste:

  • Initialisierung: Liegt der Konfigurationssatz außerhalb der zulässigen Grenzen, unterbleibt die Initialisierung mit WDG_E_PARAM_CONFIG [SWS_Wdg_00090]. Würde der Standardmodus den Watchdog abschalten, obwohl WdgDisableAllowed==OFF gilt, unterbleibt sie mit WDG_E_DISABLE_REJECTED [SWS_Wdg_00025].
  • Moduswechsel: Ein falscher Zustand führt zu WDG_E_DRIVER_STATE [SWS_Wdg_00017]. Ein Modus außerhalb des Bereichs oder unzulässige Hardwareeinstellungen führen zu WDG_E_PARAM_MODE ([SWS_Wdg_00091], [SWS_Wdg_00092]). In allen drei Fällen findet kein Wechsel statt, und die Funktion liefert E_NOT_OK. Scheitert der Wechsel selbst, etwa an inkonsistenten Einstellungen oder verletzten Zeitbedingungen, liefert sie E_NOT_OK und meldet WDG_E_MODE_FAILED [SWS_Wdg_00016].
  • Triggerbedingung: Überschreitet der Timeout WdgMaxTimeout, wird der Zähler nicht neu geladen, und WDG_E_PARAM_TIMEOUT wird gemeldet [SWS_Wdg_00146].
  • Versionsabfrage: Ein ungültiger Zeiger fällt unter WDG_E_PARAM_POINTER [SWS_Wdg_00010]. Die Nullzeiger-Prüfung für Wdg_GetVersionInfo beschreibt eine Dokumentstelle aus jüngeren Releases (SWS Wdg S. 30).

Die Produktionsfehler WDG_E_MODE_FAILED und WDG_E_DISABLE_REJECTED betreffen Initialisierung und Moduswechsel. Ihre Überwachungsfrequenz hängt von der oberen Schicht ab ([SWS_Wdg_00178], [SWS_Wdg_00179]). Sie werden mit FAILED gemeldet, wenn Setzen bzw. Abschalten des Modus scheitert, und mit PASSED, wenn es gelingt ([SWS_Wdg_00180], [SWS_Wdg_00181], [SWS_Wdg_00182], [SWS_Wdg_00183]). Diese Meldungen dürften über das optional angeforderte Dem_SetEventStatus laufen [SWS_Wdg_00111]. Frage (offen) Der gravierendste Fall erscheint bewusst nicht als Rückgabewert: Bleibt die Triggerbedingung aus oder wird 0 gesetzt, läuft der Watchdog ab, und das Steuergerät wird zurückgesetzt ([SWS_Wdg_00135], [SWS_Wdg_00140]).

setmode start Wdg_SetMode(Mode) pruefZustand Entwicklungsfehlererkennung aktiv: Zustand = WDG_IDLE? start->pruefZustand fehlerZustand WDG_E_DRIVER_STATE melden kein Wechsel, E_NOT_OK pruefZustand->fehlerZustand nein pruefMode Mode im zulässigen Bereich? pruefZustand->pruefMode ja ende Rückkehr zum Aufrufer fehlerZustand->ende pruefGrenzen Hardwareeinstellungen des Modus innerhalb der Grenzen? pruefMode->pruefGrenzen ja fehlerMode WDG_E_PARAM_MODE melden kein Wechsel, E_NOT_OK pruefMode->fehlerMode nein pruefGrenzen->fehlerMode nein busy Zustand WDG_BUSY pruefGrenzen->busy ja fehlerMode->ende umschalten Treiber und Hardware auf neuen Modus umschalten busy->umschalten pruefErfolg Wechsel vollständig und erfolgreich? umschalten->pruefErfolg ok WDG_E_MODE_FAILED: PASSED Rückgabe E_OK pruefErfolg->ok ja nok WDG_E_MODE_FAILED: FAILED Rückgabe E_NOT_OK pruefErfolg->nok nein idle Zustand WDG_IDLE (letzte Operation) ok->idle nok->idle idle->ende

Aktivitätsdiagramm: Wdg_SetMode prüft Zustand, Modus und Hardwaregrenzen, schaltet um und meldet das Ergebnis über Rückgabewert und WDG_E_MODE_FAILED. Interpretation: Die Reihenfolge der Prüfungen ist nicht normativ festgelegt. Quellen: [SWS_Wdg_00017], [SWS_Wdg_00091], [SWS_Wdg_00092], [SWS_Wdg_00016], [SWS_Wdg_00103], [SWS_Wdg_00018], [SWS_Wdg_00180], [SWS_Wdg_00181]

Weiterführende Detailbelege

KI-generierter Modul-Leitfaden auf Basis der Spezifikationsauszüge für AUTOSAR Classic R20-11. Normativ sind allein die verlinkten Requirements; als Interpretation gekennzeichnete Aussagen sind durch die Quellen nicht unmittelbar gedeckt.

Watchdog Driver (Wdg)

Hardware watchdog timer servicing and mode configuration.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

function Wdg_Init [SWS_Wdg_00106] 📄 PDF

void Wdg_Init (const Wdg_ConfigType* ConfigPtr);

Initializes the module.

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: 9b3504b00b97 Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung und Ablauf

Die synchrone Funktion Wdg_Init dient der Initialisierung des Treibermoduls Wdg sowie der Watchdog-Hardware [SWS_Wdg_00106], [SWS_Wdg_00001]. Über den Parameter ConfigPtr wird ein Zeiger auf den Konfigurationssatz übergeben [SWS_Wdg_00106]. Die Funktion initialisiert alle globalen Variablen des Moduls und setzt den vorkonfigurierten Standard-Watchdog-Modus sowie die initiale Timeout-Periode [SWS_Wdg_00001], [SWS_Wdg_00100].

Hardware-Ansteuerung und Einschränkungen

Wdg_Init konfiguriert ausschließlich diejenigen Controller-Register zur Watchdog-Ansteuerung, die keine anderen Hardwaremodule beeinflussen oder von ihnen abhängen [SWS_Wdg_00101]. Register mit modulübergreifenden Abhängigkeiten werden stattdessen durch ein gemeinsames Systemmodul initialisiert [SWS_Wdg_00101]. Die Funktion ist nicht reentrant und liefert keinen Rückgabewert [SWS_Wdg_00106].

Fehlerbehandlung

Vor der Durchführung der Initialisierung erfolgen spezifische Prüfungen:

  • Ist die Entwicklungserkennung (Development Error Detection) aktiviert, wird geprüft, ob die hardwarespezifischen Inhalte des Konfigurationssatzes innerhalb der zulässigen Grenzen liegen; bei Fehlern bricht die Funktion ab und meldet WDG_E_PARAM_CONFIG [SWS_Wdg_00090].
  • Falls die Deaktivierung des Watchdogs unzulässig ist (WdgDisableAllowed == OFF), der konfigurierte Standardmodus ihn jedoch deaktivieren würde, wird die Initialisierung abgebrochen und der Fehler WDG_E_DISABLE_REJECTED ausgelöst [SWS_Wdg_00025].

Dieser Nutzungshinweis wurde automatisiert auf Basis der Spezifikationsanforderungen generiert.

Implementer's Guide folgt (Komplexität I2)

function Wdg_SetMode [SWS_Wdg_00107] 📄 PDF

Std_ReturnType Wdg_SetMode (WdgIf_ModeType Mode);

Switches the watchdog into the mode Mode. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_WatchdogDriver

KI-GENERIERT ungeprüft Modell: gemini-3.8-flash-medium · Aufwand: medium · Temperatur: nicht steuerbar · Prompt: b7aa0ec55f3d Herkunft
KI-generiertgemini-3.8-flash-medium · 2026-10-13

Verwendung

Die synchrone und nicht reentrante Funktion [SWS_Wdg_00107] schaltet den Watchdog-Treiber sowie die zugrundeliegende Hardware in einen von drei statisch konfigurierten Modi: WDGIF_OFF_MODE, WDGIF_SLOW_MODE oder WDGIF_FAST_MODE [SWS_Wdg_00160]. Da das Modul keine eigenständige Schnittstelle für die Deinitialisierung anbietet, erfolgt ein Shutdown des Watchdogs über den Aufruf mit dem Modus WDGIF_OFF_MODE, sofern die Hardware dies unterstützt [SWS_Wdg_00031]. Bei erfolgreicher und vollständiger Übernahme aller Parameter liefert die Funktion E_OK zurück [SWS_Wdg_00103].

Zustand und Nebenläufigkeit

Aufgrund der fehlenden Reentranz darf kein nebenläufiger Aufruf erfolgen. Bei aktivierter Fehlererkennung prüft die Funktion, ob sich das Modul im Zustand WDG_IDLE befindet [SWS_Wdg_00017]. Während der Ausführung setzt sie den Zustand auf WDG_BUSY und wechselt erst als letzte Operation vor der Rückkehr wieder zu WDG_IDLE [SWS_Wdg_00018].

Fehlerbehandlung

Im Fehlerfall wird E_NOT_OK zurückgegeben:

  • Bei ungültigen Werten für Mode oder außerhalb der Grenzen liegenden hardwarespezifischen Konfigurationen meldet die Funktion den Fehler WDG_E_PARAM_MODE [SWS_Wdg_00091], [SWS_Wdg_00092].
  • Befindet sich das Modul nicht im Zustand WDG_IDLE, bricht der Wechsel mit WDG_E_DRIVER_STATE ab [SWS_Wdg_00017].
  • Kann die Hardware den Modus nicht einnehmen – etwa wegen inkonsistenter Einstellungen oder verletzter Timing-Vorgaben –, wird der Extended Production Error WDG_E_MODE_FAILED ausgelöst [SWS_Wdg_00016].

Dieser Text wurde von einer KI auf Basis der AUTOSAR-Spezifikation generiert.

Implementer's Guide folgt (Komplexität I2)

function Wdg_SetTriggerCondition [SWS_Wdg_00155] 📄 PDF

void Wdg_SetTriggerCondition (uint16 timeout);

Sets the timeout value for the trigger counter.

type Wdg_ConfigType [SWS_Wdg_00171] 📄 PDF

Used for pointers to structures holding configuration data provided to the Wdg module initialization routine for configuration of the module and watchdog hardware.

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_Wdg
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_Wdg@rel:R20-11#25509e7b
Content hash
25509e7b
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_WatchdogDriver.pdf#nameddest=SWS_Wdg_00106

Themenkarte

Detailansicht

Wähle in der Gliederung einen Eintrag aus.

Initialisierung und Status

Returns the version information of the module.

void Wdg_GetVersionInfo (Std_VersionInfoType* versioninfo);
Wdg_Init function

Initializes the module.

void Wdg_Init (const Wdg_ConfigType* ConfigPtr);

Dienste

Wdg_SetMode function

Switches the watchdog into the mode Mode. AUTOSAR CP R20 - of Document ID : AUTOSAR_SWS_WatchdogDriver

Std_ReturnType Wdg_SetMode (WdgIf_ModeType Mode);

Sets the timeout value for the trigger counter.

void Wdg_SetTriggerCondition (uint16 timeout);

Typen

Used for pointers to structures holding configuration data provided to the Wdg module initialization routine for configuration of the module and watchdog hardware.