DEENESPTFRRUARHIKOZHNL

Watchdog Driver (Wdg)

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

모듈 가이드AI 생성

기한이 정해진 트리거 조건에 따라 워치독 하드웨어를 서비스하고 작동 모드를 전환합니다.
AI 생성 미검증 모델: claude-opus-5-5 · 노력: high · 온도: 제어 불가 · 프롬프트: 826a1515b822 출처 열린 질문 (3)
인과 앵커: R20-11 R20-11부터 유효 이 사양 릴리스용으로 새로 합성되었습니다.
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

기한이 정해진 트리거 조건에 따라 워치독 하드웨어를 서비스하고 작동 모드를 전환합니다.

워치독 드라이버는 Watchdog Manager의 위임을 받아 내부 또는 외부 워치독 하드웨어를 제어합니다. Watchdog Manager는 Watchdog Interface를 통해 기한이 정해진 트리거 조건만 설정합니다. 이 조건이 유효한 동안 드라이버는 하드웨어를 자체적으로 트리거하며, 이후 워치독이 만료됩니다 [SWS_Wdg_00144]. Wdg_Init은 구성에서 기본 모드와 타임아웃을 설정하고, Wdg_SetMode는 OFF, SLOW 및 FAST 모드 간을 전환합니다 [SWS_Wdg_00160]. 0의 타임아웃은 거의 즉각적인 리셋을 트리거하며, 워치독 비활성화는 구성에서 허용하는 경우에만 가능합니다.

워치독 드라이버 Wdg는 Wdg_Init, Wdg_SetMode, Wdg_SetTriggerCondition 및 Wdg_GetVersionInfo([SWS_Wdg_00106], [SWS_Wdg_00107], [SWS_Wdg_00155], [SWS_Wdg_00109])의 네 가지 동기 서비스를 통해 워치독 하드웨어를 제어합니다. EcuM은 Wdg_Init을 호출합니다. Watchdog Manager는 DeviceIndex(으)로 인스턴스를 선택하는 Watchdog Interface를 통해서만 드라이버에 접근합니다(SWS WdgIf 17쪽). 내부 인스턴스는 하드웨어에 직접 접근하고, 외부 인스턴스는 SPI 또는 DIO를 통해 접근합니다([SWS_Wdg_00161], [SWS_Wdg_00076]). 둘 다 동일한 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 (선택적) WdgInt->Dem Dem_SetEventStatus SpiDio Spi / Dio (핸들러 또는 드라이버) WdgExt->SpiDio 핸들러/드라이버의 API WdgExt->Det Det_ReportError WdgExt->Dem Dem_SetEventStatus HwExt externe Watchdog-Hardware SpiDio->HwExt 버스 또는 핀 액세스

컨텍스트 다이어그램: EcuM은 Wdg 인스턴스를 초기화하고, WdgM은 WdgIf를 통해 이를 제어합니다. 외부 인스턴스는 Spi/Dio를 통해 하드웨어에 접근합니다. 출처: [SWS_Wdg_00076], [SWS_Wdg_00161], SWS WdgM 86쪽

모듈의 핵심은 트리거 조건입니다. 이는 향후 n 밀리초 동안 워치독을 서비스할 수 있는 권한으로 간주됩니다. 이 조건이 유효한 동안 드라이버가 자체적으로 트리거하며, 이후 워치독이 만료됩니다 [SWS_Wdg_00144]. Wdg_SetTriggerCondition은 카운터를 재설정하고 모드에 따라 밀리초를 카운터 값으로 변환합니다([SWS_Wdg_00136], [SWS_Wdg_00139]). 내부 서비스 루틴은 카운터가 0보다 큰 동안 트리거하고 감소시킵니다. 0이 되면 더 이상 트리거하지 않습니다([SWS_Wdg_00134], [SWS_Wdg_00135]). 0의 타임아웃은 (거의) 즉각적인 리셋을 강제하며, 만료된 카운터는 다시 로드할 수 없습니다 [SWS_Wdg_00140].

트리거 조건을 통한 디커플링된 트리거링WdgMWdgIfWdgTimer-HardwareWatchdog-HardwareUse Case: Triggerbedingung erneuernWdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)트리거 카운터 리셋복귀복귀Use Case: 드라이버에서의 서비스 수행loopje Timer-InterruptInterruptalt트리거 카운터 > 0트리거 카운터 감소Hardware triggern(필요 시 활성화 코드 포함)트리거 카운터 = 0트리거 없음: 워치독 만료및 ECU 리셋 수행

