2013-10-09 2 views
2

답변 찾기가 오래되었습니다. 미안하지만 나는 그것을 정말로 발견 할 수 없다.링커 스크립트, init C 변수

저는 gcc, ld, gcc (어셈블러 컴파일 용)를 사용합니다.

SECTIONS 
{ 
    .text : *{.text} 
} 
LS_size = (SIZEOF(.text) + 2048) & (0xF800) >> 9 ; 

내가 어셈블러에서 사용 LS_size 시도 :

나는 LD 스크립트를 작성

_rom_size: 
.byte LS_size 

그 작업 벌금을,하지만 C 코드에 나는 변수에 값을 설정할 수 없습니다 :

struct my_struct vari = { 
    .codesize = LS_size, 
} 

외부 LS_ 크기 인 경우 :

error: initializer element is not constant 

ld 스크립트에서 생성 된 변수에서 상수 C 변수의 기본값을 어떻게 설정합니까?

+0

LS_size는 링커 스크립트 변수이므로 컴파일시 알 수 없습니다. C 코드에서'extern const size_t LS_size;'선언을 추가하고'vari.codesize'의 초기화를 어떤 함수로 옮길 수 있습니다. – Michael

+0

그럼 asm (.S) 소스를 컴파일합니다 : 0x00, (_rom_size). 하지만 그때 나는 그것을 가지고 링크 : 0x04. 이것은 링크 단계에 쓸 데이터가 어떤 객체 파일인지 지정할 수 있음을 의미합니다. 하지만 C 코드에서이 코드를 어떻게 써야할지 모르겠다. – ASM

+0

글쎄, 내가 틀릴 수도 있지만 구조체를 초기화 할 때 선언 할 때 RHS가 컴파일 타임 상수 여야한다고 생각합니다. 그러므로 나의 이전 코멘트에서 초기화를 옮길 것을 제안한다. – Michael

답변

0

또한 링커 스크립트 변수는 데이터 유형이 아닙니다. 그들은

그 bascially 당신이

0

쓰기 C에서 C로 & 변수 이름으로 무엇을 얻을 adresses- 표현하고 무엇을 저장 완전히 임의가 :

struct my_st { 
    long the_code_sz; 
}; 

struct my_st vv = { 
    .the_code_sz = ((long)(&LS_size)) 
}; 

그런 다음 당신이 사용할 수있는

vv.the_code_sz 

LS_size는 기호이며 해당 기호의 주소는 링커 스크립트에서 지정한 값입니다.