2013-12-13 10 views
0

gnu 링커가 메모리 블록을 결합하여 링커가 메모리를 할당 할 때 하나의 섹터 이름을 사용할 수있는 방법이 있습니까? 예를 들어메모리 블록을 하나의 섹터로 결합하는 gcc 링커

:

MEMORY 
{ 
    RAM1 (xrw)    : ORIGIN = 0x20000480, LENGTH = 0x0BB80 
    RAM2 (xrw)    : ORIGIN = 0x2001C000, LENGTH = 0x03C00 
} 

이 메모리는 메모리 블록 RAM1과 RAM2를 포함하는 우리의 부문을 차단이 될 수 있을까? 아래 내용을 참조하십시오.

.bss : 
{ 
    _bss_start = .; 
    *(.bss) 
    *(.bss.*) 
    *(COMMON) 
    _bss_end = .; 
} >RAM >RAM1 

답변

0

좋은 질문입니다. 이를 수행하는 방법은 여러 가지가 있습니다. 한 가지 방법은 실제로 어떤 파일의 BSS가 어디로가는 지 선택하여 BSS 섹션을 분할하는 것입니다.

MEMORY 
{ 
    RAM1 (xrw)    : ORIGIN = 0x20000480, LENGTH = 0x0BB80 
    RAM2 (xrw)    : ORIGIN = 0x2001C000, LENGTH = 0x03C00 
} 


SECTIONS 
    { 
      .bss1: 
      { 
        f1.o 
        . =+ 0x200; 
        f2.o (.bss) 
      } >RAM1 
      .bss2: 
      { 
        f3.o (.bss) 
        f4.o (.bss) = 0x1234 
      } >RAM2 
    } 

대신 각 파일 (당신이 작은 RAM/ROM 칩이있는 경우에만 유용)이 일을, 난 그냥 RAM2에 공통 예를 들어 배치하고 RAM1에 .bss라고하는 것이 좋습니다.