공부/RL78 2013. 4. 5. 20:08

 

2.1 시작 샘플 프로그램 시작 등록

 

 

 

시작 등록

프로젝트 생성시 시작은 기본 샘플 (표준 시작 라이브러리) 자동으로 연결되도록되어 있습니다. 따라서, 프로젝트 트리의 시작 폴더에 아무것도 등록되어 있지 않지만, 빌드는 문제없이 수행 있습니다.

그러나 사용자 시스템 쪽에서 시작을 수정해야 있다면, CubeSuite + 설치 폴더보다 시작 샘플 복사하고 원하는 프로젝트에 등록합니다. 필요한 시작 샘플 프로그램은 헤더 파일이 소스 파일이 하나 있습니다.

 

 

헤더 파일 : def.inc  

헤더 파일 : macro.inc  

소스 파일 : 표준 라이브러리를 사용하는 경우 cstart.asm 표준 라이브러리를 사용하지 않으면 cstartn.asm 3 개의 샘플 프로그램을 프로젝트 폴더에 복사하고 원본 파일 프로젝트에

등록하고,사용자 시스템 사정에 따라 내용을 수정합니다.

 

【주의 사항】 표준 시작 (라이브러리) 사용하지 않는 경우, 조립 옵션의 정의 매크로 항목에서 샘플 IF 제어 명령에서 참조하는 다양한 기호를 적절한 값으로 설정해야합니다. 따라서 시작에 관해서는 표준 시작 (라이브러리) 사용하는 것을 권장합니다.

 

 

표준 시작 사용 해제 만약 표준 시작이 아니라 사용자 시스템 고유의 시작을 사용하는 경우 컴파일 옵션설정이 필요합니다.

위의 설정은 표준 시작 사용을 해제합니다. 다음 페이지에서 위의 설정에서 사용 가능해진다

 

 

 

 

 

 

시작 샘플 프로그램입니다.

 

浮動小数点ライブラリの シンボル定義 (부동 소수점 라이브러리의 심볼 정의)

定義ドウェア初期化関数シンボル(사용자 정의 하드웨어 초기화 함수 기호)

スタックポインタやユ定義ドウェア初期化関数、スタック領域初期化関数C言語変数領域のスタトおよびエンドアドレスシンボルなどの外部参照指定 (스택 포인터와 사용자 정의 하드웨어 초기화 함수 스택 영역 초기화 함수 C 언어 변수 영역의 시작과 주소 기호 등의 외부 참조 지정)

スタック領域初期化関数シンボル (스택 영역 초기화 함수 기호)

スタック解決用シンボル (스택 해결 기호)

