진입점 함수 식별하기와 MATLAB 코드 검사하기
코드를 생성하기 전에 하나 이상의 진입점 함수를 식별해야 합니다. 그런 다음 코드 분석기와 코드 생성 준비 툴을 사용하여 MATLAB® 코드에 코드 생성과 관련해 흔히 나타나는 오류가 있는지 검사합니다. 진입점 함수를 식별하고 흔히 나타나는 오류가 있는지 검사하는 것은 코드 생성 워크플로의 첫 번째 단계입니다.
진입점 함수 식별하기
진입점 함수는 사용자 지정 C/C++ 코드에서 직접 액세스하려는 함수입니다. 코드 생성기는 진입점으로 식별된 함수의 시그니처를 보존합니다. 진입점 함수는 생성된 코드에 대한 안정적인 인터페이스입니다. 진입점으로 지정하지 않은 함수의 경우 코드 생성기는 내부 발견법을 사용하여 코드 성능과 가독성의 균형을 맞춥니다. 즉, 코드 생성기는 진입점이 아닌 함수 호출을 제거하거나, 인라인 처리하거나, 수정할 수 있습니다. 진입점으로 지정하지 않은 함수는 생성된 코드에 대한 안정적인 인터페이스가 아닙니다.
코드 생성기는 다음과 같은 여러 유형의 진입점 함수를 지원합니다.
단일 진입점, 단일 생성 함수 시그니처 — 많은 경우 진입점은 다른 MATLAB 함수를 호출하는 단일 최상위 함수입니다. 단일 함수 시그니처를 사용하여 생성된 코드와 상호 작용하려는 경우 단일 진입점 함수를 사용하십시오.
단일 진입점, 여러 함수 시그니처 – MATLAB에서 특정 함수는 다양한 데이터형을 입력값으로 받을 수 있습니다. 생성된 코드에서 이러한 유연성을 모방하기 위해 단일 진입점 함수에 대해 여러 개의 시그니처를 생성할 수 있습니다. Generate Code for Functions with Multiple Signatures 항목을 참조하십시오.
여러 진입점, 여러 함수 시그니처 – MATLAB 코드에서 여러 함수에 대한 안정적인 인터페이스를 생성하려면 여러 개의 진입점에 대한 코드를 동시에 생성할 수 있습니다. Generate Code for Multiple Entry-Point Functions 항목을 참조하십시오.
코드 분석기 사용하기
코드 생성 오류를 최소화하려면 MATLAB 편집기에서 코드 분석기를 사용한 후 C/C++ 코드를 생성하십시오. 코드 분석기는 코드를 입력할 때 코드를 검사하고, 문제를 보고하고, 수정 사항을 권장합니다.
코드 분석기를 사용하여 코드 생성과 관련된 경고와 오류를 식별하려면 MATLAB 파일에 %#codegen
지시문을 추가하십시오. %#codegen
지시문을 추가할 때 코드 분석기가 수행하는 검사 목록은 Performance Improvements 항목을 참조하십시오.
편집기 창의 오른쪽 위에 있는 표시자가 녹색이면 코드 분석기가 코드 생성 문제를 감지하지 못한 것입니다.
표시자가 빨간색이면 코드 분석기가 코드에서 오류를 감지한 것입니다. 표시자가 주황색이면 경고를 감지한 것입니다. 표시자가 빨간색이거나 주황색이면 문제가 발생한 코드의 오른쪽에 빨간색 마커나 주황색 마커가 표시됩니다. 오류나 경고에 대한 내용을 확인하려면 마커를 가리킵니다. 더 자세한 설명과 제안된 조치를 확인하려면 오류 메시지에서 밑줄이 그어진 텍스트를 클릭합니다.
MATLAB 코드에서 코드를 생성하기 전에 먼저 코드 분석기에서 감지된 오류를 수정하십시오. 코드 분석기에 대한 자세한 내용은 코드 분석기를 사용하여 코드에서 오류와 경고 확인하기 항목을 참조하십시오.
코드 생성 준비 툴 사용하기
코드 생성기는 대부분의 MATLAB 언어 기능과 함수를 지원합니다. C/C++ 코드 생성에 지원되는 함수 및 객체 항목을 참조하십시오. 코드에서 지원되지 않는 함수와 언어 기능을 확인하려면 코드 생성 준비 툴을 사용하십시오. 코드 생성 준비 툴을 실행하려면 다음 방법 중 하나를 사용합니다.
MATLAB Coder™ 앱에서 진입점 함수를 추가합니다. 코드 생성 툴 준비 툴이 자동으로 실행됩니다.
브라우저에서 코드 생성 준비 상태를 확인할 파일을 마우스 오른쪽 버튼으로 클릭하고 코드 생성 준비 상태 확인을 선택합니다.
명령줄에서
coder.screener
함수를 사용합니다.
코드 생성 준비 툴은 코드를 구문 분석하고 지원되지 않는 MATLAB 함수와 언어 기능을 식별하려고 시도합니다. 코드를 생성하기 전에 툴에 나열된 문제를 해결하는 것이 가장 좋습니다. 자세한 내용은 코드 생성 준비 툴 항목을 참조하십시오.
코드 생성 전 오류 해결하기
코드 분석기와 코드 생성 준비 툴은 MATLAB 코드에서 발생할 수 있는 모든 코드 생성 규정 준수 문제를 감지할 수는 없습니다. 그러나 다음 툴을 사용하면, 작동하는 최적화된 프로덕션 준비 완료 C/C++ 코드나 MEX 코드를 생성하기 위한 문제 해결과 코드 생성 주기 수를 최소화할 수 있습니다.
다음 표에서는 코드 분석기나 코드 생성 준비 툴에서 감지할 수 있는 몇 가지 코드 문제에 대해 설명하고 가능한 몇 가지 해결 방법을 제안합니다.
오류 메시지 | 문제 | 가능한 해결 방법 |
---|---|---|
코드 생성 시 스크립트는 지원되지 않습니다.(Code generation does not support scripts.) | MATLAB 스크립트에 대한 코드를 생성하려고 합니다. | 코드 생성을 위해서는 사용자의 MATLAB 코드가 함수 정의만 포함된 함수 파일에 있어야 합니다. |
코드 생성 시 이 함수는 지원되지 않습니다.(This function is not supported in code generation.) | 코드 생성 시 사용자의 MATLAB 코드에서 사용된 MathWorks® 함수 중 하나 이상이 지원되지 않습니다. | 코드에 지원되지 않는 함수가 포함되어 있는 경우 다음 우회적 해결 방법 중 하나를 고려하십시오.
이러한 우회적 해결 방법에 대한 자세한 내용은 오류 해결: 코드 생성 시 함수가 지원되지 않음 항목을 참조하십시오. |
코드 생성 시 첨자를 사용하려면 먼저 할당을 통해 변수를 완전히 정의해야 합니다.(Code generation requires a variable to be fully defined through assignment before subscripting it.) | 기존 인덱스 경계를 벗어난 값을 할당하여 배열을 만들거나 확장하려고 합니다. | MATLAB에서는 정의되지 않은 배열 요소에 값을 할당하여 배열을 만들거나 확장할 수 있습니다. 코드 생성 시 이러한 배열 생성과 배열 확장 방법은 지원되지 않습니다. 행렬의 요소에 값을 할당하려면 먼저 행렬을 정의해야 합니다. 인덱싱된 변수를 할당하기 전에 행렬 정의하기 항목을 참조하십시오. |
코드 생성은 'end + 1' 인덱싱을 통해 배열의 크기를 늘리는 것만 지원합니다.(Code generation only supports growing the size of an array through 'end + 1' indexing.) | 코드 생성 시 지원되지 않는 방식으로 end 항목을 사용하여 배열을 확장하려고 합니다. | 코드 생성을 위해 MATLAB 코드의
Grow an Array Using (end + 1) Indexing 항목을 참조하십시오. |
변수를 정의하기 전에 그 변수를 사용했을 수 있고, 이는 코드 생성 시 허용되지 않습니다.(Variable might be used before it is defined, this is not allowed in code generation.) | 변수를 정의하기 전에 변수를 사용했습니다. | 모든 변수가 정의되었는지 확인한 후 사용합니다. 많은 경우 이 오류는 이 코드가 MATLAB에서도 실행되지 않음을 나타냅니다. |