키워드
키워드
목록
【주】 * 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 규격에
규정되어있는
매크로
이름
이외에
옵션
지정에
따라
위
의
매크로
이름이
정의됩니다. 프로그램
속에서
옵션
설정을
판단
할
때
사용합니다.