Sert d'exception sûre vis-à-vis des threads pour la signalisation et la transmission d'erreurs NRC UDS dans les classes de diagnostic.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 6ef167bbc303ProvenanceQuestions ouvertes (2)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Sert d'exception sûre vis-à-vis des threads pour la signalisation et la transmission d'erreurs NRC UDS dans les classes de diagnostic.
La classe ara::diag::DiagUdsNrcException sert d'exception standardisée pour la signalisation d'erreurs NRC UDS par les classes de diagnostic de l'AUTOSAR Adaptive Platform (AUTOSAR_AP_SWS_Diagnostics §8.12.4 « Class: DiagUdsNrcException »). Lors de la survenance d'une condition d'erreur correspondante, elle est instanciée avec un ara::core::ErrorCode, levée et interceptée par l'application appelante pour le traitement d'erreur. Comme contrainte essentielle, son constructeur garantit selon [SWS_DM_00528] une sécurité complète vis-à-vis des exceptions (noexcept) ainsi que la sécurité vis-à-vis des threads, garantissant ainsi une création d'objet fiable même dans des contextes concurrents.
Contexte
Dans l'AUTOSAR Adaptive Platform, la classe ara::diag::DiagUdsNrcException constitue le type d'exception central pour les classes de diagnostic du module diag (AUTOSAR_AP_SWS_Diagnostics §8.12.4 « Class: DiagUdsNrcException »). Conformément à la spécification [SWS_DM_00527], elle définit une interface d'exception C++ standardisée qui hérite directement de la classe d'exception de base ara::core::Exception. Sa responsabilité première consiste à transporter les conditions d'erreur issues du contexte de diagnostic, en particulier les codes de réponse négatifs (Negative Response Codes, NRC) du protocole UDS, sous forme d'exceptions typées via l'interface de programmation d'application. La classe interagit étroitement avec ara::core::ErrorCode, qui encapsule le code d'erreur concret, ainsi qu'avec les couches d'application appelantes qui effectuent des requêtes de diagnostic et doivent intercepter les erreurs éventuelles ([SWS_DM_00528]). De par sa déclaration dans l'en-tête ara/diag/diag_uds_nrc_error_domain.h, l'exception est directement liée au domaine d'erreur NRC UDS correspondant ([SWS_DM_00528]).
Le cycle de vie d'une instance de ara::diag::DiagUdsNrcException commence par son instanciation explicite par une classe de diagnostic ou une routine interne de traitement d'erreurs. Selon [SWS_DM_00528], la classe dispose d'un constructeur explicit DiagUdsNrcException(ara::core::ErrorCode err) noexcept; qui reçoit le code d'erreur sous-jacent en tant que paramètre err. Ce constructeur est expressément défini comme sûr vis-à-vis des exceptions (exception safe) et ne levant pas d'exceptions (noexcept) ([SWS_DM_00528]), ce qui garantit qu'aucune exception secondaire ne peut survenir lors de la création de l'objet dans le chemin d'erreur. De plus, la création est classée comme thread-safe (thread-safe) selon [SWS_DM_00528]. Après sa création, l'instance d'exception est typiquement levée par valeur via le système d'exécution C++. La propriété de l'objet reste auprès de l'environnement d'exécution pendant le déroulement de la pile, jusqu'à ce que l'exception soit liée et évaluée dans un bloc catch correspondant. La sortie du bloc de traitement d'exception met fin au cycle de vie de l'objet par destruction régulière.
Parcours d'utilisation
Le chemin d'utilisation typique comprend la détection d'une erreur NRC UDS, la création de l'exception et son évaluation consécutive par l'application :
Une application composant appelle une fonction de diagnostic ou une interface de service d'une classe ara::diag.
La classe de diagnostic constate lors du traitement que la requête ne peut pas être servie avec succès et qu'un NRC UDS est présent, à la suite de quoi elle génère un ara::core::ErrorCode correspondant.
L'exception ara::diag::DiagUdsNrcException est instanciée via son constructeur en lui transmettant ce code d'erreur ([SWS_DM_00528]).
L'application appelante intercepte l'exception soit de manière typée exacte sous forme de ara::diag::DiagUdsNrcException ([SWS_DM_00527]), soit de manière polymorphe via la classe de base ara::core::Exception, et accède aux informations d'erreur.
Comme ara::diag::DiagUdsNrcException est elle-même un vecteur de signalisation d'erreurs, les scénarios d'erreur concernent avant tout la robustesse et la concurrence lors de la création de l'exception :
Création robuste d'objets : Grâce à la spécification en tant que noexcept et exception safe ([SWS_DM_00528]), il est exclu qu'une exception secondaire soit levée lors de la construction. Cela empêche les arrêts d'exécution fatals tels que std::terminate dans les chemins critiques de traitement d'erreurs.
Validité du code d'erreur : Un ara::core::ErrorCode valide doit être disponible comme précondition pour l'instanciation ([SWS_DM_00528]). Celui-ci est typiquement issu du domaine d'erreur défini par ara/diag/diag_uds_nrc_error_domain.h.
Traitement de diagnostic parallèle : Le constructeur étant spécifié comme thread-safe ([SWS_DM_00528]), plusieurs threads peuvent créer des exceptions de diagnostic de manière concurrente sans qu'il ne se produise de situations de compétition (race conditions) lors de l'initialisation de l'objet d'exception.
Ce guide a été généré par un système d'IA sur la base de la spécification AUTOSAR R25-11.
Diagramme de classes UML
Hohle Dreieckspfeile = Vererbung (zeigt zur Basisklasse); Klicken öffnet die jeweilige Klassenseite.
gemini-3.8-flash-low· 2026-10-13 · Original allemand