リセットベクタのスタトアッププログラムの先頭シンボル「_@cstart 」を設定 (리셋 벡터의 등록 시작 프로그램의 시작 기호 '_ @ cstart " 설정)

スタトアッププログラムの 先頭シンボル「_@cstart (시작 프로그램의 시작 기호 '_ @ cstart ")

 

レジスタバンクの設定(バンク0設定) (레지스터 뱅크의 설정 (뱅크 0으로 설정))

ミラー領域00000h0FFFFh/100001FFFFh)の設定 「ミラー領域指定」オプション(-mi)の反映

(미러 영역 (00000h ~ 0FFFFh/10000 ~ 1FFFFh) 설정 "미러 영역 지정"옵션 (-mi) 값을 반영)

スタックポインタの初期化(스택 포인터 초기화)

定義ドウェア初期化関数(사용자 정의 하드웨어 초기화 함수 호출)

スタック領域初期化 (스택 영역의 초기화)

saddr領域のゼロクリア (saddr 영역의 제로 클리어)

@@R_INITセクションから@@INITセクションへの初期値のコピ

(@ @ R_INIT 섹션에서 @ @ INIT 섹션에 초기 복사)

 

 

@@RLINITセクションから@@INITLセクションへの初期値のコピ

(@ @ RLINIT 섹션에서 @ @ INITL 섹션에 초기 값 복사)

@@DATAセクションのゼロクリア (@ @ DATA 섹션 제로 클리어)

@@DATALセクションのゼロクリア (@ @ DATAL 섹션 제로 클리어)

@@R_INISセクションから@@INISセクションへの初期値のコピ

(@ @ R_INIS 섹션에서 @ @ INIS 섹션에 초기 값 복사)

@@DATSセクションのゼロクリア (@ @ DATS 섹션 제로 클리어)

main関数 (main 함수 호출)

各種セクションの宣言 (각종 섹션 선언)

 

 

【주의 사항】 표준 시작 (라이브러리) 사용하지 않는 경우, 조립 옵션의 정의 매크로 항목에서 샘플 IF 제어 명령에서 참조하는 다양한 기호를 적절한 값으로 설정해야합니다. 따라서 시작에 관해서는 표준 시작 (라이브러리) 사용하는 것을 권장합니다.

 

 

1 : / *********************************************** ******************** /

2 : / * Sample for hdwinit.c * /

3 : / *************** ************************************************** ** /

4 : # pragma sfr / / Used Peripheral

5 :

6 : void hdwinit(void)

7 :

{8: / / 사용자 고유의 하드웨어 초기화 처리를 기술  

9 :}

 

hdwinit 함수는 주변 기능 (sfr) 초기 설정을하는 함수로 사용자가 필요에 따라 만들 있습니다.

hdwinit 함수를 작성하여 main 함수 실행 전에 초기 설정을 수있게됩니다.

사용자가 hdwinit 함수를 작성하지 않으면, 아무것도하지 않고 반환하는 함수가 연결됩니다.

 

 

 

사용자 정의 하드웨어 초기화 함수 (hdwinit 함수)

 

시작 샘플 프로그램은 main 함수 실행 전에 사용자 고유의 하드웨어 초기화 처리를위한 함수를 호출합니다.

함수는 "사용자 정의 하드웨어 초기화 함수"라고 함수 이름은 "hdwinit"인수와 반환 값은 모두 void 형입니다.

필요한 경우 원하는 함수를 정의하고 함수에 main 함수 실행 전에 하드웨어 초기화 처리를 기술하십시오.

예를 들어, 클럭 발생 회로 등의 설정을 기술하면 좋습니다.

또한, 사용자 정의 하드웨어 초기화 함수이다 hdwinit 함수를 반드시 작성해야한다 것은 없습니다.

만약 main 함수 실행 전에 하드웨어 초기화가없는 경우 작성도 문제 없습니다.

경우는 아무것도하지 않고 반환하는 컴파일러 제공 기능이 자동으로 연결되도록되어 있습니다.

다음 hdwinit 함수를 보여 둡니다.

 

: 고속 온칩 오실레이터를 CPU 클럭으로 사용하는

고속 시스템 클럭 (X1), 서브 시스템 클럭 (XT1) 발진시키는

 

# pragma sfr

void hdwinit(void)

{

CMC  = 0x51; / / X1 Clock Pin, SubClock Pin Enable

OSMC = 0x80; / / Used SubClock Only RTC & IntervalTimer

MSTOP = 0; / / X1 Clock is Ensable

XTSTOP = 0; / / Sub Clock is Ensble

HIOSTOP = 0; / / High Speed ​​OCO Enable

while(OSTC!  = 0xFF ) / / Wait X1 Stabilization Time (13.11ms (X1 =20MHz));

}


스택 해결 심볼 생성 시작 샘플 프로그램은 스택 포인터 설정에서 기호 이름 "_ @ STBEG" 참조하고 있습니다. 표준 시작을 사용하는 경우 원하는 기호는 자동으로 해결되기 때문에 옵션 설정은 필요하지 않지만 자신의 시작을 사용하는 경우 "스택 해결을위한 기호를 생성하는"옵션 (-s) 지정 필요합니다. 컴파일 옵션을 설정하여 스택 해결 심벌이다 "_ @ STBEG" "_ @ STEND" 생성됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2 메모리 매핑 near 영역과 saddr 영역 배치 섹션 (내장 ROM64K / 내장 RAM5.5K 바이트 버전)

 

near 영역과 saddr 영역 배치 섹션 near 영역과 saddr 영역 배치 섹션은 연결시 번지 지정에 제약이 있습니다. 다음 섹션 종별마다 배치 장소의 제약 메모리 매핑을 보여줍니다.

 

(1) @ @ BITS @ @ INIS @ @ DATS

섹션은 saddr 영역 안에, sfr 영역과 범용 레지스터 영역을 제외한 RAM 배치합니다. RL78/G14 내장 RAM5.5K 바이트 버전이면 FFE20h ~ FFEB3h 배치 가능합니다.

 

(2) @ INIT @ @ DATA

섹션은 데이터 near 영역 안에, sfr 영역과 범용 레지스터 영역을 제외한 RAM 배치합니다. RL78/G14 내장 RAM5.5K 바이트 버전이면 FE900h ~ FFEB3h 배치 가능합니다. 그러나 셀프 프로그래밍기능 데이터 플래시 기능 사용시는 라이브러리가 작업 영역으로 사용할 FE900H-FED09H 영역이 금지됩니다.

 

(3) @ @ CNST 섹션은 00000h ~ 0FFFFh 또는 10000h ~ 1FFFFh ROM 배치합니다. RL78/G14 내장 ROM64K / 내장 RAM5.5K 바이트 버전이라면 02000h ~ 0E8FFh 배치 가능합니다.

 

(4) @ @ R_INIT @ @ R_INIS 섹션은 ROM이면 무엇 번지에서 (다른 영역과 중복해야) 배치 가능합니다. RL78/G14 내장 ROM64K 바이트 버전이라면 00000h ~ 0FFFFh 배치 가능합니다.

 

(5) @ LCODE @ @ CODE 이러한 섹션은 코드 near 영역 ROM 배치합니다. RL78/G14 내장 ROM64K 바이트 버전이라면 00000h ~ 0FFFFh 배치 가능합니다.

【주의 사항】

(4) (5) 관해서는 벡터 테이블 영역 CALLT 테이블 영역 옵션 바이트 영역 온칩 디버그 보안 ID 영역 온칩 디버거 모니터 영역에서 사용하는 영역 배치 없습니다.

 

far領域 (데이터 far 영역)

far領域 (코드 far 영역)

 

far 영역 섹션 far 영역 배치 섹션은 연결시 번지 지정에 제약이 없습니다. ROM / RAM 배치에 오류가 없으면 아무 번지라도 메모리 매핑이 가능합니다.

 

(1) @ @ INITL @ @ DATAL 섹션은 RAM 배치합니다.

(2) @ @ CNSTL @ @ RLINIT @ @ LCODEL @ @ CODEL 섹션은 ROM 배치합니다.

 

 

@ @ CNST 데이터 센터 near 공간 배치이다.

그러나 ROM 영역이어야한다.

그래서 미러 영역에 미러되는 ROM 배치한다.

MAA = 1 ROM 영역이 존재하는 경우 MAA = 0 ROM 영역을 모든 코드 부분 near 영역으로 사용할 있으며 코드 효율성을 향상시킬

 

 

 

미러 영역

 

@ @ CNST 섹션은 본래 데이터 near 영역의 ROM 저장해야합니다.

그러나 데이터 near 영역에는 ROM 존재하지 않기 때문에, 00000h ~ 0FFFFh 또는 10000h ~ 1FFFFh ROM 배치합니다.

이유는 near 영역 수있는 상위 주소 4 비트 명령어 인출하면 자동으로 0 **** h, 데이터 액세스하면 자동으로 F **** h입니다.

따라서 @ @ CNST 섹션을 00000h ~ 0FFFFh 또는 10000h ~ 1FFFFh ROM 배치해도 미러 영역으로 데이터 near 영역 F0000h ~ FFFFFh (하위 16 비트는 동일한 주소)에서 리드 가능하기 때문입니다.

또한 00000h ~ 0FFFFh 또는 10000h ~ 1FFFFh 중을 미러 영역에 반영 시킬지는 다음 페이지의 옵션에 의해 결정하고 표준 시작에서 자동으로 옵션 설정 영역이 미러 영역에 반영됩니다.

【주의 사항】 표준 시작 (라이브러리) 사용하지 않는 경우, 조립 옵션의 정의 매크로 항목에서 "MIRROR" 적절한 값으로 설정해야합니다.

 

 

 

컴파일 옵션

메모리 모델

미러 영역 지정 : MAA = 0 (기본값) , MAA-1

 

 

미러 영역 지정 옵션

00000h ~ 0FFFFh 또는 10000h ~ 1FFFFh 중을 미러 영역에 반영 시킬지는 위의 "미러 영역 지정"옵션 (-mi)에서 결정합니다. 덧붙여 "미러 영역 지정"옵션의 설정 값은 표준 시작하면 프로그램에서 자동으로 반영됩니다.

또한 RL78/G14 내장 ROM64K / 내장 RAM5.5K 바이트 버전의 경우, 내장 ROM 00000h ~ 0FFFFh 밖에없고 미러되지 않는 부트 클러스터 영역이나 내장 RAM 제외하면 MAA = 0 (-mi0) 선택 가능 이어 미러 가능한 영역 02000h ~ 0E8FFh입니다.

 

【주의 사항】 표준 시작 (라이브러리) 사용하지 않는 경우, 조립 옵션의 정의 매크로 항목에서 "MIRROR" 적절한 값으로 설정해야합니다.

 

2.3 링크 지시어 링크 지시어는

링크 지시어는 링커에 사용 가능한 메모리 영역 세그먼트의 배치 , 링크시의 각종 지시하기위한 명령어이며, 파일로 작성합니다 .

링크 지시문에는 종류가 있습니다.  

메모리 지시어 · 구현 메모리 주소를 선언합니다. · 메모리를 여러 영역으로 분할하여 메모리 영역을 지정합니다.  

세그먼트 배치 지시어 세그먼트에 주소 또는 메모리 영역을 지정합니다.

 

메모리 지시어의 형식 MEMORY 메모리 영역 이름 : (시작 주소 크기)/ 메모리 공간 이름

세그먼트 배치 지시어의 형식

MERGE 세그먼트 이름 : AT (시작 주소)] [= 메모리 영역 이름] [/ 메모리 공간 이름

MERGE 세그먼트 이름 : 조인 속성][= 메모리 영역 이름] [/ 메모리 공간 이름

메모리 공간 이름, 결합 특성은 선택적이며, C 언어의 개발 단일 작동하면 지정할 필요가 없습니다.

 

(1) 메모리 지시어

 

구현 메모리 주소를 선언합니다.

메모리를 여러 영역으로 분할하여 메모리 영역을 지정합니다.

 

세그먼트 배치 지시어

세그먼트 (섹션) 주소 또는 메모리 영역을 지정합니다.

 

  1. 메모리 지시어의 형식 MEMORY 메모리 영역 이름 : (시작 주소 크기) / 메모리 공간 이름
  2. 세그먼트 배치 지시어의 형식 MERGE 세그먼트 이름 : AT (시작 주소)] [= 메모리 영역 이름] [/

     

    메모리 공간 이름 MERGE 세그먼트 이름 : 조인 속성] [= 메모리 영역 이름] [/ 메모리 공간 이름

    또한 C 언어로 개발하면 결합 특성을 지정할 필요가 없습니다. 외부 메모리를 연결할 때로드 모듈을 분리 사용합니다. 단일 동작에서 사용할 때는 설정해야합니다.

    메모리 지시문

    · ROM1 영역을 02000h에서 1000h 바이트 확보

    · ROM2 영역을 03000h에서 2000h 바이트 확보

    세그먼트 배치 지시문

    섹션 "@ @ CODE" 02500h에서 배포

    섹션 "@ @ LCODE" ROM2 영역 04500h에서 배포

    섹션 "@ @ R_INIS ''@ @ R_INIT" ROM2 영역에 배치

     

     

     

    링크 지시어 설명 링크 지시문을 포함하는 파일 확장자 dr 또는 dir 만듭니다.

    메모리 지시어는 영역을 정의합니다. 또한 영역 이름은 다음 규칙이 적용됩니다.

    메모리 영역 이름에 사용할 수있는 문자는 A ~ Z, a ~ z, 0 ~ 9, _,? @입니다.  

    그러나 0-9 메모리 영역 이름 앞에는 사용할 없습니다.

    대소 문자를 다른 문자로 구분합니다.  

    대소 문자를 혼합 있습니다.  

    메모리 영역 이름의 길이는昀大256 자입니다.  

    메모리 영역 이름은 전체 메모리 공간을 통해 하나 않으면 안됩니다.  

    숫자 상수를 작성하려면 10 진수 또는 16 진수를 작성할 있습니다.

    • 16 진수의 경우昀後 "H" 지정합니다. 또한, 선두가 A ~ F 경우는 앞에 "0" 지정합니다.

     

    세그먼트 배치 지시문에서는 세그먼트 (섹션) 지정한 메모리 영역에 또는 특정 번지에 배치합니다. 또한 C 언어로 개발을 경우, 세그먼트 이름에는 다음 규칙이 적용됩니다.

    세그먼트 이름 컴파일러가 생성 섹션 이름을 설명합니다.

    지정된 섹션이없는 경우 오류가 발생합니다.  

    동일한 섹션의 세그먼트 배치 지시문을 여러 지정하면 오류가 발생합니다.  

    숫자 상수를 작성하려면 10 진수 또는 16 진수를 작성할 있습니다.  

    • 16 진수의 경우昀後 "H" 지정합니다. 또한, 선두가 A ~ F 경우는 앞에 "0" 지정합니다.

     

     

    링크 지시문은 대상 장치에 따라 자동으로 사용된다 (기본)

    필요한 경우 링크 지시어 파일을 만들어 프로젝트에 등록

     

     

    링크 지시어 파일의 등록 만든 링크 지시어 파일은 프로젝트 트리에 등록합니다. 이렇게 만든 링크 지시어 파일의 내용에 따라 연결이 이루어집니다. 덧붙여 만든 링크 지시어 파일에 기술되지 않은 부분은 기본적으로 링크가 이루어집니다. 따라서 링크 지시어 파일에 만든 시스템의 모든 섹션의 배치 정보를 작성할 필요가 없습니다. 어떤 이유로 특정 섹션을 특정 메모리 영역과 특정 번지에 배치 때만 링크 지시어 파일에 설명을 실시하면 좋은 것입니다.

     

     

    링크 옵션

    입력 파일

    사용하는 링크 지시문 파일 : 없음 (기본)

    파일 이름

     

     

    링크 지시어 파일의 설정 링크 지시어 파일을 만들고 프로젝트 트리에 등록하면 자동으로 링크 옵션에서 입력 파일의 "사용하는 링크 지시어 파일"옵션이 설정됩니다.

     

    메모리 지시문

    · WORK 영역을 FFEB4h에서 76 바이트 확보

    · SADDR 영역을 FFE20h에서 148 바이트 확보

    · STACK 영역을 FFC20h에서 512 바이트 확보

    · RAM 영역을 FE900h에서 4896 바이트 확보

    세그먼트 배치 지시문

    · @ @ DATS @ @ INIS @ @ BITS SADDR 영역에 배치

    · @ @ INIT @ @ DATA RAM 영역에 배치

     

    スタック解決用シンボル (스택 해결 용 기호 )

    기본 설정에있어서, 스택 영역는 링커가 RAM 영역의 Gap (여유 공간) 찾아 , 동적으로 확보합니다

     

     

    스택 크기 변경 기본 설정에서 스택 영역은 링커가 RAM 영역의 가장 Gap (공간) 찾아 자동으로 확보합니다. 따라서 시스템의 스택 영역이 동작에 문제 없다 크기 확보되어 있는지 여부는 애매합니다. 만약 스택 공간을 정확하게 확보하는 경우, 스택 영역을 확보 링크 지시어 파일을 작성하고 등록해야합니다. 위의 예는 스택 영역을 영역 이름 "STACK"에서 FFC20h에서 512 바이트 확보 것입니다.

     

     

    스택 영역 이름 지정

    스택 영역 이름을 링크 지시어 파일에서 확보 경우, 이미 소개 "스택 해결을위한 기호를 생성하는"옵션 (-s) 해당 영역에서 스택 해결 심볼이 생성 되도록 스택 영역 이름을 지정합니다.

    위와 같이 "영역 이름"으로 링크 지시어 파일에서 생성 영역 이름 "STACK" 지정하여 해당 영역에서 스택 해결 심벌 "_ @ STBEG" "_ @ STEND" 생성 있습니다.

     

     

'공부 > RL78' 카테고리의 다른 글

RL78 컴파일러 사용 8  (0) 2013.04.05
RL78 컴파일러 사용 7  (0) 2013.04.05
RL78 컴파일러 사용 6  (0) 2013.04.05
RL78 컴파일러 사용 5  (0) 2013.04.05
RL78 컴파일러 사용 4  (0) 2013.04.05
RL78 컴파일러 사용 3  (0) 2013.04.05
posted by 큰파도

댓글을 달아 주세요