기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요? 늘 질문만 드리네요..
컴파일 하는 시점에 스캐터의 text, data 안의 변수들.. 전역변수,로컬 변수등의 주소 영역이 결정이
나게 되는데요. 예를 들면 스택을 사용하는 로컬 변수의 주소 영역을 변경시킬 방법이 있는지요?
간단히 예를 들자면)
text의 시작주소를 0x0으로 잡게 되면 로컬 변수의 주소 영역도 0x0 번지 주변으로 컴파일 시 잡히게 되는데요
이것을 0xA0000000 만큼 더해서 0xA0000000 번지 주변에 잡히게 만들어 주고 싶습니다.
혹시 이렇게 해줄 방법을 알고 싶습니다.
왜 이렇게 할려고 하는지 말씀드리겠습니다.
0xA0000000 번지에 해당 RTOS 이미지를 복사하여 실행해보면 코드 영역은
0xA0000000 가 더해져(PC-Related address방식) 제대로 되는것 같은데 로컬변수
영역은 이상하게 0x0번지 대로 접근하게 되어 fail이 납니다.
실제 0x0번지에는 flash 메모리가 있습니다.
0xA0000000만큼 더해지면 문제없을것 같은데 왜 로컬변수(스택사용)은 절대주소(?) 방식처럼 진행하는지 궁금합니다.
그럼 좋은 하루되세요
답변감사합니다. 많은 도움이 되었습니다.
그렇다면 STACK 영역의 기준 주소를 변경할려고 하는데
스캐터 파일 상에서 수정이 가능한지요?
현재 Real View Tool을 사용중입니다.
__user_initial_stackheap() 을 보고 이래저래 수정을 할려고 하는데 잘 안되네요..
VOID *System_SP;
UINT64 __user_initial_stackheap(VOID)
{
UINT64 rtn_val;
static UINT8 heap[1024]
/* Get start address of heap in lower 32-bits (register r0) */
rtn_val = (UINT64)&heap[0];
/* Put stack pointer in upper 32-bits (register r1) */
rtn_val |= ((UINT64)System_SP << 32) ;
/* Return start address of heap */
return (rtn_val);
}
여기서 System_SP 의 포인터 주소 부분에다가 0xA0000000 만큼 더하거나 빼고 하는데 안 안되네요.
간단히 더하거나 빼는 예제를 부탁드려도 될까요?
좋은 저녁되세요.
즉, 변동사항이 많은 부분입니다. 손대지 않는 것이 훨 좋습니다.