시퀀스 다이어그램: WdgM은 카운터만 다시 로드하고, 트리거링은 드라이버의 타이머 인터럽트가 발생시킵니다. 카운터 값이 0이면 워치독이 만료됩니다. 출처: SWS Wdg 그림 9.2 31쪽, [SWS_Wdg_00134], [SWS_Wdg_00135]

Wdg_Init은 구성 세트 Wdg_ConfigType [SWS_Wdg_00001]에서 기본 모드 및 타임아웃 주기를 설정합니다. Wdg_SetMode은 WDGIF_OFF_MODE, WDGIF_SLOW_MODE 및 WDGIF_FAST_MODE 사이를 전환하며 완전히 전환된 경우에만 E_OK을 반환합니다([SWS_Wdg_00160], [SWS_Wdg_00103]). 초기화 해제 기능은 없습니다. 비활성화는 OFF 모드 [SWS_Wdg_00031]을 통해 수행되며, WdgDisableAllowed이 이를 허용하는 경우에만 가능합니다 [SWS_Wdg_00025].

오류 발생 시 Wdg는 개발 오류 WDG_E_DRIVER_STATE, WDG_E_PARAM_MODE, WDG_E_PARAM_CONFIG 및 WDG_E_PARAM_TIMEOUT을 보고합니다 [SWS_Wdg_00010]. 여기에 프로덕션 오류 WDG_E_MODE_FAILED 및 WDG_E_DISABLE_REJECTED이 추가됩니다([SWS_Wdg_00016], [SWS_Wdg_00179]). 이러한 프로덕션 오류는 Dem_SetEventStatus을 통해 보고될 것으로 보입니다 [SWS_Wdg_00111]. 질문 Q-f0ec41b842ebbdc9 (열림)

워치독 스택에서의 역할: 자체적으로 트리거링을 수행하는 드라이버

워치독 드라이버 Wdg는 모두 Wdg.h을 통해 사용 가능한 네 가지 서비스를 포함하는 작고 동기식인 API를 통해 워치독 하드웨어를 제어합니다: Wdg_Init (서비스 ID 0x00), Wdg_SetMode (0x01), Wdg_SetTriggerCondition (0x03) 및 Wdg_GetVersionInfo (0x04). Wdg_GetVersionInfo만이 재진입 가능합니다([SWS_Wdg_00106], [SWS_Wdg_00107], [SWS_Wdg_00155], [SWS_Wdg_00109]). 초기화 해제를 위한 인터페이스는 의도적으로 제공되지 않습니다. 하드웨어와 환경이 비활성화를 허용하는 경우, OFF 모드를 사용하여 Wdg_SetMode을 통해 수행됩니다 [SWS_Wdg_00031].

서비스들은 베이직 소프트웨어에 의해 호출됩니다. ECU State Manager는 Wdg_Init을 호출합니다(SWS EcuM 34쪽). Watchdog Manager에는 WdgIf_SetMode 및 WdgIf_SetTriggerCondition이 필요합니다(SWS WdgM 86쪽). Watchdog Interface는 이러한 호출을 드라이버에 매핑하고 uint8 타입의 0 기반 DeviceIndex을 통해 인스턴스를 선택합니다. 하나의 드라이버만 구성된 경우, 예를 들어 매크로를 사용하여 이 매핑으로 인한 런타임 오버헤드가 발생하지 않아야 합니다(SWS WdgIf 17쪽). 시간 기반 트리거링은 전적으로 드라이버에 있습니다. Watchdog Manager는 트리거 조건만 설정합니다(SWS WdgM 56쪽; [SWS_Wdg_00144]).

