AT91SAM7S256

2013.04.23_ARM_cstartup.S읽어보기

성엽이 2013. 4. 23. 16:52

▶ ARM _ cstartup.S 알아보기



 ldr = load register

pc라는 load register에 _low_level_init 를 넣어라

-PC(program count) 


 -함수가 컴파일 하면 기계어로 바뀜.

-올리는 작업(로딩)


-기계어로 바뀐 함수의 시작주소를 CPU에 옮기는 작업(실행)

-CPU의 PC(IP:명령있는 포인터)

-EIP라고 한다. 인텔 32bit에서는 확장되어 이름이 Extention 이 붙음.


0.142번째줄에서 실행

1.reset-0번지로 보냄

2.reset handler 호출 

3.low_level_init

4. _lp_ll_init 

5. lowlevel_init 함수 실행 (LCD.c 에 있음, 전반적인 실행을 끌어올려줌)

... 순차적으로 실행해나감








▶ Lowlevel.c에서 35재 줄 ==발진기를 더 높게 올려주는 함수 




 -67: 점프 branch, 코드는 여기 없음 다른 곳에 있음.

-벡터 테이블: 점프할 수 있는 위치를 모아놓고 저장해 놓은 곳.

▶ _exception_vectors ( 예외 벡터 )

오류구문이나 리셋 등등의 일때 호출하는 부분






 위의 사진은 링커가 쓰는 소스


elf32 -링커가 사용

링커- 실제 실행파일과 플래시를 만들어 주는 곳

elf-파일포맷-파일을 어떤 모양으로 저장할지....

-파일 포맷은 운영체제마다 틀리다.

-littlearm 에서 little은 리틀방식을 얘기한다.

ARCH(arm)


ENTRY point(진입점)

-내가 만든 프로그램에서 제일 처음 실행 ex)main 함수


ENTRY(여기다 적는 것을 여기로 가져와라)

section-메모리의 5가지

code영역을 다른 말로 text라고도 함.


Heap 과 stack 영역표기가 없는 이유는 링커는 실행하기전에만 필요하므로 Heap, stack 은 필요없음.


▶ makefile 은 컴파일할때 쓰임.

▶ cstartup.S 은 실행할때 쓰임.

▶ elf32-littlearm.lds 는 실행하기전에 씀.