본문 바로가기
CAPL

CAPL 기본 문법 정리

by Autosar 2026. 4. 9.
반응형

이전 글에서 CAPL이 무엇인지 알아봤다면
이번에는 실제로 코드를 작성하기 위한 기본 문법을 정리해본다.

CAPL은 C 언어와 매우 유사하지만,
차량 통신에 특화된 구조를 가지고 있기 때문에 몇 가지 중요한 차이가 존재한다.

 

CAPL 전체 구조

 

CAPL은 크게 4가지 영역으로 구성된다.

includes
{
}

variables
{
}

on start
{
}

on message CAN_Message1
{
}

 

- `includes` : 외부 파일 포함
- `variables` : 전역 변수 선언
- `on ~` : 이벤트 기반 실행 블록

 

핵심은 CAPL 은 main 함수가 없다. 이벤트 기반이다.

 

변수 선언 (Variables)

 

C와 거의 동일하지만 일부 타입이 추가되어 있다.

variables
{
    int count;
    float speed;
    msTimer timer1;
    word gwWHL_Speed;
    byte data[8];
    byte glWHL_01_10ms = 0;
}

 

이벤트 기반 함수 (Event Handler)

 

CAPL의 핵심이다. 특정 이벤트에서 코드가 실행된다.

 

1) 시작 이벤트

on start
{
    write("시작됨");
}

 

2) 메시지 수신 이벤트

on message CAN_Message1
{
    write("메시지 수신");
}

 

3) 타이머 이벤트

on timer timer1
{
    write("타이머 실행");
}

 

4) 타이머 사용법

CAPL에서 매우 자주 사용하는 기능이다.

variables
{
    msTimer timer1;
}

on start
{
    setTimer(timer1, 1000); // 1초
}

on timer timer1
{
    write("1초 주기 실행");
    setTimer(timer1, 1000);
}

 

특징:
- ms 단위 사용 (1000 이면 1000ms 이므로 1s)
- 반복 실행하려면 다시 setTimer 호출 필요

 

5) 메시지 송신

variables
{
    message CAN_Message1 msg;
}

on start
{
    msg.dlc = 8;
    msg.byte(0) = 0x11;
    msg.byte(1) = 0x22;

    output(msg);
}

 

- `message` 타입 선언
- `output()`으로 송신

 

6) 메시지 데이터 접근

on message CAN_Message1
{
    int data;

    data = this.byte(0);

    write("data = %d", data);
}

 

- `this`는 현재 수신된 메시지를 의미한다.

 

7) 조건문 / 반복문

C와 동일하게 사용 가능하다.

if (speed > 100)
{
    write("과속");
}
for (int i = 0; i < 8; i++)
{
    write("%d", this.byte(i));
}

 

정리

 

CAPL 문법은 어렵지 않다.

하지만 중요한 건 이벤트 기반 사고 방식이다.

 

- main 없음 → 이벤트 기반
- 메시지 / 타이머 중심 구조
- C 문법과 유사하지만 용도는 완전히 다름

반응형

'CAPL' 카테고리의 다른 글

CAPL 이벤트 함수 완전 정리  (0) 2026.04.12
CAPL 언어란?  (0) 2026.04.09