Embedded Coder®의 코드 생성에 대한 설정을 구성하려면 MATLAB®의 경우 MATLAB Coder 앱을, Simulink의 경우 Embedded Coder Quick Start를 사용할 수 있습니다. MATLAB 명령 및 스크립트를 이용하여 각 설정을 직접 구성할 수도 있습니다.
MATLAB Coder 앱에서는 다음을 수행할 수 있습니다.
- MATLAB 파일 및 함수에 대한 코드 생성
- 프로세서 및 코드 생성 출력 선택
- Embedded Coder 최적화 선택
Embedded Coder Quick Start for Simulink에서는 다음을 수행할 수 있습니다.
- Simulink 모델 및 서브시스템에 대한 코드 생성
- 프로세서 및 코드 생성 출력 선택
- RAM 또는 실행 속도 최적화를 위해 Embedded Coder 선택
MATLAB의 경우 다음 출력 대상 중 하나를 지정할 수 있습니다.
- MEX-파일
- C/C++ 정적 라이브러리
- C/C++ 실행 파일
Simulink의 경우 다음과 같이 즉시 실행 가능한 구성 중 하나를 지정합니다.
Embedded Real-Time Target — 거의 모든 양산용 프로세서에서 효율적인 실시간 실행을 위해 부동소수점 및 고정소수점 데이터로 이루어진 ANSI/ISO C, C++ 및 캡슐화된 C++ 코드를 생성합니다.
AUTOSAR Target — AUTOSAR 소프트웨어 구성요소의 개발을 지원하는 C 코드 및 런타임 인터페이스를 생성합니다(AUTOSAR Blockset 필요).
Shared Library Target — 호스트 플랫폼에서 실행할 수 있도록 코드의 공유 라이브러리 버전을 Windows® 동적 연결 라이브러리(.dll) 파일 또는 UNIX® 공유 객체(.so) 파일로 생성합니다.
또한 MathWorks 및 이외 타사에서 제공하는 MATLAB 애드온을 통해 Embedded Coder를 확장하여 ARM®, Intel®, NXP™, STMicroelectronics®, Texas Instruments™와 같은 특정 하드웨어를 지원할 수 있습니다.
Embedded Coder를 사용하면 생성된 코드에서 모델 데이터가 표시되는 방식을 정의하고 제어하여 소프트웨어 통합을 진행할 수 있습니다.
MATLAB 코드의 경우 Embedded Coder는 고정소수점 객체 및 사전 정의된 스토리지 클래스를 포함한 모든 MATLAB Coder 데이터 정의를 지원합니다.
Simulink 모델의 경우 Embedded Coder는 다음 데이터 사전 및 사양 기능을 지원합니다.
Embedded Coder Dictionary — 함수 인터페이스, 저장소 클래스, 메모리 섹션 등 코드 정의를 보고 사용자 정의할 수 있습니다.
Simulink 데이터 객체 — constant, volatile, exported global, imported global, define directive, structure, bit field(bit-packed 구조체 포함), get/set 액세스 메서드 등의 사전 정의된 저장소 클래스를 제공합니다.
모듈 패키징 데이터 객체 — 룩업 테이블을 보정 또는 조정하는 메모리 세그먼트와 같이 일반적으로 대량 양산에 사용되는 고급 데이터 객체에 대한 미리 구성된 특성을 제공합니다.
사용자 데이터형 — 생성된 코드에 모델 데이터가 표시되는 방식을 세밀하게 관리하고, 레거시 데이터와 연동하고, Simulink 내장 데이터형을 확장하거나 대체할 수 있도록 복잡한 데이터의 추상 데이터형을 만들 수 있습니다.
Embedded Coder를 사용하여 Simulink에서 ASAP2 형식의 데이터 교환 파일에 액세스할 수 있으며, ASAP2 표준을 사용하여 복잡한 데이터 정의를 갖는 모델 데이터를 내보낼 수 있습니다. 내장된 기본 기능을 수정하여 다른 데이터 교환 메커니즘을 만들 수도 있습니다.
Embedded Coder를 사용하면 함수 경계를 제어하고 표현식을 유지하며 여러 블록에 최적화를 적용하여 코드 크기를 더 줄일 수 있습니다. 전역 변수 또는 함수 파라미터를 통해 생성된 코드의 데이터 교환이 이루어집니다. 생성된 코드를 모델의 블록 및 신호로 추적할 수 있습니다.
MATLAB 코드 및 Simulink 모델에서 코드를 생성하는 Embedded Coder 옵션을 사용하면 다음을 수행할 수 있습니다.
- 수학 함수 및 연산자에 대한 프로세서 특정 코드 생성
- 레거시 또는 외부 환경으로 내보낼 수 있도록 코드 재사용
- 불필요한 초기화, 종료, 기록, 및 오류 처리 코드 제거
- 정수 전용 응용 프로그램에서 부동소수점 코드 제거
추가적인 Embedded Coder 최적화 및 구성 옵션을 Simulink 모델에 사용하여 다음을 수행할 수 있습니다.
- 프리프로세서의 컴파일 작업을 위한 매크로를 사용한 코드 변형 생성
- 각 생성된 파일의 형식 제어
- 전역 데이터의 정의 및 참조 방식 결정
- 주석의 내용 및 위치 지정
Embedded Coder로 MATLAB 파일 및 함수, 또는 Simulink 모델 및 서브시스템에 대해 생성된 코드를 여러 방법을 통해 검토할 수 있습니다. 예로, 다음과 같은 작업을 할 수 있습니다.
- 코드 모듈, 함수 인터페이스, 정적 코드 메트릭을 설명하는 코드 리포트 생성
- 생성된 전역 데이터, 데이터형 및 함수에 대한 식별자 형식 제어
- 함수 도움말 텍스트를 포함하여 MATLAB 코드를 생성 코드의 주석으로 포함
Embedded Coder를 Simulink와 함께 사용할 경우 하이 레벨 요구 사항을 요구 사항 소스에 대한 링크를 사용하여 코드 주석으로 삽입할 수 있습니다(Requirements Toolbox™ 필요). Simulink 코드 생성에 대한 코드 리포트에는 코드 인터페이스 설명, 추적 리포트, 생성된 소스 파일 및 코드 표시도 있습니다. 모델과 생성된 코드 사이에 양방향 링크가 있어 코드의 각 행과 그에 대응하는 Simulink 모델 요소(서브시스템, 블록, MATLAB 함수 및 코드, Stateflow® 차트 및 전환 등)를 쉽게 탐색할 수 있습니다.
Embedded Coder를 사용하면 생성된 코드를 코드 실행 환경에 통합할 수 있습니다.
MATLAB의 경우, Embedded Coder로부터 생성된 코드는 MATLAB Coder에서 제공하는 것과 동일한 실행 프레임워크를 사용하여 실행됩니다.
Simulink의 경우, Embedded Coder를 함께 사용하면 Simulink Coder가 제공하는 실시간 실행 프레임워크를 크게 확장할 수 있습니다. 기본적으로 코드는 RTOS(실시간 운영 체제) 유무와 관계없이 싱글 태스크, 멀티 태스크 또는 비동기 모드에서 실행할 수 있습니다. Embedded Coder를 사용하여 SIL(software-in-the-loop) 및 PIL(processor-in-the-loop) 테스트에 대해 코드 실행 결과를 검증할 수도 있습니다. Simulink Test™ 및 Simulink Coverage는 테스트 실행, 결과 비교 및 커버리지 분석을 자동화할 수 있게 해줍니다. 코드 실행 프로파일링 분석 역시 지원합니다.
메인 프로그램 생성
Embedded Coder는 실시간 환경에서 코드를 배포하기 위해 사용자가 제공하는 정보를 기반으로 확장 가능한 메인 프로그램을 생성합니다. 이 기능 덕분에 모델로부터 완전한 맞춤형 실행 파일을 만들어 낼 수 있습니다.
멀티레이트, 멀티태스크, 멀티코어 코드 실행
Embedded Coder는 모델에 지정된 샘플링 주기에 따라 싱글레이트 또는 멀티레이트 코드를 생성합니다. 멀티레이트인 멀티태스킹 모델의 경우 모델의 기본 레이트 작업과 각 서브 레이트 작업별로 별도의 함수를 생성하는 '레이트 그룹화'라는 전략을 채용합니다. Simulink Concurrent Execution 모델링을 사용하여 멀티코어 처리를 위한 멀티스레드 코드를 작성할 수도 있습니다.
SIL 및 PIL 테스팅 수행
Embedded Coder는 Simulink 시뮬레이션 모드나 S-function 블록을 사용하여 생성된 코드의 실행을 Simulink(SIL 테스트용)에서의 SIL 테스팅, 또는 임베디드 대상에서의 PIL 테스팅을 위해 자동화합니다. Simulink Test™는 테스트 실행 및 원래 모델과 시뮬레이션 결과의 테스트 결과 비교를 자동화할 수 있게 해줍니다. Simulink Coverage를 사용하여 또는 타사 도구와 연동하여 구조적인 코드 커버리지 분석을 수행하여 테스트의 완전성을 측정할 수 있습니다. 코드 프로파일링 분석으로 호스트 또는 대상 프로세서에서의 실행 시간을 확인할 수 있습니다.