주요 콘텐츠

동작 언어 구문으로서 MATLAB과 C의 차이점

Simulink® 모델의 Stateflow® 차트에는 상태 동작과 천이 동작의 구문을 정의하는 동작 언어 속성이 있습니다. 차트 캔버스의 왼쪽 아래 코너에 있는 아이콘은 다음과 같이 차트의 동작 언어를 나타냅니다.

  • MATLAB®이 동작 언어입니다.

  • C가 동작 언어입니다.

선택한 동작 언어는 상태 및 천이 동작을 작성하는 방식, 사용 가능한 연산, 차트가 코드를 생성하는 방식에 영향을 미칩니다.

MATLAB은 새로운 Stateflow 차트에 대한 디폴트 동작 언어 구문입니다. C를 동작 언어로 사용하는 차트를 만들려면 다음을 입력하십시오.

sfnew -c

동작 언어 선택하기

다음과 같은 작업에는 MATLAB을 동작 언어로 사용하십시오.

  • 알고리즘과 논리를 빠르게 반복해야 하는 프로토타이핑 및 신속한 개발.

  • 차트가 배열과 복잡한 수학 연산을 광범위하게 사용하는 행렬 및 벡터 연산.

  • 기존 MATLAB 함수 및 툴박스를 활용하려는 MATLAB 통합.

다음과 같은 작업에는 C를 동작 언어로 사용하십시오.

  • 실시간 시스템에서 최대 실행 속도가 필요한, 성능이 중요한 애플리케이션.

  • 리소스가 제한된 하드웨어를 위한 임베디드 타깃 및 코드 생성.

  • 예측 가능한 타이밍과 메모리 사용량이 필요한, 결정적 동작을 포함하는 애플리케이션.

동작 언어 간 차이점

MATLAB 동작 언어와 C 동작 언어는 구문, 지원되는 연산, 코드 생성 동작에서 차이가 있습니다. 다음 표에는 두 동작 언어 간의 가장 중요한 차이점이 나열되어 있습니다.

기본 연산

기능MATLAB을 동작 언어로 사용C를 동작 언어로 사용

증가 연산과 감소 연산

차트가 구문을 자동으로 MATLAB 구문으로 수정합니다. 예를 들어, a++a = a+1로 수정됩니다.

차트가 a++a--를 지원합니다. Stateflow 데이터에 대한 연산 항목을 참조하십시오.

대입 연산

차트가 구문을 자동으로 MATLAB 구문으로 수정합니다. 예를 들어, a += ba = a+b로 수정됩니다.

차트가 a += b, a –= b, a *= b, a /= b를 지원합니다. Stateflow 데이터에 대한 연산 항목을 참조하십시오.

비교 연산

a ~= b차트가 a != b!a 연산을 지원합니다. Stateflow 데이터에 대한 연산 항목을 참조하십시오.

주석 마커

%로 자동 수정.차트가 ///* */를 지원합니다. Stateflow 데이터에 대한 연산 항목을 참조하십시오.
조건문

상태 동작에서 if 문, for 문, while 문을 사용할 수 있습니다. 루프와 조건문 항목을 참조하십시오.

상태 동작에서만 지원됩니다.

루프 문

상태 동작에서 if 문, for 문, while 문을 사용할 수 있습니다. 루프와 조건문 항목을 참조하십시오.

루프 문은 지원되지 않습니다. 조건부 패턴과 루프 패턴의 경우 그래픽 함수를 대신 사용하십시오. 그래픽 함수를 정의하여 논리 패턴 재사용하기 항목을 참조하십시오.

인덱싱 및 데이터 처리

기능MATLAB을 동작 언어로 사용C를 동작 언어로 사용

벡터와 행렬 인덱싱

1부터 시작하는 인덱싱. 예: A(1,2). Stateflow에서의 벡터와 행렬에 대한 연산 항목을 참조하십시오.

0부터 시작하는 인덱싱. 예: A[0][1]. Stateflow에서의 벡터와 행렬에 대한 연산 항목을 참조하십시오.

인덱스 구분자

쉼표가 포함된 괄호. 예: A(1,2). Stateflow에서의 벡터와 행렬에 대한 연산 항목을 참조하십시오.

대괄호. 예: A[0][1]. Stateflow에서의 벡터와 행렬에 대한 연산 항목을 참조하십시오.

가변 크기 데이터

상태 동작과 천이 동작에서 가변 크기 차트 데이터를 수정할 수 있습니다. 자세한 내용은 MATLAB을 동작 언어로 사용하는 차트의 가변 크기 데이터 항목을 참조하십시오.

다음을 사용하여 가변 크기 차트 데이터를 수정할 수 있습니다.

  • MATLAB 함수

  • Simulink 함수

  • MATLAB을 동작 언어로 사용하는 진리표

가변 크기 데이터를 포함하는 모든 계산은 이러한 함수의 내부에서 수행되어야 하며, 상태나 천이에서 직접 수행되지 않아야 합니다. 자세한 내용은 C를 동작 언어로 사용하는 차트의 가변 크기 데이터 항목을 참조하십시오.

스칼라 확장

지원되지 않음.

지원됨. 값을 모든 요소에 대입하기 항목을 참조하십시오.
문자열 구분자

큰따옴표("...")를 구분자로 사용합니다. Manage Textual Information by Using Strings 항목을 참조하십시오.

큰따옴표("...") 또는 작은따옴표('...')를 구분자로 사용합니다. Manage Textual Information by Using Strings 항목을 참조하십시오.

복소수 데이터

복소수 표기법 a + bi 또는 complex 연산자를 사용합니다. Operations for Complex Data in Stateflow 항목을 참조하십시오.

