Simulink.importExternalCTypes
C 또는 C++ 코드에서 정의한 사용자 지정 데이터형을 나타내는 Simulink 표현을 생성
구문
설명
는 importInfo
= Simulink.importExternalCTypes(headerFiles
)headerFiles
로 식별된 C 또는 C++ 헤더 파일(.h
또는 .hpp
)의 구문을 분석하여 typedef
, struct
, enum
유형 정의를 찾고, 유형에 대한 Simulink® 표현을 생성합니다. 출력값 importInfo
는 성공적으로 가져온 유형과 성공적으로 가져오지 못한 유형을 식별합니다.
Simulink 표현을 사용하여 다음과 같은 작업을 수행할 수 있습니다.
시뮬레이션을 통해 기존 알고리즘의 C 코드를 재사용하고 사용자의 Simulink 제어 알고리즘과의 상호작용을 테스트합니다. 레거시 코드 툴 사용 방법을 보여주는 예제는 Integrate C Function Whose Arguments Are Pointers to Structures 항목을 참조하십시오.
기존 사용자 코드에서 정의한 유형과 데이터를 재사용하는 코드를 생성합니다(Simulink Coder™). 그런 다음, 생성된 코드와 기존 코드를 단일 애플리케이션으로 통합하고 컴파일할 수 있습니다. 예제는 Exchange Structured and Enumerated Data Between Generated and External Code (Embedded Coder) 항목을 참조하십시오.
사용자 조직에서 C 코드에 정의한 표준 데이터형을 사용하여 모델에 데이터(신호, 파라미터 및 상태)를 만들고 구성합니다.
Simulink에 신호 구조체를 만들려면 비가상 버스를 사용합니다. Group Signals or Messages into Virtual Buses 항목을 참조하십시오.
파라미터 구조체를 만들려면 MATLAB® 구조체 및
Simulink.Parameter
객체를 사용합니다. Organize Related Block Parameter Definitions in Structures 항목을 참조하십시오.열거형 데이터를 만들려면 Use Enumerated Data in Simulink Models 항목을 참조하십시오.
프리미티브
typedef
문에 일치시키려면Simulink.AliasType
객체를 사용하여 모델에 파라미터와 신호 데이터형을 설정합니다.
기본적으로 이 함수는 다음과 같은 작업을 수행합니다.
Define Simulink Enumerations 항목에 설명된 대로
Simulink.IntEnumType
에서 열거형 클래스를 파생하는 스크립트 파일을 생성하여 열거형을 가져옵니다. 필요한 경우 클래스 정의를 편집하여 열거형을 사용자 지정할 수 있습니다(예:addClassNameToEnumNames
메서드 구현).기본 작업 공간에
Simulink.Bus
객체를 생성하여 구조체형을 가져옵니다.기본 작업 공간에
Simulink.AliasType
객체를 생성하여 프리미티브typedef
문을 가져옵니다.호스트 컴퓨터의 워드 길이에 맞게 일반 C 데이터형(예:
int
또는short
)을 해석합니다. 예를 들어, 대부분의 최신 컴퓨터에서는int
형이 32비트의 워드 길이를 가지므로 이 함수는 Simulink의 데이터형int32
형을 사용하는 버스 요소로int
형 구조체 필드를 표현합니다.이 디폴트 동작을 재정의하려면
HardwareImplementation
쌍 인수를 사용하여 타깃 하드웨어 보드를 식별하십시오.
디폴트 동작에 관한 추가 정보는 팁 항목을 참조하십시오.
은 importInfo
= Simulink.importExternalCTypes(modelName
)modelName
으로 식별한 모델을 분석하여 사용자 지정 C 데이터형에 대한 Simulink 표현을 생성합니다. 시뮬레이션 중에 포함할 헤더 파일을 식별하도록 모델에서 시뮬레이션 타깃 구성 파라미터를 사용할 때, 호스트 컴퓨터에서 모델을 시뮬레이션할 용도로 이 구문을 사용하여 유형을 가져옵니다. 이 함수는 호스트 컴퓨터의 워드 길이에 맞게 일반 C 데이터형을 해석합니다.
이 구문을 사용할 때 타깃 모델의 구성 파라미터와 충돌할 수 있는 쌍 인수(예: HardwareImplementation
)를 사용하지 마십시오. 이러한 쌍 인수를 이 구문과 함께 사용하면 함수가 경고를 생성합니다.
는 하나 이상의 이름-값 쌍 인수를 사용하여 추가 옵션을 지정합니다. 이 구문을 사용하여 다음과 같은 작업을 수행할 수 있습니다.importInfo
= Simulink.importExternalCTypes(___,Name,Value)
Names
쌍 인수를 사용하여 가져올 유형의 이름을 지정합니다.Simulink가 가져온 유형을 저장하는 방식을 제어합니다(예: Simulink 데이터 사전에 유형 생성).
MATFile
과DataDictionary
쌍 인수를 사용하십시오.함수가 일반 C 데이터형을 해석하는 방식을 제어합니다.
HardwareImplementation
쌍 인수를 사용하십시오.업데이트된 C 코드 정의를 다시 가져오도록 시도하여 C 코드 정의와 Simulink 표현 사이의 동기화 상태를 유지합니다. 기존 Simulink 표현을 덮어쓸지 여부를 선택할 수 있습니다.
Overwrite
와Verbose
쌍 인수를 사용하십시오.
예제
입력 인수
출력 인수
제한 사항
이 함수는 다음을 지원하지 않습니다.
Simulink가 지원하는 유형에 해당되지 않는 C 데이터형. 예를 들어, Simulink는
long double
에 상응하는 데이터형을 인식하지 못합니다. Simulink가 지원하는 데이터형에 대한 자세한 내용은 Simulink에서 지원되는 데이터형 항목을 참조하십시오.포인터 유형(예: 값이 포인터인 필드를 정의하는 구조체 또는 기본 유형이 포인터 유형인
typedef
문).공용체(union).
구조체 필드가 고정소수점 데이터를 나타내거나
typedef
문이 고정소수점 기본 유형에 매핑되면, 이 함수는 해당 버스 요소 또는Simulink.AliasType
객체의 데이터형을 적절한 Simulink 정수형으로 설정합니다(예:int16
형). 코드 가져오기 툴이 C 코드 구문을 분석하여 고정소수점 스케일링을 결정할 수는 없습니다. 함수를 사용한 후에는fixdt
함수를 사용하여 버스 요소의 데이터형 또는Simulink.AliasType
객체의 기본 유형을 직접 지정해야 합니다.
팁
다음과 같은 경우에는 가져온 열거형 또는 구조체형을 정의하는 헤더 파일을 포함(
#include
)하도록 모델의 시뮬레이션 타깃 구성 파라미터를 구성해야 합니다.MATLAB Function 블록에서 해당 유형을 사용하는 경우. 가져온 버스 및 열거형의 유형 정의 제어하기 항목을 참조하십시오.
Stateflow® 차트에서 해당 유형을 사용하는 경우. Access Custom Code Variables and Functions in Stateflow Charts (Stateflow) 및 Integrate Custom Structures in Stateflow Charts (Stateflow) 항목을 참조하십시오.
C Function 블록 또는 C Caller 블록에서 해당 유형을 사용하는 경우.
해당 유형이
typedef
문으로 선언되지 않은 경우.
참고
typedef
문에 명명되지 않은 유형을 가져오기 위해서는 시뮬레이션 타깃 구성 파라미터 사용자 지정 코드 가져오기가 선택되어 있는지 확인하십시오. 이 파라미터는 기본적으로 선택되어 있습니다.기본적으로 이 함수는 다음과 같은 작업을 수행합니다.
가져온 열거형의 경우, Simulink 열거형 클래스는
Simulink.IntEnumType
에서 파생되므로 모델에서 시뮬레이션하거나 코드를 생성할 때 열거형은 타깃 하드웨어의 네이티브 정수 크기를 사용합니다. 프로덕션 장치 공급업체 및 유형과 프로덕션 하드웨어의 네이티브 워드 크기와 같은 모델 구성 파라미터를 사용하여 타깃 하드웨어의 특성을 지정합니다.가져온 구조체형의 경우는 다음과 같습니다.
이 함수는 필드가 수치적으로 복소수에 해당하는 Simulink Coder 구조체형 중 하나를 데이터형으로 사용할 때만 수치 복소수로 구조체 필드를 가져옵니다. 예를 들어, 외부 코드의 구조체 필드가 데이터형
cint8_T
형을 사용하면 함수는 데이터형이int8
형이고Complexity
속성이'complex'
로 설정된 버스 요소(Simulink.BusElement
객체)로 필드를 가져옵니다.중첩 구조체의 경우 함수는 고유한 구조체형마다 Bus 객체를 생성합니다.
가져온 구조체나 열거형의 경우 외부 코드에서
typedef
문을 사용하여 유형의 이름을 지정하면, 생성된 Bus 객체 또는 Simulink 열거형 클래스의 이름은typedef
이름과 일치합니다. 코드에서 유형의 이름을 지정하는 데typedef
문을 사용하지 않으면 이름이 헤더 파일 내 다른typedef
문에 정의된 유형 이름과 충돌하지 않는 한 객체나 클래스 이름은 태그 이름입니다. 이 경우 이 유형은 Simulink로 가져오지 않습니다. 태그 이름을 지정하지 않거나typedef
이름을 적용하지 않으면 Simulink는 객체나 클래스에 임의의 이름을 생성합니다.이 함수는 생성된 Simulink 표현을 시뮬레이션 및 코드 생성 용도로 가져온 것으로 구성합니다. 예를 들어, Bus 객체의 경우 함수는
DataScope
속성을'Imported'
로 설정하고HeaderFile
속성을 외부 헤더 파일의 이름으로 설정합니다. 이러한 Simulink 표현 중 하나를 사용하는 모델에서 시뮬레이션하거나 코드를 생성하려면 모델에서 헤더 파일을 사용할 수 있도록 해야 합니다.
예를 들어,
DataDictionary
쌍 인수를 사용하여Simulink.importExternalCTypes
에 사용하거나 생성할 파일을 지정할 때는 다음과 같이 합니다.사용할 기존 파일이 현재 폴더 또는 MATLAB 경로에 있으면 파일 경로를 지정하지 않아도 됩니다. 파일 경로 없이 파일 이름을 지정할 수 있습니다.
생성된 파일의 폴더 위치를 제어하려면 파일 이름과 함께 경로를 지정할 수 있습니다. 또한
OutputDir
쌍 인수도 사용할 수 있습니다.
버전 내역
R2017a에 개발됨