SW/Autosar

Adaptive Autosar Core Types (핵심 유형)

얇은생각 2018. 11. 23. 19:12
반응형

핵심 유형은 공용 인터페이스의 일부로 여러 기능 클러스터가 사용하는 공통 클래스 및 기능을 정의합니다. 핵심 유형을 정의하는 근거 중 하나는 인터페이스 정의에 자주 사용되는 공통의 복잡한 데이터 유형을 포함하는 것이었습니다.


Error Handling

오류 처리는 모든 소프트웨어 개발에 중요한 주제입니다. 안전이 중요한 소프트웨어의 경우 생명이 그 소프트웨어에 의존 할 수 있기 때문에 더욱 중요합니다. 그러나 안전성이 중요한 소프트웨어를 개발하기 위한 현재 표준은 특히 C ++ 예외와 관련하여 빌드 도구 체인에 상당한 제한을 부과합니다. ASIL 응용 프로그램의 경우 C ++ 예외를 사용하는 것이 일반적으로 불가능합니다. ASIL 인증 C ++ 컴파일러의 예외 지원이 부족하기 때문입니다.

 

Adaptive Platform은 C ++ 예외없이 오류 처리를 가능하게하는 개념을 도입하고이를 지원하기 위해 여러 가지 C ++ 데이터 유형을 정의합니다.

 

애플리케이션 프로그래머의 관점에서 볼 때,이 개념을 구현하는 중심 유형은 ara :: core :: ErrorCode와 ara :: core :: Result입니다.

 


ErrorCode 

ara :: core :: ErrorCode의 인스턴스는 소프트웨어 내의 특정 오류 조건을 나타냅니다. 이것은 std :: error_code와 비슷하지만 중요한 측면이 다릅니다.

 

ErrorCode는 항상 열거 값 (유형 - 유형으로 지워짐)과 오류 도메인에 대한 참조를 포함합니다. 열거 형 값은 특정 유형의 오류를 설명하고 오류 도메인 참조는 해당 오류가 적용되는 컨텍스트를 정의합니다. 추가 선택적 구성원은 사용자 정의 메시지 문자열과 공급 업체 정의 보조 오류 설명 값입니다.

 

adaptive 플랫폼에서 각 Functional Cluster는 하나 이상의 오류 도메인을 정의합니다. 예를 들어, Functional Cluster "Core Types"는 POSIX.1에 정의 된 오류 코드를 포함하는 오류 도메인 "Posix"를 정의합니다. 이것들은 C ++ 11 표준의 std :: errc와 같습니다.

 

 

Result

 Class ara :: core :: Result는 값 또는 오류를 포함하는 래퍼 유형입니다. 템플리트화 된 특성으로 인해 값과 오류는 모두 유형이 될 수 있습니다. 그러나 오류 유형의 기본값은 ara :: core :: ErrorCode이며이 할당은 Adaptive Platform 전체에서 유지되어야 합니다.

 

오류 유형에 기본값이 있기 때문에 대부분의 ara :: core :: Result 선언은 int 유형 또는 ara:: core :: ErrorCode 형식을 포함하는 결과 유형에 대해 ara :: core :: Result <int> 값 유형 만 지정하면됩니다.

 

포함된 값 또는 오류는 Result :: Value 또는 Result :: Error 멤버 함수를 통해 액세스 할 수 있습니다. Result 인스턴스가 값 또는 오류를 각각 포함하는 경우에만 이러한 액세스 함수가 ​​호출되도록 하는 것은 호출자의 책임입니다. Result의 내용 유형, 즉 값 또는 오류는 Result :: HasValue에 의해 질의 될 수 있습니다. 이러한 멤버 함수는 예외를 throw하지 않으므로 C ++ 예외를 지원하지 않는 환경에서 사용할 수 있습니다.

 

위에 설명 된 예외가 없는 워크 플로우 외에도 ara :: core :: Result 클래스는 ara :: core :: Result :: ValueOrThrow를 호출하여 포함된 ara :: core :: ErrorCode 객체를 C ++ 예외로 변환 할 수 있습니다. . 이 호출은 포함 된 값을 그대로 반환하지만 포함된 ara :: core :: ErrorCode의 내용에서 자동으로 파생 된 해당 예외 유형을 throw하여 포함된 오류를 처리합니다.

 


Future and Promise

 ara :: core :: Result가 동기 함수 호출을 위한 일반적인 반환 유형으로 사용되는 것과 비슷하게 ara :: core :: Future는 비동기 함수 호출을 위한 일반적인 반환 유형으로 사용됩니다.

 

ara :: core :: Future는 std :: future에서 자세히 모델링되었지만 ara :: core :: Result와 상호 운용되도록 확장되었습니다.

 

ara :: core :: Result와 마찬가지로 ara :: core :: Future는 값이나 오류를 포함하는 클래스입니다. 이 콘텐츠는 두 가지 방법으로 추출 할 수 있습니다.

 

1. ara :: core :: Future :: get을 호출하여 포함 된 값이 있으면 이를 반환하거나 그렇지 않으면 예외를 throw합니다.

2. ara :: core :: Future :: GetResult를 호출하여 미래의 값이나 오류가 포함 된 ara :: core :: Result 객체를 반환합니다.

 

비동기 함수 호출에서 값 또는 오류를 사용할 수 있을 때까지 이러한 호출이 모두 차단됩니다.

 


Advanced data types

 이전 단원에서 언급 한 AUTOSAR에서 고안 한 데이터 유형 외에도 Adaptive Platform에는 많은 일반 데이터 유형이 포함되어 있습니다.

 

이러한 유형 중 일부는 이미 C ++ 11 표준에 포함되어 있습니다. 그러나 거의 동일한 동작을 하는 유형은 ara :: core 네임 스페이스 내에서 다시 정의됩니다. 그 이유는 std :: types의 메모리 할당 동작이 자동차 용으로 적합하지 않기 때문입니다. 따라서 ara :: core는 자신의 메모리 할당 동작을 정의합니다.

 

이러한 데이터 유형의 예로 벡터, 맵 및 문자열이 있습니다.

 

ara :: core에 정의 된 다른 유형은 최신 C ++ 표준에 정의되거나 제안되었으며 Adaptive Platform은 Manifest의 특정 구문을 지원하는 데 필요하기 때문에 ara :: core 네임 스페이스에 포함시킵니다. API에서 사용하는 것이 매우 유용하다고 생각됩니다.

 

이러한 데이터 유형의 예로는 string_view, span, optional 및 variant가 있습니다.


 

Primitive data types

 AUTOSAR_SWS_AdaptivePlatformTypes라는 다른 문서가 존재합니다. 이 문서는 ServiceInterface 설명에서 사용할 수있는 기본 유형을 정의합니다. 이 문서는 앞으로 Core Types 문서와 병합될 수 있습니다.

반응형