주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

개선된 MISRA 및 AUTOSAR 준수 기능을 갖춘 C/C++ 코드 생성

MISRA™(Motor Industry Software Reliability Association)1 “중요 시스템에서의 C 언어 사용 지침”(MISRA C™)과 “중요 시스템에서의 C++ 언어 사용 지침”을 제정했다. AUTomotive Open System ARchitecture(AUTOSAR) 개발 파트너십은 "Guidelines for the Use of the C++14 Language in Critical and Safety-Related Systems"도 제정했습니다. MATLAB® 코드베이스용 C 또는 C++ 코드를 생성할 때, 코드 생성기를 구성하여 이러한 코딩 규칙의 상당 부분을 준수하는 코드를 생성하도록 할 수 있습니다.

코드 생성 지원 범위

MATLAB 코드에서 C 또는 C++ 코드를 생성할 때, 생성된 코드가 MISRA C:2012, MISRA C:2023, MISRA C++:2008 및 AUTOSAR C++14 지침을 최대한 준수하도록 코드 생성기를 구성할 수 있습니다.

코드 생성의 호환성을 극대화하려면:

코드 생성 과정에서 생성된 코드에는 MISRA 및 AUTOSAR 지침을 준수하지 않는 다음 파일 중 하나 이상이 포함될 수 있습니다:

  • coder_posix_time.h

  • coder_posix_time.c

  • rt_defines.h

  • rt_nonfinite.h

  • rtGetInf.h

  • rtGetNaN.h

  • rtwhalf.h

  • rtwhalf.c

  • rtwhalf.cpp

  • rtwtypes.h

특정 상황에서는 코드 생성을 구성하여, 생성된 코드에서 rtwtypes.h 파일에 포함된 사용자 지정 유형 정의가 사용되지 않도록 할 수 있습니다. 예를 들어, MISRA C++ 호환성을 위한 추가 설정 항목을 참고하십시오.

이 코드 생성기는 MISRA 및 AUTOSAR 지침에 명시된 필수 및 의무 코딩 규칙의 상당 부분을 지원합니다. 전체 목록을 보려면 다음 항목을 참조하십시오:

코드 생성 기능은 이러한 규칙을 Polyspace® Bug Finder™ 제품과 동일한 방식으로 해석합니다. 코드 생성기가 특정 코딩 규칙을 어떻게 해석하는지 알아보려면, Polyspace Bug Finder 문서의 해당 참조 페이지에 있는 Polyspace 구현 섹션을 참조하십시오:

명령줄에서 코드 생성 구성 객체의 속성 설정

  1. Embedded Coder® 코드 생성 구성 객체를 생성합니다.

    cfg = coder.config('lib','ecoder',true);
    

  2. coder.setupMISRAConfig 함수를 사용하여 MISRA 규격 준수를 개선하려면 다음 테이블에 나와 있는 속성을 해당 값으로 설정하십시오.

    coder.setupMISRAConfig(cfg);

    속성MISRA 준수 개선을 위한 값
    CastingMode'Standards'
    CppGenerateEnumClass (타깃 언어가 C++인 경우)true
    CppInterfaceClassName (타깃 언어가 C++인 경우)''
    CppInterfaceStyle (타깃 언어가 C++인 경우)'Functions'
    CppNamespace (타깃 언어가 C++인 경우)

    C++에서 유효한 네임스페이스 이름

    DataTypeReplacement'CoderTypedefs'
    EnableDynamicMemoryAllocationfalse
    EnableOpenMPfalse
    EnableRuntimeRecursionfalse
    EnableSignedLeftShiftsfalse
    EnableSignedRightShiftsfalse
    GenerateDefaultInSwitchtrue
    HeaderGuardStyle'UseIncludeGuard'
    JustifyMISRAViolationstrue
    MaxIdLength (타깃 언어가 C인 경우)31
    ParenthesesLevel'Maximum'
    RuntimeChecksfalse
    TargetLangStandard C의 경우 'C99 (ISO)', C++의 경우 'C++11 (ISO)'

    참고

    GenerateCommentstrue로 설정해야만 MISRA를 추가하고 JustifyMISRAViolations를 사용하여 AUTOSAR 어노테이션을 추가할 수 있습니다.

    coder.setupMISRAConfig는 MISRA 준수 수준을 높이기 위해 이 테이블의 파라미터를 권장값으로 설정합니다. 이 단계에서 이러한 설정 중 일부를 재정의하고 싶다면, 해당 속성 값을 수동으로 수정할 수 있습니다.

    CppNamespace 속성이 설정되어 있지 않고, TargetLang 속성이 'C++'인 경우, coder.setupMISRAConfigCppNamespace 속성을 디폴트 문자형 벡터인 'Codegen'으로 설정합니다. 이 값을 해당 프로젝트에 맞는 네임스페이스 이름으로 변경하십시오.

  3. -config 옵션을 사용하여 구성 객체를 codegen에 전달합니다.

    codegen myFunction -config cfg ...