하드웨어와 관련하여 인스턴스 간에 차이가 있습니다. 내부 워치독용 인스턴스는 하드웨어에 직접 접근합니다 [SWS_Wdg_00161]. 외부 워치독용 인스턴스는 SPI 또는 DIO와 같은 핸들러나 드라이버의 API를 사용합니다 [SWS_Wdg_00076]. 선택적으로 Wdg는 개발 오류에 Det_ReportError을, 모니터 상태에 Dem_SetEventStatus을 사용합니다 [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 (선택적) WdgInt->Dem Dem_SetEventStatus SpiDio Spi / Dio (핸들러 또는 드라이버) WdgExt->SpiDio 핸들러/드라이버의 API WdgExt->Det Det_ReportError WdgExt->Dem Dem_SetEventStatus HwExt externe Watchdog-Hardware SpiDio->HwExt 버스 또는 핀 액세스

컨텍스트 다이어그램: Wdg는 EcuM에 의해 초기화되며 WdgM에 의해 WdgIf를 통해서만 간접적으로 제어됩니다. 내부 인스턴스는 하드웨어에 직접 접근하고, 외부 인스턴스는 Spi/Dio를 통해 접근합니다. 출처: [SWS_Wdg_00076], [SWS_Wdg_00161], [SWS_Wdg_00111], SWS WdgM 86쪽

시스템 시작부터 모니터링 작동까지

Wdg_Init은 Wdg_ConfigType 타입의 구성 세트에 대한 포인터를 수신합니다. 이 구조체는 하드웨어에 종속적입니다([SWS_Wdg_00106], [SWS_Wdg_00171]). 이 함수는 드라이버와 하드웨어를 초기화하고 이 세트로부터 기본 모드와 타임아웃 주기를 설정합니다 [SWS_Wdg_00001]. 또한 모든 전역 변수를 초기화합니다 [SWS_Wdg_00100]. 다른 하드웨어 모듈에 영향을 주지 않고 이에 의존하지도 않는 컨트롤러 레지스터만 기록합니다. 공유 레지스터는 상위 시스템 모듈에 의해 초기화됩니다 [SWS_Wdg_00101]. 개발 오류 감지가 활성화된 경우 성공적인 초기화 후 내부 상태가 WDG_UNINIT에서 WDG_IDLE(으)로 변경됩니다 [SWS_Wdg_00019].

사양의 그림 9.1은 역할 분담을 보여줍니다. EcuM은 Wdg를 직접 초기화하고, 그 후 WdgM은 WdgIf를 통해 트리거 조건과 모드를 제어합니다(SWS Wdg 그림 9.1 34쪽). 통합자에게 중요한 점은 Wdg_Init부터 구성된 기본 모드와 초기 타임아웃 주기가 적용된다는 것입니다 [SWS_Wdg_00001]. 이 모드가 OFF가 아닌 경우 제어 인스턴스는 시간 창 내에 트리거 조건을 갱신해야 하며, 그렇지 않으면 워치독이 만료됩니다 [SWS_Wdg_00144].

초기화, 트리거 조건 및 모드 전환EcuMWdgMWdgIfWdgUse Case: InitialisierungWdg_Init(ConfigPtr)전역 변수 및 레지스터 초기화기본 모드 및 타임아웃 주기 설정개발 오류 감지 포함:WDG_UNINIT -> WDG_IDLE복귀Use Case: Triggerbedingung setzenloop시간 창 만료 전에 갱신WdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)ms를 카운터 값으로 변환(현재 모드 고려)복귀복귀Use Case: ModuswechselWdgIf_SetMode(DeviceIndex, WdgMode)Wdg_SetMode(Mode)E_OK / E_NOT_OKWdg_SetMode의 반환값

시퀀스 다이어그램: EcuM에 의한 초기화 후 WdgM이 WdgIf를 통해 트리거 조건을 설정하고 모드를 전환합니다. 출처: SWS Wdg 그림 9.1 34쪽, [SWS_Wdg_00001], [SWS_Wdg_00019], [SWS_Wdg_00139], SWS WdgIf 18쪽

트리거 조건: 서비스를 위한 기한이 정해진 권한

하드웨어는 외부의 개별 트리거 호출에 의해 서비스되지 않습니다. 대신 트리거 조건이 적용됩니다. 조건이 유효한 동안 드라이버는 하드웨어를 자체적으로 서비스합니다. 조건이 무효화되면 트리거링을 중단하고 워치독이 만료됩니다 [SWS_Wdg_00144]. 사양에서는 이 조건을 "향후 n 밀리초 동안 워치독을 서비스할 수 있는 권한"으로 설명합니다. 제어 인스턴스는 이 창 내에서 조건을 갱신해야 합니다 [SWS_Wdg_00144].

Wdg_SetTriggerCondition(uint16 timeout)은 전달된 값에 따라 타임아웃 카운터를 재설정합니다([SWS_Wdg_00155], [SWS_Wdg_00136]). 이 값은 밀리초로 해석됩니다. 드라이버는 이를 내부적으로 카운터 값으로 변환하고 [SWS_Wdg_00138] 이때 현재 모드를 고려합니다 [SWS_Wdg_00139]. 값 0은 허용되며, 트리거링을 (거의) 즉시 종료하여 (거의) 즉각적인 워치독 리셋을 유발합니다. 저장된 카운터가 이미 0이면 함수는 모든 새 값을 무시합니다 [SWS_Wdg_00140]. 따라서 만료된 카운터는 더 이상 다시 로드할 수 없습니다.

