Sirve como excepción segura para subprocesos para la señalización y propagación de errores UDS-NRC en clases de diagnóstico.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 6ef167bbc303ProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Sirve como excepción segura para subprocesos para la señalización y propagación de errores UDS-NRC en clases de diagnóstico.
La clase ara::diag::DiagUdsNrcException sirve como excepción estandarizada para la señalización de errores UDS-NRC por parte de clases de diagnóstico de la AUTOSAR Adaptive Platform (AUTOSAR_AP_SWS_Diagnostics §8.12.4 «Class: DiagUdsNrcException»). Al producirse una condición de error correspondiente, se instancia con un ara::core::ErrorCode, se lanza y la aplicación invocadora la captura para el tratamiento de errores. Como restricción esencial, según [SWS_DM_00528], su constructor garantiza una seguridad total frente a excepciones (noexcept), así como seguridad para subprocesos, lo que asegura una creación de objetos fiable incluso en contextos concurrentes.
Contexto
En la AUTOSAR Adaptive Platform, la clase ara::diag::DiagUdsNrcException constituye el tipo de excepción central para las clases de diagnóstico del módulo diag (AUTOSAR_AP_SWS_Diagnostics §8.12.4 «Class: DiagUdsNrcException»). Conforme a la especificación [SWS_DM_00527], define una interfaz de excepción estandarizada en C++ que hereda directamente de la clase base de excepción ara::core::Exception. Su responsabilidad primaria consiste en transportar condiciones de error del contexto de diagnóstico, en particular códigos de respuesta negativa (Negative Response Codes, NRC) del protocolo UDS, como excepciones tipadas a través de la interfaz de programación. La clase interactúa estrechamente con ara::core::ErrorCode, que encapsula el código de error concreto, así como con las capas de aplicación invocadoras que realizan peticiones de diagnóstico y deben capturar eventuales errores ([SWS_DM_00528]). Mediante la declaración en la cabecera ara/diag/diag_uds_nrc_error_domain.h, la excepción está vinculada directamente al dominio de errores UDS-NRC correspondiente ([SWS_DM_00528]).
El ciclo de vida de una instancia de ara::diag::DiagUdsNrcException comienza con su instanciación explícita por parte de una clase de diagnóstico o de una rutina interna de tratamiento de errores. Según [SWS_DM_00528], la clase dispone de un constructor explicit DiagUdsNrcException(ara::core::ErrorCode err) noexcept; que recibe el código de error subyacente como parámetro err. Este constructor está definido expresamente como seguro frente a excepciones (exception safe) y no lanzador (noexcept) ([SWS_DM_00528]), lo que garantiza que no puedan surgir excepciones secundarias en la ruta de error durante la creación del objeto. Además, según [SWS_DM_00528], la creación está clasificada como segura para subprocesos (thread-safe). Tras la creación, la instancia de la excepción se lanza típicamente por valor a través del sistema de ejecución de C++. La propiedad del objeto permanece en el entorno de ejecución durante el desenrollado de pila, hasta que la excepción se vincula y evalúa en un bloque catch correspondiente. Al salir del bloque de tratamiento de excepciones, el ciclo de vida del objeto finaliza mediante su destrucción regular.
Ruta de uso
La ruta de uso típica comprende la detección de un error UDS-NRC, la creación de la excepción y su posterior evaluación por parte de la aplicación:
Un componente de aplicación invoca una función de diagnóstico o una interfaz de servicio de una clase ara::diag.
Durante el procesamiento, la clase de diagnóstico determina que la petición no puede atenderse con éxito y que se presenta un UDS-NRC, tras lo cual genera un ara::core::ErrorCode correspondiente.
Al transferir este código de error, la excepción ara::diag::DiagUdsNrcException se instancia a través de su constructor ([SWS_DM_00528]).
La aplicación invocadora captura la excepción, bien con el tipo exacto como ara::diag::DiagUdsNrcException ([SWS_DM_00527]) o bien de forma polimórfica a través de la clase base ara::core::Exception, y accede a la información de error.
Dado que ara::diag::DiagUdsNrcException es en sí mismo un vehículo para la señalización de errores, los escenarios de fallo se refieren principalmente a la robustez y a la concurrencia durante la generación de excepciones:
Creación robusta de objetos: mediante la especificación como noexcept y exception safe ([SWS_DM_00528]), queda excluido que se lance una excepción secundaria durante la construcción. Esto evita terminaciones anómalas fatales en tiempo de ejecución, como std::terminate, en rutas críticas de tratamiento de errores.
Validez del código de error: como condición previa para la instanciación, debe estar disponible un ara::core::ErrorCode válido ([SWS_DM_00528]). Este procede típicamente del dominio de errores definido por ara/diag/diag_uds_nrc_error_domain.h.
Procesamiento de diagnóstico en paralelo: dado que el constructor está especificado como thread-safe ([SWS_DM_00528]), varios subprocesos pueden generar excepciones de diagnóstico de forma concurrente sin que se produzcan condiciones de carrera durante la inicialización del objeto de excepción.
Esta guía ha sido generada por un sistema de IA a partir de la especificación AUTOSAR R25-11.
Diagrama de clases UML
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Original en alemán