주요 콘텐츠

C Caller

C 코드를 Simulink에 통합

  • C Caller block

라이브러리:
Simulink / User-Defined Functions

설명

C Caller 블록은 외부 C 코드를 Simulink®에 통합합니다. 이 블록은 외부 C 코드의 함수를 가져와 나열하며, 사용자가 Simulink 모델에 통합할 해석된(resolved) C 함수를 선택할 수 있게 합니다.

라이브러리 브라우저 > Simulink > User Defined Functions를 사용하여 C Caller 블록을 Simulink 캔버스로 가져옵니다.

그런 다음 블록 대화 상자에서 Gear 아이콘을 클릭합니다. 그러면 구성 파라미터 대화 상자가 열립니다. 구성 파라미터 대화 상자의 시뮬레이션 타깃 창으로 이동하고 코드 정보 탭의 파라미터를 사용하여 소스 코드와 지원 파일을 정의합니다. 소스 코드에서 함수 정의를 찾아보려면 Go to function button. 아이콘을 사용하십시오. 소스 코드와 지원 파일 정의에 대한 자세한 내용은 Specify and Configure Custom C/C++ Code 항목을 참조하십시오.

소스 코드와 지원 파일을 변경하려면, 구성 파라미터 대화 상자의 시뮬레이션 타깃 창에 있는 코드 정보 탭에서 동일한 파라미터를 사용합니다. 소스 코드와 지원 파일을 변경한 후에는 블록 대화 상자의 Circular arrow 버튼을 클릭하여 함수 목록을 새로 고칩니다.

예제

제한 사항

  • 사용자 지정 코드 설정 초기화/종료 — 사용자 지정 코드에 사용되는 메모리를 할당 및 할당 해제해야 하는 경우, 사용자 지정 코드 설정의 초기화 함수 필드와 종료 함수 필드에 할당 코드 및 할당 해제 코드를 삽입하거나 C Function 블록을 사용하십시오.

  • 복소수 데이터 지원 — 블록은 Simulink에서 복소수 데이터형을 지원하지 않습니다.

  • 변수 인수 — C의 변수 인수는 지원되지 않습니다(예: int sprintf(char *str, const char *format, ...)).

  • C++ 구문 — 이 블록은 네이티브 C++ 구문을 직접 지원하지 않습니다. C++ 코드와 상호 작용하도록 C 함수 래퍼를 작성해야 합니다.

  • Simulink Test™ Observer 지원 — R2026a부터 Observer Port 블록과 Observer Reference 블록을 사용하여 C Caller 블록에서 내보낸 전역 변수를 관측할 수 있습니다. 이러한 블록은 정적 전역 변수 또는 n차원 행렬의 전역 변수를 관측하는 데는 사용할 수 없습니다.

포트

입력

모두 확장

입력 포트의 개수와 이름은 외부 C 코드에서 선택한 함수를 통해 유추합니다. C Caller 블록에 데이터를 제공하려면, 입력 신호를 입력 포트에 연결합니다.

입력 레이블의 이름은 블록 대화 상자포트 사양 아래에서 레이블을 편집하여 변경하지 않는 한, 입력 포트와 동일합니다. 사용자가 입력 포트의 레이블 이름을 바꾸면 C Caller 블록은 해당 포트의 이름을 바꿉니다.

입력 변수에 대해서는, 범위 열을 사용하여 입력 범위를 파라미터 또는 상수로 바꿀 수 있습니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | string

출력

모두 확장

출력 포트의 개수와 이름은 외부 C 코드에서 선택한 함수를 통해 유추합니다. C Caller 블록에서 데이터를 보내려면, C Caller 블록의 출력 포트에 블록을 연결합니다.

출력 포트 레이블의 이름은 블록 대화 상자포트 사양 아래에서 레이블을 편집하여 변경하지 않는 한, 출력 포트와 동일합니다. 사용자가 입력 포트의 레이블 이름을 바꾸면 C Caller 블록은 해당 포트의 이름을 바꿉니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | enumerated | bus | string

파라미터

모두 확장

C Caller 블록에 대해 구문 분석된 함수의 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 사용 가능한 함수 목록을 보려면 사용 가능한 함수 항목을 참조하십시오.

조정 가능: Yes

프로그래밍 방식의 사용법

블록 파라미터: FunctionName
유형: 문자형 벡터 또는 string형 스칼라

myFunctionName = get_param(gcb,"FunctionName")
myFunctionName =

    'mean_filter'

포트 속성으로, 테이블로 지정됩니다. 이 테이블은 블록의 각 입력 요소와 출력 요소에 대한 특성을 나타냅니다. 범위가 input이면 이 변수를 parameter 또는 constant로 수정할 수 있습니다. 이러한 속성에는 다음이 포함됩니다.