실제 트리거링은 드라이버 내부의 서비스 루틴이 처리합니다. 트리거 카운터가 0보다 크면 카운터를 감소시키고 하드웨어를 트리거합니다 [SWS_Wdg_00134]. 카운터가 0에 도달하면 아무 작업도 수행하지 않으며 워치독이 만료됩니다 [SWS_Wdg_00135]. 서비스가 인터럽트 루틴으로 구현되는 경우 인터럽트 프레임은 Wdg_Irq.c에 속합니다 [SWS_Wdg_00079]. 그림 9.2는 WdgIf를 통한 호출과 시간적으로 독립적으로 트리거링을 유발하는 타이머 인터럽트를 보여줍니다(SWS Wdg 그림 9.2 31쪽).

트리거 조건을 통한 디커플링된 트리거링WdgMWdgIfWdgTimer-HardwareWatchdog-HardwareUse Case: Triggerbedingung erneuernWdgIf_SetTriggerCondition(DeviceIndex, Timeout)Wdg_SetTriggerCondition(timeout)트리거 카운터 리셋복귀복귀Use Case: 드라이버에서의 서비스 수행loopje Timer-InterruptInterruptalt트리거 카운터 > 0트리거 카운터 감소Hardware triggern(필요 시 활성화 코드 포함)트리거 카운터 = 0트리거 없음: 워치독 만료및 ECU 리셋 수행

시퀀스 다이어그램: WdgM은 트리거 카운터만 다시 로드하고 트리거링 자체는 드라이버의 타이머 인터럽트가 발생시킵니다. 카운터 값이 0이면 트리거링이 생략되고 워치독이 만료됩니다. 출처: SWS Wdg 그림 9.2 31쪽, [SWS_Wdg_00134], [SWS_Wdg_00135], [SWS_Wdg_00136], [SWS_Wdg_00093]

triggerbedingung start Wdg_SetTriggerCondition(timeout) pruefMax 개발 오류 감지 활성 및 timeout > WdgMaxTimeout인가? start->pruefMax fehler WDG_E_PARAM_TIMEOUT 보고 카운터를 다시 로드하지 않음 pruefMax->fehler 예 pruefNull 저장된 카운터 = 0인가? pruefMax->pruefNull 아니요 ende 호출자로 복귀 fehler->ende ignorieren 아무 작업도 수행하지 않음 (전달된 값 무시) pruefNull->ignorieren 예 umrechnen 밀리초를 카운터 값으로 변환 (현재 모드 고려) pruefNull->umrechnen 아니요 ignorieren->ende laden 타임아웃 카운터 리셋 umrechnen->laden pruefT0 timeout = 0? laden->pruefT0 reset 트리거링이 (거의) 즉시 종료됨 -> ECU의 워치독 리셋 pruefT0->reset 예 weiter 카운터 > 0인 동안 서비스 루틴이 트리거함 pruefT0->weiter 아니요 reset->ende weiter->ende

액티비티 다이어그램: Wdg_SetTriggerCondition은 너무 큰 타임아웃을 버리고, 이미 만료된 카운터에 대한 새 값을 무시하며, 그렇지 않으면 모드에 따라 카운터 값으로 변환합니다. 해석: 사양에서는 두 검사의 순서를 정의하지 않습니다. 출처: [SWS_Wdg_00146], [SWS_Wdg_00140], [SWS_Wdg_00138], [SWS_Wdg_00139], SWS Wdg 29쪽

작동 모드 OFF, SLOW 및 FAST

Wdg_SetMode은 드라이버와 하드웨어를 현재 모드에서 WDGIF_OFF_MODE, WDGIF_SLOW_MODE 또는 WDGIF_FAST_MODE(으)로 전환합니다. 각 모드는 서로 다른 타임아웃 주기를 가진 토글 또는 윈도우 워치독과 같이 정적으로 구성된 설정에 해당합니다 [SWS_Wdg_00160]. 모드별 하드웨어 고유 파라미터는 Wdg_Init에 전달되는 구성 세트에 있습니다 [SWS_Wdg_00051]. Wdg는 WdgIf_ModeType 타입을 WdgIf.h에서 가져옵니다 [SWS_Wdg_00105]. 이전 구성 모델에는 이에 대한 컨테이너 WdgSettingsFast, WdgSettingsSlow 및 WdgSettingsOff와 WdgDefaultMode이 표시되어 있습니다(ECUC-Parameter 그림 5.21 377쪽).

