Представляет битово-кодированный байт статуса диагностического события и предоставляет типобезопасные методы проверки битов статуса.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: c0a8a1df20deПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Представляет битово-кодированный байт статуса диагностического события и предоставляет типобезопасные методы проверки битов статуса.
Структура ara::diag::EventStatusByte инкапсулирует битово-кодированный байт статуса отдельного диагностического события в Adaptive Platform [SWS_DM_00644]. Она предоставляет методы для типобезопасного опроса установленных или неустановленных битов статуса, а также составных состояний проверки [SWS_DM_01755]. Поскольку вычисление всегда отражает конкретное событие, оно остается незатронутым вышестоящими комбинациями событий DTC. Являясь легковесным объектом-значением, все операции доступа на чтение безопасны относительно исключений и доступны для параллельного чтения, в то время как изменяющие присваивания должны синхронизироваться извне.
Контекст
Структура ara::diag::EventStatusByte инкапсулирует битово-кодированный байт состояния диагностического события в памяти неисправностей AUTOSAR Adaptive Diagnostic Management [SWS_DM_00644]. Согласно спецификации, EventStatusByte всегда точно представляет состояние назначенного единичного события и не зависит от возможного объединения событий (Event Combination) при расчете (AUTOSAR_AP_SWS_Diagnostics с. 234). К партнерам по взаимодействию в первую очередь относится Diagnostic Management Core (DM), который определяет статус UDS DTC при обновлениях состояния событий [SWS_DM_01109] и уведомляет через сконфигурированные функции обратного вызова [SWS_DM_01110]. Интерпретация: через псевдоним типа ara::diag::EventStatusByteNotifier[SWS_DM_02118] это изменение состояния, вероятно, сообщается зарегистрированным функциям приложения, чтобы они могли реагировать на изменения состояния. Вопрос Q-8fd114acd74569ee (открытый)
Жизненный цикл
Экземпляры ara::diag::EventStatusByte представляют собой легковесные объекты-значения, определенные в заголовке ara/diag/event_types.h[SWS_DM_01753]. Создание осуществляется либо путем копирования, перемещения, либо через вариативный шаблонный конструктор, принимающий произвольное множество устанавливаемых EventStatusBits[SWS_DM_01753]. Поскольку конструкторы и операторы присваивания объявлены как constexpr и noexcept, объекты могут конструироваться уже во время компиляции (AUTOSAR_AP_SWS_Diagnostics §8.47.2.1.1 «Special Member Functions»).
Что касается владения и времени жизни, объект обычно передается нотификаторам по значению (by-value) или по константной ссылке. Конструктор перемещения [SWS_DM_01751] и конструктор копирования [SWS_DM_01752] гарантируют безопасность исключений и потокобезопасность. В отличие от этого, оператор присваивания с копированием [SWS_DM_01750] и оператор присваивания с перемещением [SWS_DM_01749] в спецификации явно классифицированы как непотокобезопасные (not thread-safe). Несколько параллельных операций чтения существующего байта статуса возможны в потокобезопасном режиме, однако изменяющие присваивания разделяемому экземпляру требуют внешней синхронизации.
Путь использования
Типичный сценарий использования заключается в проверке байта статуса, переданного Diagnostic Management, на соответствие определенным диагностическим критериям. Класс предоставляет для этого специализированные методы анализа:
Проверка теста на ошибку: с помощью IsFailedAndTested() можно напрямую проверить, установлены ли как бит kTestFailed, так и kTestFailedThisOperationCycle[SWS_DM_01757]. Интерпретация: это сигнализирует приложению о том, что событие в текущем рабочем цикле уже было протестировано и оценено как неисправное. Вопрос (открытый)
Проверка безошибочного теста: метод IsPassedAndTested() возвращает true, если не установлен ни kTestFailed, ни kTestNotCompletedThisOperationCycle[SWS_DM_01756].
Универсальные проверки битов: через шаблон IsSet(bits...) можно проверить, установлены ли все переданные биты статуса [SWS_DM_01755]. Дополнительно к этому IsNotSet(bits...) проверяет, что ни один из переданных битов не активен [SWS_DM_01754].
При сбросе ошибок с помощью операции clearDTC Diagnostic Management очищает все связанные события независимо от того, настроены ли комбинации событий [SWS_DM_01108]. Следующая диаграмма последовательности иллюстрирует взаимодействие при обновлении статуса и последующем анализе в приложении.
Поскольку ara::diag::EventStatusByte является элементарным контейнером данных, все функции-члены специфицированы как noexcept и полностью безопасны относительно исключений (от [SWS_DM_01749] до [SWS_DM_01757]). Исключения C++ не генерируются, а коды ошибок в форме ara::core::Result не возвращаются.
Таким образом, ошибочные ситуации в приложении возникают не из-за кодов ошибок API, а вследствие семантических неверных интерпретаций или ошибок синхронизации. Типичными рисками являются конкурирующий доступ на запись через операторы присваивания без защиты мьютексом ([SWS_DM_01749], [SWS_DM_01750]) или ошибочное предположение о том, что EventStatusByte модифицируется комбинированными DTC, хотя согласно спецификации он остается строго привязанным к отдельному событию (AUTOSAR_AP_SWS_Diagnostics с. 234).
Настоящее руководство основано на спецификации AUTOSAR Adaptive R25-11 и обобщает свойства класса в соответствии с документом AUTOSAR_AP_SWS_Diagnostics.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал