DEENESPTFRRUARHIKOZHNL

Watchdog Driver (Wdg)

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

Руководство по модулюСОЗДАНО ИИ

Обслуживает аппаратный сторожевой таймер в соответствии с ограниченным по времени условием триггера и переключает его режимы работы.
СОЗДАНО ИИ не проверено Модель: claude-opus-5-5 · Усилие: high · Температура: не регулируется · Промпт: 826a1515b822 Происхождение Открытые вопросы (3)
Причинный якорь: R20-11 Действует с R20-11 Заново синтезировано для этой версии спецификации.
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал

Обслуживает аппаратный сторожевой таймер в соответствии с ограниченным по времени условием триггера и переключает его режимы работы.

Драйвер сторожевого таймера управляет внутренним или внешним аппаратным сторожевым таймером по поручению 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 обращается к драйверу только через Watchdog Interface, который выбирает инстанцию с помощью DeviceIndex (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]). Внутренняя подпрограмма обслуживания триггерит и выполняет декремент до тех пор, пока значение счетчика больше нуля. При нуле она больше не триггерит ([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 управляет аппаратной частью сторожевого таймера через компактный синхронный API с четырьмя службами, доступными через Wdg.h: Wdg_Init (идентификатор службы 0x00), Wdg_SetMode (0x01), Wdg_SetTriggerCondition (0x03) и Wdg_GetVersionInfo (0x04). Только Wdg_GetVersionInfo является ревходабельной ([SWS_Wdg_00106], [SWS_Wdg_00107], [SWS_Wdg_00155], [SWS_Wdg_00109]). Интерфейс деинициализации намеренно отсутствует. Если аппаратное обеспечение и окружение допускают отключение, оно выполняется через Wdg_SetMode с режимом OFF [SWS_Wdg_00031].

Службы вызываются базовым программным обеспечением. ECU State Manager вызывает Wdg_Init (SWS EcuM с. 34). Для Watchdog Manager требуются WdgIf_SetMode и WdgIf_SetTriggerCondition (SWS WdgM с. 86). Watchdog Interface отображает эти вызовы на драйвер и выбирает экземпляр с помощью отсчитываемого от нуля DeviceIndex типа uint8. Если сконфигурирован только один драйвер, это отображение не должно приводить к накладным расходам во время выполнения, например за счет использования макросов (SWS WdgIf с. 17). Временной запуск (триггеринг) полностью возложен на драйвер. Watchdog Manager лишь задает условие триггера (SWS WdgM с. 56; [SWS_Wdg_00144]).

На аппаратном уровне экземпляры различаются. Экземпляр для внутреннего сторожевого таймера обращается к аппаратному обеспечению напрямую [SWS_Wdg_00161]. Экземпляр для внешнего сторожевого таймера использует API обработчика или драйвера, например SPI или DIO [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)пересчитать мс в значение счетчика(учитывать текущий режим)ВозвратВозвратUse Case: ModuswechselWdgIf_SetMode(DeviceIndex, WdgMode)Wdg_SetMode(Mode)E_OK / E_NOT_OKВозвращаемое значение Wdg_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]. Таким образом, истекший счетчик невозможно перезагрузить.

Непосредственный триггеринг выполняет внутренняя процедура обслуживания драйвера. Если счетчик триггера больше нуля, она декрементирует его и триггерит аппаратное обеспечение [SWS_Wdg_00134]. Если он достиг нуля, она ничего не делает, и сторожевой таймер срабатывает [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. Каждый режим соответствует статически сконфигурированной настройке, например переключаемому (toggle) или оконному (window) сторожевому таймеру с различными периодами таймаута [SWS_Wdg_00160]. Аппаратно-зависимые параметры для каждого режима содержатся в наборе конфигурации, передаваемом в Wdg_Init [SWS_Wdg_00051]. Тип WdgIf_ModeType модуль Wdg импортирует из 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). Разрешено ли отключать сторожевой таймер, определяет pre-compile параметр 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. Внутреннему драйверу как модулю 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 должен предоставлять тот же объем функций с семантически идентичным API, что и внутренний [SWS_Wdg_00077]. Его исходный код должен быть независим от микроконтроллерной платформы [SWS_Wdg_00055]. Примером из области функциональной безопасности служит внешний оконный сторожевой таймер, подключенный по SPI (EXP SafetyUseCase Рис. 4.1 с. 20).

Структура файлов кода задана не полностью. При необходимости она включает Wdg_Lcfg.c для параметров этапа компоновки (link-time) и Wdg_PBcfg.c для параметров этапа post-build [SWS_Wdg_00079]. Wdg проверяет конфигурацию статически не позднее этапа компиляции [SWS_Wdg_00086]. Выполняется ли код из ROM или RAM, определяется статической конфигурацией [SWS_Wdg_00168]. Для внешнего аппаратного обеспечения Wdg включает параметры доступа, такие как канал SPI или порт DIO, в число своих публикуемых и конфигурационных параметров [SWS_Wdg_00078]. Более новые релизы моделируют это как ссылку выбора WdgExternalContainerRef на группу каналов DIO, последовательность SPI или последовательность I2C. Протокол I2C в R20-11 явно не упоминается (SWS Wdg с. 40). Относительно максимального значения WdgMaxTimeout выполняет проверку Wdg_SetTriggerCondition [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. Нормативный статус имеют исключительно связанные требования; утверждения, помеченные как интерпретация, непосредственно источниками не подтверждены.

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.

СОЗДАНО ИИ не проверено Модель: 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

СОЗДАНО ИИ не проверено Модель: 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]. Поскольку модуль не предоставляет отдельного интерфейса для деинициализации, останов (Shutdown) сторожевого таймера осуществляется посредством вызова с режимом 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.

Руководство разработчика реализации в подготовке (сложность 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#ca82c30f
Content hash
ca82c30f
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_WatchdogDriver.pdf#nameddest=SWS_Wdg_00106

Карта тем

Инициализация и состояние

2

Подробный вид

Выберите элемент в оглавлении.

Инициализация и состояние

Wdg_GetVersionInfo функция

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

Сервисы

Wdg_SetMode функция

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.