Wdg_SetMode은(는) 전환이 완전히 실행되고 드라이버 및 하드웨어의 모든 매개변수가 새 값을 가질 때만 E_OK을(를) 반환합니다 [SWS_Wdg_00103]. WdgIf는 이 반환값을 변경 없이 그대로 전달합니다 (SWS WdgIf 18쪽). 워치독의 비활성화(끄기)가 허용되는지 여부는 프리컴파일 매개변수 WdgDisableAllowed에 의해 결정됩니다. 이 값이 OFF(으)로 설정된 경우, 비활성화하는 기본 모드를 통한 초기화는 거부됩니다 [SWS_Wdg_00025]. 오류 WDG_E_DISABLE_REJECTED은(는) 해당 설명에 따르면 상응하는 모드 전환도 포괄합니다 [SWS_Wdg_00179].

modi start OFF WDGIF_OFF_MODE start->OFF Wdg_Init (기본 모드) 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 비활성화가 허용된 경우에만 SLOW->FAST Wdg_SetMode FAST->OFF Wdg_SetMode 비활성화가 허용된 경우에만 FAST->SLOW Wdg_SetMode

상태 다이어그램: Wdg_Init은(는) 구성된 기본 모드를 설정하고, 이후 Wdg_SetMode이(가) 세 가지 모드 간을 전환합니다. OFF 모드는 WdgDisableAllowed이(가) 허용하는 경우에만 도달할 수 있습니다. 출처: [SWS_Wdg_00160], [SWS_Wdg_00001], [SWS_Wdg_00025], [SWS_Wdg_00179], [SWS_Wdg_00031]

내부 상태, 배타적 영역 및 활성화 코드

개발 오류 감지가 활성화된 경우 Wdg는 내부 상태를 유지합니다: 성공적인 초기화 전까지는 WDG_UNINIT, 그 이후에는 WDG_IDLE [SWS_Wdg_00019]. Wdg_SetMode 및 서비스 루틴은 실행되는 동안 WDG_BUSY(으)로 설정합니다. 반환 전 마지막 동작으로 다시 WDG_IDLE(으)로 설정합니다 ([SWS_Wdg_00018], [SWS_Wdg_00052]). 둘 다 사전에 상태가 WDG_IDLE인지 확인합니다. 그렇지 않으면 모드 전환 또는 트리거링이 수행되지 않으며 WDG_E_DRIVER_STATE이(가) 보고됩니다 ([SWS_Wdg_00017], [SWS_Wdg_00035]). 이를 통해 초기화 전의 호출뿐만 아니라 모드 전환과 트리거링 간의 중복도 감지됩니다.

모드 전환 시 또는 트리거 루틴 등에서 데이터 일관성을 위해 인터럽트를 비활성화해야 하는 경우, 가급적 BSW 스케줄러의 배타적 영역(Exclusive Area)을 통해 수행해야 합니다. 내부 드라이버는 MCAL 모듈로서 인터럽트를 직접 비활성화할 수도 있습니다 [SWS_Wdg_00040]. BSW 분배 가이드라인은 그 배경을 다음과 같이 설명합니다: MCAL 드라이버에서는 Main Function, 서비스 API 및 ISR이 자체 실행 컨텍스트에서 공유 주변장치 레지스터에 접근할 수 있습니다 (BSW Distribution Guide 36쪽).

