본문 바로가기

Hacked Brain/embeddedland.net

80c196kc - (3) 개발 환경 설정

출처 :
임베디드 커뮤니티 [W.O.E]
cafe.naver.com/okh0217

3.개발환경 설정

윈도용 기반에서 어플리케이션을 작성할때는 프로그램 짜서 컴파일 시켜버리면 된다.

실행파일이 어찌되든 그건 모두 OS가 알아서 해준다.


하지만 마이크로컨트롤用 프로그램은 실행 프로그램이 RAM에 저장하여 실행하는경우도 있고 ROM에서 실행하는 경우도 있다.

프로그래머 맘에 따라 실행파일의 실행번지가 틀리게 되는데 이것을 어디서 설정해주면 되는가?

바로 링커이다. 그외에 개발시 알아야할 툴의 설정에 대해 알아보자.


링커란?

컴파일후 생성된  목적 화일을 다른 목적 모듈과 연결하여 최후의 실행 화일을 만들어 내는 것  


스타트업 코드

C 프로그램을 할 때 꼭 하나 있어야 할 함수 바로 main이다. 그런데 이것은 누가 호출할까?

일반 PC용 어플리케이션에서는 OS가 그 역할을 한다.

그러나 마이크로컨트롤러에서는 그렇지 않은데 이 역할을 해주는 것이 스타트업 코드라고 불리는 cstart.asm 이다.


이제부터 메모리맵에 맞게 개발환경을 설정해주자.

램은 8000H부터 시작된다고 했다.

그러기위해서  설정해주어야할 것이 두가지가 있다.


cstartup 파일

main()도 하나의 함수이므로 startup 파일에서 이 함수를 LCALL로 호출한다.

아래는 cstartup.asm파일의 일부이다.


CSTART MODULE       MAIN

SP             EQU    18H

                 EXTRN _main

CSEG      AT            8000H

                 LD            SP,#0200H  ;내부 메모리에 스택 포인터 레지스터 설정 

                 LCALL      _main

                 LJMP        2200H


②link.bat

echo rom (8000h-0dfffh,0ff00h-0ffffh) &>> %1.cmd

echo ram (1ah-1ffh,0E000h-0Efffh) >> %1.cmd


프로그램을 짤때는 명령어가 어디에 저장될지 특정한 번지를 지정해주지 않아도 되지만 대신 링커에서 특정 메모리에 내용을 할당할수 있도록 지정해주어야 한다.


→RAM 섹션에는 리드/라이트가 모두 가능한 데이터가 들어간다. 어셈블리 언어에서 DSEG로 선언된 데이터 영역, C언어에서 변수로 정의된 값들이 들어가는 자리이다.


→ROM 섹션에는 CPU가 실행할 명령을 할당한다.


근데 8000H부터는 램인데 왜 롬으로 되 있냐고?

링커에서는 프로그램이 들어갈 영역을 롬이라고 본다.(물리적으로는 램 영역이지만)