2016-12-14 8 views
0

사용자 응용 프로그램의 스택 위치를 변경하려고합니다. 우리 시스템에서는 사용자 애플리케이션이 자체 RAM 섹션 (Data + Stack)을 가지고 있으며, 링커는 사용자 RAM 섹션의 끝에 STACK을 놓는다. 하지만 끝 대신에 STACK을 넣어야합니다. 내가 변경 스택 위치의 위치를 ​​변경할 수있는 옵션을 제공하지 않습니다 Keil의 uVision IDE와의 Startup.s 파일의 Startup.s 파일 함께 일하고Startup.s 파일의 Cortex M3 스택 위치 변경

는, 아마도, 링커는

Stack_Size  EQU  0x00000200 

       AREA STACK, NOINIT, READWRITE, ALIGN=3 
Stack_Mem  SPACE Stack_Size 
__initial_sp 

그것은 가능하다 숨 깁니다 특별 주소 또는 특히 RAM 섹션의 시작 부분에서 스택을 찾으십니까?

감사합니다.

+0

링커 스크립트의 모양은 무엇입니까? 스택 섹션의 주소가 지정되는 곳이 아닙니까? –

+0

불행히도 uVision Project에는 링커 스크립트가 없습니다. 링커 스크립트는 GCC 컴파일러/링커와 함께 사용해야합니다. 난 그냥 startup.s 파일을 제공합니다. – muratcakmak

+0

나는 uVision이 어떻게 작동하는지 모르겠다 고 고백하지만, 어디 론가, 어떻게 든 링커는 어떤 것들이 메모리에 위치해야 하는지를 말해야 만한다. –

답변

0

스 캐터 파일을 사용하여 2 개의 영역을 RAM으로 만들고 * (스택) 지시문을 첫 번째에 넣으면 사용자 메모리가 시작되도록 스택과 스택이 위치합니다. 현재로서는 문제를 해결하지만보다 나은 해결책이있을 수 있습니다. 감사합니다. .

RW_IRAM1 0x10005000 0x00000200 { ; STACK 
    *(STACK) 
    } 
    RW_IRAM2 0x10005200 0x00000E00 { ; RW data 
    .ANY (+RW +ZI) 
    } 
+0

"* (스택)"을 .ANY 위의 자체 행에 넣으면 1 개의 RAM 섹션 만 생성 할 수 있다고 생각합니다. 100 % 확신하지 못하면 순서를 보장하므로 –

+0

@RealtimeRik도 시도했지만 작동하지 않았습니다. 감사. – muratcakmak