전역 인수 — R2026a부터 C Caller 블록 대화 상자의 버튼을 사용하여 외부 사용자 지정 코드에서 전역 변수를 추가하거나 삭제하거나 자동으로 유추할 수 있습니다. 이러한 버튼을 사용하려면 구성 파라미터 대화 상자에서 시뮬레이션 타깃을 선택하십시오. 가져오기 설정 탭에서 자동으로 전역 변수를 함수 인터페이스로 유추 체크박스가 선택되어 있지 않는지 확인하십시오.

  • Add 버튼을 사용하여 외부 C 코드에서 블록으로 전역 변수를 추가합니다. 이 버튼을 사용하면 변수를 한 번에 하나씩 추가할 수 있습니다. 프로그래밍 방식으로 전역 변수를 추가하려면 버전 R2024b 이상에 사용 가능한 addGlobalArg 함수를 사용합니다.

  • Remove 버튼을 사용하여 블록에서 전역 변수를 삭제합니다. 변수를 삭제하려면 포트 사양 테이블에서 해당 행을 선택하고 이 버튼을 클릭합니다. 한 번에 둘 이상의 변수를 삭제하려면 해당 변수에 대응하는 행을 선택하고 이 버튼을 사용합니다. 프로그래밍 방식으로 전역 변수를 삭제하려면 버전 R2024b 이상에 사용 가능한 deleteGlobalArg 함수를 사용합니다.

  • 선택한 C 함수에 사용되는 전역 변수를 한 번에 모두 추가하려면 Magic wand 버튼을 사용합니다.

이름 — 소스 코드에서 유추된 변수 이름을 보여줍니다.

굵게 표시된 인수 이름은 해당 포트 또는 파라미터가 전역 인수임을 나타냅니다.

범위 — 소스 코드에서 변수의 역할을 나타냅니다. 해당 변수가 C Caller 블록 소스 코드에서 입력 인수일 경우, 범위 유형을 상수 또는 파라미터로 변경할 수 있습니다. 해당 변수가 소스 코드에서 출력 인수일 경우, 출력 유형을 변경할 수 없습니다.

레이블 — Simulink 모델의 입력 변수 또는 출력 변수에 대한 레이블입니다. 사용자는 이 테이블을 사용하여 레이블을 변경할 수 있습니다. 범위가 파라미터인 경우 이 필드에 파라미터 이름을 입력합니다. 범위가 상수인 경우 상수 값을 입력합니다.

유형 — 포트에서 오는 데이터형을 나타냅니다.

크기 — 입력 및 출력 데이터의 크기를 나타냅니다.

이름, 범위, 유형, 크기는 소스 코드에서 유추됩니다.

프로그래밍 방식의 사용법

블록 파라미터: FunctionPortSpecification
유형: FunctionPortSpecification 객체

C Caller 블록에 매핑될 수 있는 사용 가능한 모든 함수의 목록으로, 셀형 배열로 지정됩니다.

모델의 C Caller 블록은 외부 소스 코드의 모든 함수를 가져오고, 블록 대화 상자의 함수 이름 옆에 함수 이름을 표시합니다. 블록에서 함수를 선택하고 사용하려면, 해당 함수 이름이 사용 가능한 함수 테이블에 표시되는지 확인하십시오. 함수 중 하나가 누락된 경우 블록 대화 상자에서 Circular arrow 버튼을 클릭하여 소스 코드를 다시 불러오십시오. 함수의 이름을 바꾸려면 소스 코드를 수정하고 새로 고침 버튼을 클릭하여 다시 로드하십시오.

프로그래밍 방식의 사용법

블록 파라미터: AvailableFunctions
유형: 셀형 배열

allAvailableFunctions = get_param(gcb, "AvailableFunctions")
allAvailableFunctions =

  1×1 cell array

    {'add'}

샘플 주기로, 초 단위로 지정됩니다. 샘플 시간의 유형 항목 및 샘플 시간 지정하기 항목을 참조하십시오.

프로그래밍 방식의 사용법

블록 파라미터: SampleTime
유형: string형 스칼라 또는 문자형 벡터
디폴트 값: "-1"

블록 특성

데이터형

Booleana | busa | doublea | enumerateda | fixed pointa | integera | singlea | stringa

직접 피드스루

아니요

다차원 신호

a

가변 크기 신호

아니요

영점교차 검출

아니요

a 실제 데이터형 또는 기능 지원은 블록 구현에 따라 달라집니다.

세부 정보

모두 확장

  • C Caller 블록을 포함하는 모델을 테스트하려면 Test Integrated C Code (Simulink Test) 항목을 참조하십시오.

  • 모델에 사용자 지정 코드가 있는 경우, 모델 업데이트 또는 실행이 끝나면 불러온 사용자 지정 코드 시뮬레이션 실행 파일로 인해 slprj 폴더가 잠길 수 있습니다. 잠긴 폴더는 삭제할 수 없습니다. 실행 파일을 언로드하고 slprj 폴더의 잠금을 해제하려면 clear mex 명령을 사용하십시오. clear 항목을 참조하십시오.

확장 기능

모두 확장

고정소수점 변환
Fixed-Point Designer™를 사용하여 고정소수점 시스템을 설계하고 시뮬레이션할 수 있습니다.

버전 내역

R2018b에 개발됨

모두 확장