본문 바로가기

프로그래밍/[임베디드]

[임베디드] 심볼 SYMBOL

임베디드 레시피 블로그 요약본입니다

SYMBOL

  • linker가 알아볼 수 있는 기본 단위
  • Link이후 자신만의 주소를 갖게 됨.
  • symbol의 이름은 그 Symbol이 갖는 메모리 영역의 시작주소를 가리키는 linker만의 pointer
  • ELF object file 내에 symbol table 존재
  • Linker만이 symbol을 참조하며 linker는 Symbol들을 모두 주소로 변환해서 binary로 만듬-> 실제로 메모리에 올라가지 않음
  • 결국 자기 자신만의 주소를 갖는 단위

    Global과 SYMBOL

    • Global에는 함수, 전역변수, static변수
    • Local에는 나머지들
    • Global은 자기 자신만의 주소를 갖는다는 점에서 SYMBOL
    • 고유 주소를 갖기 때문에 다른 파일에서도 접근 가능
      • RW, ZI, RO

        • RW: read-write로서, 초기값이 있는 전역 변수
        • ZI: Zero-initialized로서, 초기값이 0인 전역 변수
        • RO: Read only로서 수정이 불가능한 const전역과 text인 code

        • Symbol 함수 .text RO
          전역변수
          static 변수
          .constdata
          .bss ZI
          .data RW
          Non Symbol 함수 Local 변수
          .bss:컴파일러와 링커가 처음에 0 값의 비트로 표현되는 정적으로 할당된 변수를 포함하는 데이터 새그먼트의 한 부분(block started section)

          ROM에 위치 RAM에 위치?

          • ROM은 전원이 꺼져도 데이터를 유지
          • RO는 code와 constdata니까 값을 유지하는 ROM에 위치
          • RW는 초기값을 가지고 있는 전역변수라 ROM과 RAM둘다 위치
          • ZI는 값이 모두 0이므로 RAM에 위치해도 됨

          나머지들은 어디에 위치 하느냐

          • Local변수는 stack에 위치
          • Dynamic Memory Allocation은 Heap에 위치
          • stack과 힙은 ZI영역에 있음
          • 임시적으로 사용기때문에 굳이 절대 주소 가질 필요가 없음

        bootLoader

        • RAM에 들어가야 하는 부분을 ROM으로 부터 copy해주는 프로그램.
        • NOR MCP에서는 RW, ZI, NAND MCP에서는 RO, RW, ZI로딩 필요

'프로그래밍 > [임베디드]' 카테고리의 다른 글

[임베디드]요약 RTOS, 커널 -1  (0) 2020.03.30