임베디드 레시피 블로그 요약본입니다
SYMBOL
- linker가 알아볼 수 있는 기본 단위
- Link이후 자신만의 주소를 갖게 됨.
- symbol의 이름은 그 Symbol이 갖는 메모리 영역의 시작주소를 가리키는 linker만의 pointer
- ELF object file 내에 symbol table 존재
- Linker만이 symbol을 참조하며 linker는 Symbol들을 모두 주소로 변환해서 binary로 만듬-> 실제로 메모리에 올라가지 않음 결국 자기 자신만의 주소를 갖는 단위
- Global에는 함수, 전역변수, static변수
- Local에는 나머지들
- Global은 자기 자신만의 주소를 갖는다는 점에서 SYMBOL
- 고유 주소를 갖기 때문에 다른 파일에서도 접근 가능
- RW: read-write로서, 초기값이 있는 전역 변수
- ZI: Zero-initialized로서, 초기값이 0인 전역 변수
- RO: Read only로서 수정이 불가능한 const전역과 text인 code
- ROM은 전원이 꺼져도 데이터를 유지
- RO는 code와 constdata니까 값을 유지하는 ROM에 위치
- RW는 초기값을 가지고 있는 전역변수라 ROM과 RAM둘다 위치
- ZI는 값이 모두 0이므로 RAM에 위치해도 됨
- Local변수는 stack에 위치
- Dynamic Memory Allocation은 Heap에 위치
- stack과 힙은 ZI영역에 있음
- 임시적으로 사용기때문에 굳이 절대 주소 가질 필요가 없음
- RAM에 들어가야 하는 부분을 ROM으로 부터 copy해주는 프로그램.
- NOR MCP에서는 RW, ZI, NAND MCP에서는 RO, RW, ZI로딩 필요
Global과 SYMBOL
RW, ZI, RO
Symbol | 함수 | .text | RO |
전역변수 static 변수 |
.constdata | ||
.bss | ZI | ||
.data | RW | ||
Non Symbol | 함수 | Local 변수 |
ROM에 위치 RAM에 위치?
나머지들은 어디에 위치 하느냐
bootLoader
'프로그래밍 > [임베디드]' 카테고리의 다른 글
[임베디드]요약 RTOS, 커널 -1 (0) | 2020.03.30 |
---|