Служит потокобезопасным исключением для сигнализации и передачи ошибок UDS NRC в классах диагностики.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 6ef167bbc303ПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Служит потокобезопасным исключением для сигнализации и передачи ошибок UDS NRC в классах диагностики.
Класс ara::diag::DiagUdsNrcException служит стандартизированным исключением для сигнализации об ошибках UDS NRC классами диагностики AUTOSAR Adaptive Platform (AUTOSAR_AP_SWS_Diagnostics §8.12.4 «Class: DiagUdsNrcException»). При возникновении соответствующего ошибочного условия он инстанцируется с ara::core::ErrorCode, генерируется и перехватывается вызывающим приложением для обработки ошибки. В качестве существенного граничного условия его конструктор согласно [SWS_DM_00528] гарантирует полную исключительную безопасность (noexcept), а также потокобезопасность, обеспечивая надежное создание объектов даже в контекстах параллельного выполнения.
Контекст
Класс ara::diag::DiagUdsNrcException образует в AUTOSAR Adaptive Platform центральный тип исключения для классов диагностики модуля diag (AUTOSAR_AP_SWS_Diagnostics §8.12.4 «Class: DiagUdsNrcException»). Согласно спецификации [SWS_DM_00527], он определяет стандартизированный интерфейс исключений C++, который напрямую наследуется от базового класса исключений ara::core::Exception. Его основная обязанность заключается в передаче ошибочных условий из контекста диагностики, в частности отрицательных кодов ответа (Negative Response Codes, NRC) протокола UDS, в виде типизированных исключений через программный интерфейс. При этом класс тесно взаимодействует с ara::core::ErrorCode, инкапсулирующим конкретный код ошибки, а также с вызывающими слоями приложения, которые отправляют диагностические запросы и должны перехватывать возможные ошибки ([SWS_DM_00528]). Благодаря объявлению в заголовочном файле ara/diag/diag_uds_nrc_error_domain.h исключение непосредственно связано с соответствующим доменом ошибок UDS NRC ([SWS_DM_00528]).
Жизненный цикл экземпляра ara::diag::DiagUdsNrcException начинается с его явного инстанцирования классом диагностики или внутренней подпрограммой обработки ошибок. Согласно [SWS_DM_00528], класс имеет конструктор explicit DiagUdsNrcException(ara::core::ErrorCode err) noexcept;, принимающий лежащий в основе код ошибки в качестве параметра err. Этот конструктор явно определен как исключитель-безопасный (exception safe) и не генерирующий исключений (noexcept) ([SWS_DM_00528]), что гарантирует невозможность возникновения вторичных исключений при создании объекта на пути ошибки. Кроме того, создание классифицировано согласно [SWS_DM_00528] как потокобезопасное (thread-safe). После создания экземпляр исключения обычно генерируется по значению через систему времени выполнения C++. Владение объектом во время раскрутки стека остается за средой выполнения, пока исключение не будет связано и обработано в соответствующем блоке catch. С выходом из блока обработки исключения жизненный цикл объекта завершается штатным уничтожением.
Путь использования
Типичный путь использования включает распознавание ошибки UDS NRC, создание исключения и его последующую обработку приложением:
Компонент приложения вызывает функцию диагностики или сервисный интерфейс класса ara::diag.
Класс диагностики в ходе обработки устанавливает, что запрос не может быть успешно обслужен и имеет место UDS NRC, после чего создает соответствующий ara::core::ErrorCode.
С передачей этого кода ошибки исключение ara::diag::DiagUdsNrcException инстанцируется через свой конструктор ([SWS_DM_00528]).
Вызывающее приложение перехватывает исключение либо точно по типу как ara::diag::DiagUdsNrcException ([SWS_DM_00527]), либо полиморфно через базовый класс ara::core::Exception и обращается к информации об ошибке.
Поскольку ara::diag::DiagUdsNrcException сам по себе является средством сигнализации об ошибках, сценарии сбоев относятся прежде всего к надежности и параллелизму при создании исключения:
Надежное создание объектов: благодаря спецификации как noexcept и exception safe ([SWS_DM_00528]) исключено, что при конструировании будет сгенерировано вторичное исключение. Это предотвращает фатальные аварийные завершения во время выполнения, такие как std::terminate, в критических путях обработки ошибок.
Действительность кода ошибки: в качестве предусловия для инстанцирования должен быть доступен валидный ara::core::ErrorCode ([SWS_DM_00528]). Обычно он происходит из домена ошибок, определенного ara/diag/diag_uds_nrc_error_domain.h.
Параллельная обработка диагностики: поскольку конструктор специфицирован как thread-safe ([SWS_DM_00528]), несколько потоков могут параллельно создавать диагностические исключения без возникновения состояний гонки при инициализации объекта исключения.
Данное руководство было сгенерировано системой ИИ на основе спецификации AUTOSAR R25-11.
UML-диаграмма классов
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал