- 확장 언어 사양
- 키워드
키워드 목록
【주】 * ANSI-C 언어 사양 만 허용-za 옵션 지정시에는 무효가 됩니다
키워드 목록 RL78 패밀리 용 컴파일러는 위에 설명 된 키워드를 지원하고 있습니다.
또한 자세한 내용은 2 장 이상 차례로 소개합니다.
그러나이 텍스트는
• ASM 글
• 절대 번지 배치 지정은 소개하지 않습니다.
이러한 키워드에 대해서는 설명서를 참조하십시오.
다음 페이지에 2 진 상수를 설명하는 키워드의사용을 보여줍니다.
소스 프로그램 컴파일 결과
정수가 기술 가능한 위치에 2 진 상수를 작성할 수 있습니다. ·
이진 상수는 접두사 0b 또는 0B를 작성하고 0 또는 1의 숫자로 표시합니다
이진 상수 RL78 패밀리 용 컴파일러는 소스 프로그램 중에 2 진수 상수가 설명 가능합니다.
이진 상수는 접두사 "0b"또는 "0B"을 작성하고 다음 0 또는 1 열에서 숫자를 표현합니다.
ANSI 규정 외의 기능을 무효로하고, ANSI 규정의 일부 기능을 사용합니다.
구체적으로는 다음 작업을 수행합니다.
□ 다음은 예약어는 없습니다. callt / sreg / bit / boolean/ # asm / # endasm
□ 트라이 그래프 시퀀스 (3 문자 표기)이 적용됩니다.
□ 컴파일러 정의 매크로 __STDC__는 1이됩니다.
□ far 포인터의 관계 연산을 3 바이트로 실시하는 것으로, 데이터를 64K 바이트의昀後의 1 바이트에 배치 가능합니다.
□ int 형 이외의 비트 필드에 다음 경고를 출력합니다.(CC78K0R warning W0787 : Bit field type is not int)
□ -qc-zp-zc 옵션에 대해-w2 지정시 다음 경고를 출력합니다.
(CC78K0R warning W0029 : '-qc'option is not portable)
(CC78K0R warning W0031 : '-zp'option is not portable)
(CC78K0R warning W0032 : '-zc'option is not portable)
□ 각종 # pragma 문에,-w2 지정시 다음 경고를 출력합니다.
(CC78K0R warning W0849 : # pragma statement is not portable)
□ __asm 문장에 대해,-w2 지정시 다음 경고를 출력하고 어셈블 출력됩니다.
(CC78K0R warning W0850 : Asm statement is not portable)
□ # asm ~ # endasm 블록에-w2 지정시 다음의 오류 등을 출력합니다.
(CC78K0R error E0801 : Undefined control 등)
ANSI-C 언어 사양 만 허용 옵션
"ANSI 표준을 준수하는"옵션 (-za)을 '예'로 설정 한 경우, 위의 항목이 변경됩니다.이 안에 1-26 페이지에서 소개 한 키워드의 일부가 무효화와 비트 필드의 형태 지정자로서, int 형 이외의 것을 사용하면 경고가 출력되는 것이 중요합니다.
또한, 위의 슬라이드에있는 옵션의 내용은 다음과 같습니다. •-qc : "char 형을 unsigned char로 간주"옵션 (3-8 참조) •-zp : "C + + 형식의 주석 허용"옵션 (컴파일 옵션 확장 카테고리) •-zc : "댓글 중첩 허용"옵션 (컴파일 옵션 확장 카테고리) •-w2 : " 경고 수준 "옵션에 대한 자세한 출력 (컴파일 옵션 메시지 범주)
1.5.2 섹션 구성 near 공간 배치의 C 프로그램이 사용하는 메모리 영역
항 번
배치되는
섹션 이름
세그먼트 유형
재배치 특성
배치
1
함수
@ @ CODE
CSEG
BASE
000CEh ~ 0FFFFh
2
라이브러리 함수
@ @ LCODE
CSEG
BASE
000CEh ~ 0FFFFh
3
값을 변경하지 정적 변수
@ @ CNST
CSEG
MIRRORP
미러 영역에 미러되는 ROM
4
초기 값이없는 정적 변수
@ @ DATA
DSEG
BASEP
saddr 영역을 제외한 내장 RAM
5
초기 값의 정적 변수
@ @ INIT
DSEG
BASEP
saddr 영역을 제외한 내장 RAM
6
초기 값의 정적 변수의 초기 값
@ @ R_INIT
CSEG
UNIT64KP
64K 경계를跨が않는 ROM
far 영역 배치 C 프로그램이 사용하는 메모리 영역
항 번
배치되는
섹션 이름
세그먼트 유형
재배치 특성
배치
1
함수
@ @ CODEL
CSEG
-
2
라이브러리
함수
@ @ LCODEL
CSEG
-
3
값을
변경하지 정적 변수
@ @ CNSTL
CSEG
PAGE64KP
64K 경계를跨が않는 ROM
4
초기 값이없는 정적 변수
@ @ DATAL
DSEG
UNIT64KP
64K 경계를跨が않는 RAM
5
초기 값의 정적 변수
@ @ INITL
DSEG
UNIT64KP
64K 경계를跨が않는 RAM
6
초기 값있는 정적 변수의 초기 값
@ @ RLINIT
CSEG
UNIT64KP
64K 경계를跨が않는 ROM
saddr 공간 배치의 C 프로그램이 사용하는 메모리 영역
항 번
배치되는
섹션 이름
세그먼트 유형
재배치 특성
배치
1
초기 값없이 sreg 변수
@ @ DATS
DSEG
SADDRP
saddr 영역
2
초기 값이 sreg 변수
@ @ INIS
DSEG
SADDRP
saddr 영역
3
초기 값이 sreg 변수의 초기 값
@ @ R_INIS
CSEG
UNIT64KP
64K 경계를跨が않는 ROM
4
bit 형 변수
@ @ BITS
BSEG
-
saddr 영역
다른 C 프로그램이 사용하는 메모리 영역
항 번
배치되는
섹션 이름
세그먼트 유형
재배치 특성
배치
1
callt 함수 테이블
@ @ CALT
CSEG
CALLT0
callt 테이블 영역
2
인터럽트 함수 c allt 함수
@ @ BASE
CSEG
BASE
000CEh ~ 0FFFFh
3
벡터 테이블
@ @ VECTnn
CSEG
AT 00mmH
고정 영역
섹션 구성 RL78 패밀리 용 컴파일러가 사용하는 섹션 구성 (기본) 목록을 보여줍니다. 링크의 링크 지시어는 섹션 단위로 번지 지정을 실시하기 때문에, C 언어 소스 프로그램과 섹션의 관계는 이해해야합니다.
소스 프로그램 컴파일 결과
함수 섹션 이름
near 공간 배치의 함수는 섹션 이름 "@ @ CODE"에 할당합니다. 섹션 "@ @ CODE"세그먼트 유형은 "CSEG"재배치 속성은 "BASE"입니다. far 공간 배치의 함수는 섹션 이름 "@ @ CODEL"에 할당합니다. 섹션 "@ @ CODEL"세그먼트 유형은 "CSEG"입니다.
라이브러리 함수 섹션 이름
near 공간 배치의 라이브러리 함수는 섹션 이름 "@ @ LCODE"에 할당합니다. far 공간 배치의 라이브러리 함수는 섹션 이름 "@ @ LCODEL"에 할당합니다.
* : 정렬 조건을 조정하기 위해 사용하지 않는 영역
값을 변경하지 정적 변수 섹션 이름
near 영역 배치의 값을 변경하지 정적 변수는 섹션 이름 "@ @ CNST"에 할당합니다. 섹션 "@ @ CNST"세그먼트 유형은 "CSEG"재배치 속성은 "MIRRORP"입니다. far 공간 배치의 값을 변경하지 정적 변수는 섹션 이름 "@ @ CNSTL"에 할당합니다. 섹션 "@ @ CNSTL"세그먼트 유형은 "CSEG"재배치 속성은 "PAGE64KP"입니다.
초기 값없이 정적 변수 섹션 이름
near 공간 배치의 초기 값없이 정적 변수는 섹션 이름 "@ @ DATA"에 할당합니다. 섹션 "@ @ DATA"세그먼트 유형은 "DSEG"재배치 속성은 "BASEP"입니다. far 공간 배치의 초기 값없이 정적 변수는 섹션 이름 "@ @ DATAL"에 할당합니다. 섹션 "@ @ DATAL"세그먼트 유형은 "DSEG"재배치 속성은 "UNIT64KP"입니다.
소스 프로그램 컴파일 결과
* : 정렬 조건을 조정하기 위해 사용하지 않는 영역
초기 값이 정적 변수 섹션 이름
near 영역 배치 값을 초기 값이 정적 변수는 섹션 이름 "@ @ INIT"에 할당합니다. 섹션 "@ @ INIT"세그먼트 유형은 "DSEG"재배치 속성은 "BASEP"입니다. far 공간 배치의 초기 값이 정적 변수는 섹션 이름 "@ @ INITL"에 할당합니다. 섹션 "@ @ INITL"세그먼트 유형은 "DSEG"재배치 속성은 "UNIT64KP"입니다.
초기 값이 정적 변수의 초기 값의 섹션 이름
near 공간 배치의 초기 값이 정적 변수의 초기 값은 섹션 이름 "@ @ R_INIT"에 할당합니다. 섹션 "@ @ R_INIT"세그먼트 유형은 "CSEG"재배치 속성은 "UNIT64KP"입니다. far 공간 배치의 초기 값이 정적 변수의 초기 값은 섹션 이름 "@ @ RLINIT"에 할당합니다. 섹션 "@ @ RLINIT"세그먼트 유형은 "CSEG"재배치 속성은 "UNIT64KP"입니다.
소스 프로그램 컴파일 결과
· sreg / __sreg 선언 된 정적 변수는 saddr 영역에 자주 나타납니다.· saddr 영역에 대한 명령은 일반적으로 메모리에 대한 명령보다 짧은 코드 효율이 향상됩니다.
· saddr 영역 FFE20H ~ FFEB3H (148 바이트)에 배치 가능합니다.
sreg / __sreg 선언
sreg 선언 또는 __sreg 선언 된 외부 변수 및 함수에 static 변수 (이하 sreg 변수라고 부른다)는 saddr 영역에 할당합니다. saddr 영역에 대한 명령은 일반적으로 메모리에 대한 명령보다 짧은 코드 효율성을 향상시킬 수 있습니다.
또한 saddr 영역 FFE20H ~ FFEB3H까지 148 바이트입니다. 이러한 영역을 초과하는 경우 컴파일 오류가 발생합니다.
【작성 방법】 sreg 형명 변수 이름 / sreg static 형명 변수 이름 __sreg 형명 변수 이름 / __ sreg static 형명 변수 이름 extern sreg 형명 변수 이름 / extern __ sreg 형명 변수 명
【제한 사항】
• const 형, 또는 함수에 sreg / __sreg을 지정한 경우 경고 메시지를 출력하고 sreg 선언을 무시합니다. • "ANSI-C 언어 사양 만 허용"옵션 (-za) 지정시는 __sreg에만 유효합니다. • 2 바이트 크기의 변수의 경우 1로드 모듈 당 74 개까지 사용할 수 있습니다. 그러나 bit, boolean
형 변수를 사용하는 경우 사용할 수있는 개수는 줄어 듭니다.
소스 프로그램 컴파일 결과
* :정렬 조건을 조정하기 위해 사용하지 않는 영역
초기 값없이 sreg 변수 섹션 이름
초기 값없이 sreg 변수는 섹션 이름 "@ @ DATS"에 할당합니다. 섹션 "@ @ DATS"세그먼트 유형은 "DSEG"재배치 속성은 "SADDRP"입니다.
초기 값이 sreg 변수 섹션 이름
초기 값이 sreg 변수는 섹션 이름 "@ @ INIS"에 할당합니다. 섹션 "@ @ INIS"세그먼트 유형은 "DSEG"재배치 속성은 "SADDRP"입니다.
초기 값이 sreg 변수의 초기 값의 섹션 이름
초기 값이 sreg 변수의 초기 값은 섹션 이름 "@ @ R_INIS"에 할당합니다. 섹션 "@ @ R_INIS"세그먼트 유형은 "CSEG"재배치 속성은 "UNIT64KP"입니다.
saddr 영역의 자동 할당 옵션 전항에서 소개 한 sreg 변수는 함수 내 static 변수이면 "static 변수를 saddr 영역에 할당"옵션 (-rs) 외부 변수 및 함수 외부 static 변수 경우 "외부 변수 를 saddr 영역에 할당 "옵션 (-rd)에 의해 자동으로 saddr 영역에 할당 할 수 있습니다.
소스 프로그램 컴파일 결과
· bit / boolean 형 변수는 1 비트의 데이터로 간주, saddr 영역에 배치됩니다.
· bit / boolean 형 변수는 초기 값없이 외부 변수처럼 취급합니다.
· 이 비트 변수에 컴파일러는 비트 조작 명령을 출력합니다. · 정수 sreg 변수 (배열 요소, 구조체 제외)는 자동으로 bit 형 변수로 사용할 수 있습니다.
bit 형 변수 (bit), boolean 형 변수 (boolean / __boolean)
bit / boolean / __boolean 형 변수는 1 비트의 데이터 (이하, bit 형 변수라고 부른다)로 다루어 져 saddr 영역에 배치됩니다. 이러한 bit 형 변수는 초기 값없이 외부 변수처럼 취급 원하는 bit 형 변수에 컴파일러는 비트 조작 명령을 출력합니다. 또한 전 페이지까지 소개 한 sreg 변수 (배열의 요소 구조는 제외)는 자동으로 bit 형 변수로 사용할 수 있습니다.
【작성 방법】
bit 변수 이름 / boolean 변수 이름 / __ boolean 변수 이름 extern bit 변수 이름 / extern boolean 변수 이름 / extern __ boolean 변수 이름 변수 이름. n (n은 0 ~ 31, n의 값은 형태에 따라 달라집니다)
【제한 사항】
• 배열 요소, 구조체 / 공용체의 멤버 함수의 인수, 자동 변수의 형식으로 사용할 수 없습니다.
• 초기 값이하고 선언 할 수 없습니다. 또한 주소 참조, sizeof 연산을 수행 할 수 없습니다.
• "ANSI-C 언어 사양 만 허용"옵션 (-za) 지정시는 __boolean에만 유효합니다.
• bit 형 변수 만 1로드 모듈 당昀大1184 개까지 사용할 수 있습니다. 그러나 sreg 변수를 사용했을 경우와 "saddr 공간 할당"옵션 (-rs-rd)을 지정하면 사용 가능한 개수가 줄어 듭니다.
bit 형 변수 섹션 이름 bit 형 변수는 섹션 이름 "@ @ BITS"에 할당합니다. 섹션 "@ @ BITS"세그먼트 유형은 "BSEG"입니다.
# pragma section 컴파일러 출력 섹션 이름 변경 섹션 이름 [AT 시작 주소]
□ 컴파일러 출력 섹션 이름 변경 시작 주소를 지정합니다.
□ 시작 주소를 생략하면 기본 배치됩니다.
□ 컴파일러 출력 섹션 이름과 기본 배치는 1.5.2 항을 참조하십시오.
□ 시작 주소는 생략하고 링크 할 때 지정할 수 있습니다.
예 1 # pragma section @ @ CODE? CODE / / @ @ CODE 섹션을? CODE 변경
__near void sub(void){}
예 2 # pragma section @ @ DATA? DATA AT 0xFED00 / / @ @ DATA 섹션 을? DATA로 변경
__near int na; // 0xFED00 번지에 위치
# pragma section @ @ DATA @ @ DATA/ / 이후는 기본 설정으로 복원
__near int nb; // @ @ DATA 섹션에 배치
예 3 # pragma section @ @ INIT ABC / / @ @ INIT 섹션을 ABC로 변경
__near int nc = 1;/ / 그러나 @ @ R_INIT 그대로
# pragma section @ @ INIT XYZ/ / @ @ INIT 섹션을 XYZ로 변경
# pragma section @ @ R_INIT VW/ / @ @ R_INIT 섹션도 VW 변경
__near int nd = 2;
# pragma section으로 섹션 이름 변경
컴파일러가 기본적으로 사용하는 섹션 이름은 # pragmasection 따라 변경 가능합니다.
단순히 "변경하려는 컴파일러 출력 섹션 이름"과 "수정 된 부분 이름"을 지정합니다.
또한, 시작 주소 지정은 선택적이며 생략했을 때는 2 장의 링크 지시어 결정합니다. 다음 # pragma section을 사용할 때의주의 사항을 언급한다.
• # pragma 지시자는 C 언어 소스 맨 위에합니다.
• 그러나 다음은 # pragma 지령 전에 설명 할 수 있습니다.
- 댓글 - 전처리 지침 중 변수의 정의 / 참조 함수의 정의 / 참조를 생성하지 않습니다
• # pragma 지시문이 작성된 이후에 데이터를 작성하는 경우, 그 데이터를 변경 섹션에 배치합니다.
• 다시 변경 지령도 가능하며, 재 변경 지령 이후에 데이터를 작성하는 경우, 그 데이터를 다시 변경 섹션에 배치합니다.
• 이전에 정의 된 데이터를 변경 한 후 다시 정의하면 다시 변경된 섹션에 배치합니다.
• # pragma 이후 설명하는 키워드 중 컴파일러 출력 섹션 이름은 반드시 대문자로하십시오.
• section, AT는 대문자 소문자도 대소 문자 혼합으로 작성할 수 있습니다.
• 변경 섹션 이름의 형식은 어셈블러의 사양을 준수합니다 (세그먼트 이름은 8 자까지 가능).
• 시작 주소는 C 언어의 16 진수 및 어셈블러의 16 진수에만 적용 할 수 있습니다.
(주) 시작 샘플 프로그램과의 관계 초기 값의 정적 변수 섹션 이름을 변경하기 때문에 있으면
변수 / 기본값 함께 섹션 이름을 변경하는 것을 권장합니다. 이유는 제 2 장의 샘플에서는 초기 값을 복사와 대상 섹션 이름을 1 대 1로 결정되기 때문입니다.
# pragma section 예제
__near 공간 배치의 함수 섹션 이름
첫 줄 # pragmasection는 __near 공간 배치의 함수 섹션 이름을 변경 한 것입니다. 컴파일 결과의 첫 번째 행이 나타내는대로, sub 함수는 섹션 이름 "? CODE"에 할당됩니다.
__near 공간 배치의 초기 값이없는 변수 섹션 이름
4 번째 줄의 # pragmasection는 __near 공간 배치의 초기 값이없는 변수 섹션 이름을 변경 한 후 묘비 주소 지정도 한 것입니다. 컴파일 결과 4 번째 줄에서 알 수 있듯이 변수 na 시작 주소 "0FED00h"섹션 이름 "? DATA"에 할당됩니다.
그러나 6 번째 줄의 # pragma section으로 __near 공간 배치의 초기 값이없는 변수는 기본 섹션에 다시 있기 때문에 변수 nb 기본 할당됩니다.
__near 공간 배치의 초기 값이있는 변수 섹션 이름
초기 값의 정적 변수는 두 섹션에 할당됩니다. 9 번째 줄의 # pragma section은 __near 공간 배치의 변수 섹션 이름을 변경 한 것입니다. 따라서 컴파일 결과 10 번째 줄에서 알 수 있듯이 변수 nc가 할당 섹션 이름은 "ABC"로 변경이됩니다 만, 초기 값을 할당 섹션 이름은 컴파일 결과 13 행에서 알 수 있듯이, 기본값 의 "@ @ R_INIT"입니다.
한편, 11 번째 줄에서 12 번째 줄의 # pragmasection에서 변수 할당 섹션 이름과 함께 초기 값 섹션 이름도 수정하고 있습니다. 따라서 컴파일 결과 16 번째 줄과 19 번째 줄에서 알 수 있듯이 변수 섹션 이름은 "XYZ"초기 값 섹션 이름은 "VW"입니다.
1.5.3 매크로 이름
매크로 이름 목록
매크로 이름
정의
__LINE__
그 시점에서 소스 줄 번호 (10 진수)
__ FILE__
지정된 소스 파일의 이름 (문자열 상수)
__ DATE__
소스 파일의 번역 날짜 ( "M mm dd yyyy "형식을 가진 문자열 상수 여기서 월 이름은 ANSI 규격에서 규정 된 a sctime 함수로 생성되는 것 (영문자 3 자 줄로昀初의 1 문자 만 대문자)와 동일 . dd의昀初문자 값이 10보다 작은 경우 공백합니다)
__ TIME__
소스 파일의 번역 시간 (as ctime 함수로 생성되는 시간과 같은 "hh : mm : ss"의 형식을 가지는 문자 열 상수)
__ STDC__
10 진수 정수 1 (ANSI에 정확한 처리를 지정할 때 정의)*
__ K0R__
10 진수 정수 1
__ K0R_SMALL__
10 진수 정수 1 (소형 모델 지정시)
__ K0R_MEDIUM__
10 진수 정수 1 (미디엄 모델 지정시)
__ K0R_LARGE__
10 진수 정수 1 (대형 모델 지정시)
__ CHAR_UNSIGNED__
10 진수 정수 1 (-qu 옵션을 지정한 경우 정의)
__ RL78__
10 진수 정수 1 (RL78 패밀리 장치 유형 지정시)
__ RL78_1__
10 진수 정수 1 (곱셈과 나눗셈 적화算확장 명령어 비 탑재의 RL78 패밀리 장치 유형 지정시)
__ RL78_2__
10 진수 정수 1 (곱셈과 나눗셈 적 일본 재래의 주산 확장 명령 탑재의 R L78 제품군의 디바이스 유형 지정시)
__ CA78K0R__
10 진수 정수 1
CPU 매크로
타겟 CP U를 나타내는 매크로 에서 10 진수 정수 1 장치 파일의 "품종 지정 이름"으로 표시되는 문자열의 앞에 "__"과 끝에 "_"를 붙인 것이 정의됩니다 (영문자는 대문자로하십시오)
【주】 * ANSI-C 언어 사양 만 허용-za 옵션 지정시에 정의합니다
매크로 이름 목록 RL78 패밀리 용 컴파일러는 ANSI 규격에 규정되어있는 매크로 이름 이외에 옵션 지정에 따라 위 의 매크로 이름이 정의됩니다. 프로그램 속에서 옵션 설정을 판단 할 때 사용합니다.
'공부 > RL78' 카테고리의 다른 글
RL78 컴파일러 사용 7 (0) | 2013.04.05 |
---|---|
RL78 컴파일러 사용 6 (0) | 2013.04.05 |
RL78 컴파일러 사용 4 (0) | 2013.04.05 |
RL78 컴파일러 사용 3 (0) | 2013.04.05 |
RL78 컴파일러 사용 2 (0) | 2013.04.05 |