complex 연산자를 사용하십시오. 복소수 표기법은 지원되지 않습니다. Operations for Complex Data in Stateflow 항목을 참조하십시오.

데이터형 전파

MATLAB 유형 지정 규칙을 따릅니다. 예를 들어, double형 데이터를 int32형 데이터에 추가하면 int32형 데이터가 됩니다.

C 유형 지정 규칙을 따릅니다. 예를 들어, double형 데이터를 int32형 데이터에 추가하면 double형 데이터가 됩니다.

고급 기능 및 코드 생성

기능MATLAB을 동작 언어로 사용C를 동작 언어로 사용

고정소수점 구문:

  • 특수 대입 연산자 :=

  • 컨텍스트 의존 상수, 예: 4.3C

지원되지 않음.

지원됨. Override Fixed-Point Promotion in C Charts 항목과 Fixed-Point Context-Sensitive Constants 항목을 참조하십시오.

명시적 형변환 연산

MATLAB 유형 변환 함수 또는 cast 함수를 사용합니다. type 연산자는 지원되지 않습니다. 형변환 연산 항목을 참조하십시오.

MATLAB 유형 변환 함수 또는 cast 함수를 type 연산자와 함께 사용합니다. 형변환 연산 항목을 참조하십시오.

점 표기법을 사용하여 MATLAB 함수 내에 상태, 로컬 데이터, 메시지, 로컬 이벤트 지정

지원됨. Identify Data by Using Dot Notation 항목을 참조하십시오.

지원되지 않음.

구조체 파라미터

조정 가능형 파라미터와 조정 불가형 파라미터가 지원됩니다.

조정 가능형 파라미터만 지원됩니다.

전역 fimath 객체 사용

지원됨.

지원되지 않음.

복소수 데이터

복소수 표기법 a + bi 또는 complex 연산자를 사용합니다. Operations for Complex Data in Stateflow 항목을 참조하십시오.

complex 연산자를 사용하십시오. 복소수 표기법은 지원되지 않습니다. Operations for Complex Data in Stateflow 항목을 참조하십시오.

MATLAB을 동작 언어로 사용하는 경우의 자동 수정

MATLAB을 동작 언어로 사용하는 Stateflow 차트는 다음 C 구문을 MATLAB 구문으로 자동 수정합니다.

  • a++a-- 같은 증가 연산 및 감소 연산. 예를 들어, a++a = a+1로 변경됩니다.

  • a += b, a –= b, a *= b, a /= b 같은 대입 연산. 예를 들어, a += ba = a+b로 변경됩니다.

  • a != b!a 같은 평가 연산. 예를 들어, a != ba ~= b로 변경됩니다.

  • 주석 마커 ///* */%로 변경됩니다.

이 기본 설정을 비활성화하려면 sfpref 함수를 사용하십시오.

sfpref(EnableLabelAutoCorrectionForMAL=false);

MATLAB을 동작 언어로 사용하는 경우의 지침

MATLAB을 동작 언어로 사용하는 차트에서 코딩할 때는 다음 지침을 따르십시오.

벡터와 행렬에 1부터 시작하는 인덱싱 사용하기

1부터 시작하는 인덱싱은 MATLAB 구문과 일치합니다. 자세한 내용은 인덱싱 표기법 항목을 참조하십시오.

대괄호가 아닌 소괄호를 사용하여 벡터와 행렬 인덱싱하기

다음 문은 유효합니다.

a(2,5) = 0;

다음 문은 유효하지 않습니다.

a[2][5] = 0;

자세한 내용은 인덱싱 표기법 항목을 참조하십시오.

주석에 MATLAB 형식 사용하기

MATLAB과의 일관성을 위해 %를 사용하여 상태와 천이에 주석을 지정하십시오. 예를 들어, 다음 주석은 유효합니다.

% This is a valid comment in the style of MATLAB

C 스타일의 주석(예: ///* */)은 %를 사용하도록 자동 수정됩니다.

천이 동작을 중괄호로 묶기

다음 천이 레이블에는 유효한 천이 동작이 포함되어 있습니다.

E [x > 0] / {x = x+1;}

다음 천이 레이블은 올바르지 않지만, 유효한 구문으로 자동 수정됩니다.

E [x > 0] / x = x+1;

조건 동작 및 천이 동작에 제어 흐름 논리를 사용하지 않음

제어 흐름 논리(예: if 문, switch 문, for 문, while 문)는 상태 동작에서만 지원됩니다. 조건 동작 또는 천이 동작에서 제어 흐름 논리를 사용하면 구문 오류가 발생합니다.

상태 동작에 전역 변수 또는 영속 변수를 선언하지 않음

키워드 globalpersistent는 상태 동작에서 지원되지 않습니다.

로컬 데이터와 출력 데이터에 초기값 할당하기

MATLAB을 동작 언어로 사용하는 경우 초기값이 없는 데이터를 읽으면 오류가 발생합니다.

열거형 값의 식별자에 대한 유형 접두사 포함하기

식별자 TrafficColors.Red는 유효하지만, Red는 유효하지 않습니다.

모델에서 코드를 생성하려면 코드 생성에 지원되는 MATLAB 언어 특징 사용하기

그 밖의 경우에는 coder.extrinsic을 사용하여 지원되지 않는 함수를 호출하면 생성된 코드에는 없는 시뮬레이션에 필요한 기능을 제공합니다. 지원되는 특징과 함수의 목록은 언어, 함수 및 객체 지원 (Simulink) 항목을 참조하십시오.

참고 항목

도움말 항목