MATLAB Coder 앱 설정 구성

  1. 빌드 유형정적 라이브러리, 동적 라이브러리 또는 Executable로 설정하십시오.

  2. 설정을 클릭합니다.

  3. MISRA 준수를 클릭합니다.

    이 앱은 MISRA 규정 준수에 영향을 미칠 수 있는 설정들을 표시합니다.

    Screenshot of MISRA compliance pane in the MATLAB Coder app.

  4. 이 모든 설정을 권장값으로 설정하려면 권장 값으로 설정를 클릭하십시오.

    C++ 네임스페이스 파라미터가 설정되어 있지 않고 언어가 C++인 경우, 권장 값으로 설정 버튼을 누르면 이 파라미터가 디폴트 값인 Codegen로 설정됩니다. 이 값을 해당 프로젝트에 맞는 이름으로 변경하십시오.

    개별 설정을 수정하려면 구성 파라미터 대화 상자에서 해당 설정을 검색하십시오.

MISRA C++ 호환성을 위한 추가 설정

기본적으로, 코드 생성 과정에서 생성된 C++ 코드는 특정 사전 컴파일된 라이브러리와 최대한의 호환성을 보장하기 위해 bool에 대한 사용자 지정 유형 정의를 사용합니다. 이 사용자 지정 유형 정의는 MISRA C++:2008 규칙 5-0-13 및 규칙 5-3-1을 위반할 수 있습니다.

생성된 C++ 코드에서 내장된 bool 유형을 사용하고 이러한 위반 사항을 방지하려면, 구성 객체에서 Hardware board 설정을 MATLAB Host Computer로 변경하십시오. 앱에서 이 설정을 변경하는 방법은 Access Hardware Implementation Properties with a Dialog Box 항목을 참조하십시오. 예를 들어, 64비트 Windows® 플랫폼에서 코드 생성과 빌드를 수행하려면 Hardware boardNone - Select device below로 변경한 다음, 장치 공급업체Intel로, 장치 유형x86-64 (Windows64)로 설정하십시오.

정적 분석 툴을 사용하여 생성된 코드의 규정 준수 여부 확인

모범 사례는 코드 생성기와는 별개로 생성된 코드의 규격 준수 여부를 검증하는 것입니다. 코드를 생성한 후에는 정적 분석 툴(예: Polyspace Bug Finder)을 사용하여 MISRA 및 AUTOSAR 코딩 표준 준수 여부를 확인하십시오.

Polyspace Bug Finder을 사용하여 C/C++ 코드의 코딩 규칙 위반 여부를 확인하는 방법은 다음을 참조하십시오:

참고 항목

|

도움말 항목

외부 웹사이트


1 MISRA and MISRA C are registered trademarks of HORIBA MIRA Ltd., held on behalf of the MISRA Consortium.