MISRA C++ 준수 코드의 생성 사용

MISRA C++ 설정 및 MISRA C++ 유형을 Rational® Rhapsody® 모델에 추가하면 MISRA C++ 준수 코드를 생성할 수 있습니다.

이 태스크 정보

참고: MISRA/C++을 적극 준수하는 프레임워크의 경우, SXF(Simplified C++ Execution Framework)를 사용하는 것이 좋습니다.

프로시저

  1. MISRA C++ 설정 및 MISRA C++ 유형을 모델에 추가하려면 Rational Rhapsody for C++에서 모델을 여십시오.
  2. 파일 > 모델에 추가를 선택하고 <product installation path>\Share\Settings\MISRA로 이동하여 MISRAC++.sbs 파일을 선택하고 확인을 클릭하십시오. 이 설정은 Rational Rhapsody 코드 생성기가 MISRA C++를 준수하도록 하는 여러 특성을 모델에 추가합니다.
  3. 모델에 MISRA_Cpp_Types 패키지를 추가하려면 파일 > 모델에 추가를 선택하고 <product installation path>\Share\LangCpp\oxf\model\oxf_rpy로 이동한 후 MISRA_Cpp_Types.sbs 파일을 선택한 다음 확인을 클릭하십시오. 이 패키지에는 MISRA C++ 유형이 있습니다.
  4. C++ 기본 유형(예: intchar) 대신 MISRA C++ 유형을 사용하십시오.

다음에 수행할 작업

Rational Rhapsody는 다음 MISRA C++ 규칙을 지원합니다.
  • 7-1-1: 수정되지 않은 변수는 규정된 상수여야 합니다.
  • 0-1-7: void가 아닌 리턴 유형의 함수(오버로드된 연산자가 아님)가 리턴한 값이 항상 사용되어야 합니다.
  • 5-14-1: 논리 && 또는 || 연산자의 오른쪽 피연산자는 부작용을 포함하지 말아야 합니다.
  • 6-4-2: 모든 if...elseelse 절로 종료되어야 합니다.
  • 5-0-2: 제한된 종속성을 표현식의 C++ 연산자 서열 규칙에 배치해야 합니다.
참고:
  • MISRA C++ 규칙 5-2-4, 7-1-2 및 18-4-1을 위반하지 않으려면 포트를 사용하지 마십시오.
  • MISRA C++ 규칙 18-4-1에 대해, 동적 힙 메모리 할당을 사용할 수 없습니다. 이벤트를 정적으로 작성한 후 send(&theEvent)로 이벤트를 보내어 동적 메모리 할당을 방지할 수 있습니다.
다음 특성의 값은 아래와 같습니다.
  • CPP_CG::Argument::IsConst = True
  • CPP_CG::Attribute::GenMutatorConstantArgument= True
  • CG::Attribute/ Relation ::IsConst = SignatureAndReturnValue
다음 사항을 고려해야 합니다.
  • 포트에서 새로 작성 또는 삭제를 사용하는 경우, 포트에 대한 모든 속성은 값으로 생성되므로 새로 작성 또는 삭제가 생성되지 않습니다.
  • 프레임워크 변경사항:
    OMEvent::isTypeOf had changed from
    bool OMEvent::isTypeOf(IOxfEvent::ID eventId) const
    bool OMEvent::isTypeOf(const IOxfEvent::ID eventId) const

    프레임워크의 기본 클래스는 사용자 상속 전에 정의되므로 이는 해당 초기화입니다. 예를 들어, AcmeJet::AcmeJet(void) : OMThread(), Jet() {. 기본 클래스 초기화는 기본적으로 일반 모델에 대해 설정 해제됩니다.

  • MisraC++에서 관계의 기본 가시성은 private입니다.
  • 상속이 없는 상태 차트에서 속성은 private이며 enum으로 정의됩니다.
  • 상속이 있는 상태 차트에서 속성은 보호되고 정수로 정의되며, MISRA 준수가 아닙니다. CG 경고가 발행되고, LDRA 경고가 코드에 추가됩니다.
  • MISRA C++ 모델 이벤트 인수의 경우:
    • 검사 시 새 부울 특성을 CPP_CG:Event:GenerateArgumentsAsPrivate에 추가하면 인수 가시성이 private 값을 가집니다.
    • 모든 모델의 경우, 이벤트 인수의 어노테이션은 이제 //## auto_generated입니다.

피드백