일부 하드웨어는 구성 가능하거나 변경 가능한 활성화 코드를 요구합니다. 이 경우 Wdg는 코드를 내부적으로 관리하고 매번 올바른 값을 전달합니다. 그러면 하드웨어는 다음에 예상되는 코드로 내부 변수를 업데이트합니다 [SWS_Wdg_00093]. 트리거 주기는 이러한 업데이트가 확실히 일어날 수 있도록 선택되어야 합니다 [SWS_Wdg_00094]. 구성 가능한 초기 코드는 구성 세트에 속합니다. 하드웨어에 고정되어 지정된 코드의 경우 이 요구사항은 생략됩니다 [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 또는 서비스 루틴 시작 BUSY->IDLE 복귀 전 마지막 연산 BUSY->BUSY weiterer Aufruf: WDG_E_DRIVER_STATE, kein Wechsel/kein Triggern

상태 다이어그램: 개발 오류 감지가 활성화된 경우 상태 WDG_UNINIT, WDG_IDLE 및 WDG_BUSY이(가) 적용됩니다. WDG_IDLE 이외에서의 호출은 WDG_E_DRIVER_STATE(으)로 거부됩니다. 출처: [SWS_Wdg_00019], [SWS_Wdg_00017], [SWS_Wdg_00018], [SWS_Wdg_00035], [SWS_Wdg_00052]

내부 및 외부 워치독: 인스턴스, 파일, 구성

ECU는 내부 워치독용과 외부 워치독용 등 여러 Wdg 인스턴스를 가질 수 있습니다. 이 경우 API 이름과 인스턴스별 타입 이름 [SWS_Wdg_00172] 및 소스 코드와 헤더 파일 이름이 SRS_BSW_00347에 따라 확장됩니다 ([SWS_Wdg_00169], [SWS_Wdg_00170]). 그림 1은 Wdg<xxx>.h 및 Wdg_<xxx>PBcfg.c와(과) 같은 플레이스홀더를 포함하는 파일 구조를 보여줍니다 (SWS Wdg 그림 1 11쪽). 외부 Wdg는 내부 Wdg와 의미상 동일한 API를 통해 동일한 기능 범위를 제공해야 합니다 [SWS_Wdg_00077]. 해당 소스 코드는 마이크로컨트롤러 플랫폼과 독립적이어야 합니다 [SWS_Wdg_00055]. 안전 분야의 한 예로는 SPI를 통해 연결되는 외부 윈도우 워치독이 있습니다 (EXP SafetyUseCase 그림 4.1 20쪽).

코드 파일 구조가 완전히 규정되어 있지는 않습니다. 필요한 경우 링크 타임 매개변수를 위한 Wdg_Lcfg.c 및 포스트 빌드 매개변수를 위한 Wdg_PBcfg.c을(를) 포함합니다 [SWS_Wdg_00079]. Wdg는 늦어도 컴파일 시점에 구성을 정적으로 검사합니다 [SWS_Wdg_00086]. 코드가 ROM에서 실행되는지 RAM에서 실행되는지는 정적 구성에 의해 결정됩니다 [SWS_Wdg_00168]. 외부 하드웨어의 경우 Wdg는 SPI 채널 또는 DIO 포트와 같은 액세스 매개변수를 자체 공개 매개변수 및 구성 매개변수에 포함합니다 [SWS_Wdg_00078]. 최신 릴리스에서는 이를 DIO 채널 그룹, SPI 시퀀스 또는 I2C 시퀀스에 대한 선택 참조 WdgExternalContainerRef(으)로 모델링합니다. I2C는 R20-11에서 명시적으로 언급되지 않습니다 (SWS Wdg 40쪽). Wdg_SetTriggerCondition은(는) 최댓값 WdgMaxTimeout에 대해 검사합니다 [SWS_Wdg_00146]. 공개 정보 모델에는 이 외에도 WdgMinTimeout 및 WdgResolution이(가) 포함됩니다 (ECUC-Parameter 그림 5.22 380쪽).

오류가 발생한 경우의 동작

Wdg는 주로 개발 오류 감지가 활성화된 경우에만 검사되는 개발 오류를 확장 프로덕션 오류와 구별합니다. 오류 코드는 다음과 같이 정의되어 있습니다 [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, 구성 세트의 잘못된 선택)

개발 오류의 경우 Wdg는 선택적으로 Det_ReportError을(를) 요청합니다 [SWS_Wdg_00111]. 개별 서비스의 오류 사례:

  • 초기화: 구성 세트가 허용 한계를 벗어나면 WDG_E_PARAM_CONFIG(으)로 초기화가 수행되지 않습니다 [SWS_Wdg_00090]. WdgDisableAllowed==OFF이(가) 적용됨에도 기본 모드가 워치독을 비활성화하는 경우, WDG_E_DISABLE_REJECTED(으)로 초기화가 수행되지 않습니다 [SWS_Wdg_00025].
  • 모드 전환: 잘못된 상태는 WDG_E_DRIVER_STATE(으)로 이어집니다 [SWS_Wdg_00017]. 범위를 벗어난 모드 또는 허용되지 않는 하드웨어 설정은 WDG_E_PARAM_MODE(으)로 이어집니다 ([SWS_Wdg_00091], [SWS_Wdg_00092]). 세 가지 경우 모두 전환이 발생하지 않으며, 함수는 E_NOT_OK을(를) 반환합니다. 일관되지 않은 설정이나 시간 조건 위반 등으로 인해 전환 자체가 실패하는 경우, 함수는 E_NOT_OK을(를) 반환하고 WDG_E_MODE_FAILED을(를) 보고합니다 [SWS_Wdg_00016].
  • 트리거 조건: 타임아웃이 WdgMaxTimeout을(를) 초과하면 카운터가 다시 로드되지 않고 WDG_E_PARAM_TIMEOUT이(가) 보고됩니다 [SWS_Wdg_00146].
  • 버전 조회: 유효하지 않은 포인터는 WDG_E_PARAM_POINTER에 해당합니다 [SWS_Wdg_00010]. Wdg_GetVersionInfo에 대한 널 포인터 검사는 최신 릴리스의 문서 위치에서 설명합니다 (SWS Wdg 30쪽).

프로덕션 오류 WDG_E_MODE_FAILED 및 WDG_E_DISABLE_REJECTED은(는) 초기화 및 모드 전환과 관련됩니다. 이들의 모니터링 주기는 상위 계층에 따라 달라집니다 ([SWS_Wdg_00178], [SWS_Wdg_00179]). 모드 설정 또는 비활성화가 실패하면 FAILED로 보고되고, 성공하면 PASSED로 보고됩니다 ([SWS_Wdg_00180], [SWS_Wdg_00181], [SWS_Wdg_00182], [SWS_Wdg_00183]). 이러한 보고는 선택적으로 요청되는 Dem_SetEventStatus을(를) 통해 이루어질 것으로 보입니다 [SWS_Wdg_00111]. 질문 (열림) 가장 중대한 경우는 의도적으로 반환값으로 나타나지 않습니다: 트리거 조건이 누락되거나 0으로 설정되면 워치독이 만료되고 ECU가 리셋됩니다 ([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 아니요 pruefMode Mode가 허용 범위 내에 있는가? pruefZustand->pruefMode 예 ende 호출자로 복귀 fehlerZustand->ende pruefGrenzen 모드의 하드웨어 설정이 한계값 이내인가? pruefMode->pruefGrenzen 예 fehlerMode WDG_E_PARAM_MODE melden kein Wechsel, E_NOT_OK pruefMode->fehlerMode 아니요 pruefGrenzen->fehlerMode 아니요 busy Zustand WDG_BUSY pruefGrenzen->busy 예 fehlerMode->ende umschalten 드라이버 및 하드웨어를 새 모드로 전환 busy->umschalten pruefErfolg 전환이 완료되었고 성공적인가? umschalten->pruefErfolg ok WDG_E_MODE_FAILED: PASSED E_OK 반환 pruefErfolg->ok 예 nok WDG_E_MODE_FAILED: FAILED E_NOT_OK 반환 pruefErfolg->nok 아니요 idle Zustand WDG_IDLE (letzte Operation) ok->idle nok->idle idle->ende

액티비티 다이어그램: Wdg_SetMode은(는) 상태, 모드 및 하드웨어 한계를 확인하고 전환한 뒤 반환값 및 WDG_E_MODE_FAILED을(를) 통해 결과를 보고합니다. 해석: 검사 순서는 규범적으로 정의되어 있지 않습니다. 출처: [SWS_Wdg_00017], [SWS_Wdg_00091], [SWS_Wdg_00092], [SWS_Wdg_00016], [SWS_Wdg_00103], [SWS_Wdg_00018], [SWS_Wdg_00180], [SWS_Wdg_00181]

더 자세한 증거

AUTOSAR Classic R20-11 사양서 발췌본을 기반으로 AI가 생성한 모듈 가이드. 링크된 요구사항만 규범적 효력을 가지며, 해석으로 표시된 진술은 출처에 의해 직접 뒷받침되지 않습니다.

Watchdog Driver (Wdg)

Hardware watchdog timer servicing and mode configuration.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

함수 Wdg_Init [SWS_Wdg_00106] 📄 PDF

void Wdg_Init (const Wdg_ConfigType* ConfigPtr);

Initializes the module.

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 9b3504b00b97 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

사용 및 절차

동기 함수 Wdg_Init은(는) 드라이버 모듈 Wdg 및 워치독 하드웨어 [SWS_Wdg_00106]을(를) 초기화하는 데 사용됩니다 [SWS_Wdg_00001]. 매개변수 ConfigPtr을(를) 통해 구성 세트에 대한 포인터가 전달됩니다 [SWS_Wdg_00106]. 이 함수는 모듈의 모든 전역 변수를 초기화하고 사전 구성된 기본 워치독 모드 및 초기 타임아웃 주기를 설정합니다 [SWS_Wdg_00001], [SWS_Wdg_00100].

하드웨어 제어 및 제약 사항

Wdg_Init은(는) 워치독 제어를 위한 제어기 레지스터 중 다른 하드웨어 모듈에 영향을 주지 않거나 이들에 종속되지 않는 레지스터만을 구성합니다 [SWS_Wdg_00101]. 모듈 간 종속성이 있는 레지스터는 대신 공통 시스템 모듈에 의해 초기화됩니다 [SWS_Wdg_00101]. 이 함수는 재진입이 불가능하며 반환값을 제공하지 않습니다 [SWS_Wdg_00106].

오류 처리

초기화를 수행하기 전에 특정 검사가 이루어집니다:

  • 개발 오류 감지(Development Error Detection)가 활성화되어 있는 경우 구성 세트의 하드웨어별 내용이 허용 한도 내에 있는지 검사하며, 오류가 있는 경우 함수는 중단되고 WDG_E_PARAM_CONFIG을(를) 보고합니다 [SWS_Wdg_00090].
  • 워치독 비활성화가 허용되지 않는데(WdgDisableAllowed == OFF), 구성된 기본 모드가 워치독을 비활성화하는 경우 초기화가 중단되고 오류 WDG_E_DISABLE_REJECTED이(가) 발생합니다 [SWS_Wdg_00025].

이 사용 지침은 명세 요구사항을 기반으로 자동 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I2)

함수 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

AI 생성 미검증 모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: b7aa0ec55f3d 출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문

사용

동기식 및 재진입 불가 함수 [SWS_Wdg_00107]은(는) 워치독 드라이버 및 기반 하드웨어를 정적으로 구성된 세 가지 모드 중 하나인 WDGIF_OFF_MODE, WDGIF_SLOW_MODE 또는 WDGIF_FAST_MODE(으)로 전환합니다 [SWS_Wdg_00160]. 모듈이 초기화 해제를 위한 별도의 인터페이스를 제공하지 않으므로, 하드웨어가 이를 지원하는 경우 모드 WDGIF_OFF_MODE 호출을 통해 워치독 셧다운이 수행됩니다 [SWS_Wdg_00031]. 모든 파라미터가 성공적으로 완전히 적용되면 함수는 E_OK을(를) 반환합니다 [SWS_Wdg_00103].

상태 및 동시성

재진입성이 없으므로 동시 호출을 수행해서는 안 됩니다. 오류 감지가 활성화된 경우 함수는 모듈이 상태 WDG_IDLE에 있는지 확인합니다 [SWS_Wdg_00017]. 실행 중에는 상태를 WDG_BUSY(으)로 설정하고 반환 직전의 마지막 작업이 되어서야 비로소 다시 WDG_IDLE(으)로 변경합니다 [SWS_Wdg_00018].

오류 처리

오류 발생 시 E_NOT_OK이(가) 반환됩니다:

  • Mode의 값이 유효하지 않거나 하드웨어별 구성이 한계를 벗어난 경우 함수는 오류 WDG_E_PARAM_MODE을(를) 보고합니다 [SWS_Wdg_00091], [SWS_Wdg_00092].
  • 모듈이 상태 WDG_IDLE에 있지 않은 경우 전환은 WDG_E_DRIVER_STATE(으)로 중단됩니다 [SWS_Wdg_00017].
  • 설정의 불일치나 타이밍 사양 위반 등으로 인해 하드웨어가 해당 모드를 취할 수 없는 경우 Extended Production Error WDG_E_MODE_FAILED이(가) 트리거됩니다 [SWS_Wdg_00016].

이 텍스트는 AUTOSAR 사양을 기반으로 AI에 의해 생성되었습니다.

구현자 가이드 준비 중 (복잡도 I2)

함수 Wdg_SetTriggerCondition [SWS_Wdg_00155] 📄 PDF

void Wdg_SetTriggerCondition (uint16 timeout);

Sets the timeout value for the trigger counter.

타입 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#5a6d6e87
Content hash
5a6d6e87
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_WatchdogDriver.pdf#nameddest=SWS_Wdg_00106

주제 맵

상세 보기

개요에서 항목을 선택하세요.

초기화 및 상태

Returns the version information of the module.

void Wdg_GetVersionInfo (Std_VersionInfoType* versioninfo);
Wdg_Init 함수

Initializes the module.

void Wdg_Init (const Wdg_ConfigType* ConfigPtr);

서비스

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);

타입

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