- 설명이 부족한것 같았다면 죄송...
자세히 설명드리겠읍니다.

부트로더는 잘동작하고요,
부트로더를 사용해서 0xc0080000(Dram영역)에 application을 올려서 동작을
시키는데 printf("System start")를 하면 호스트의 화면에 이상한 값을
뿌리네요.

그래서, 자세히 알아보니
1.serialout('S')
serialout('t')
serialout('a')
serialout('r')
serialout('t')를 순서대로 뿌리면 제대로 나옴.
->포트에 직접 문자table 값을 넣은거지요.
->시리얼 통신엔 문제 없음.

2.스택에 문제가 있나?
해서 다른 연산을 통해 검증해보니 문제가 없네요.

3.그럼 문자를 가리키는 Pointer에 문제가 있나?
해서 포인터의 Address를 쪼개서(32bit -> 4bit씩 8번)
뿌려보니 그 Address가 *.dis 파일의 지정 문자가 있는
Address와 일치함.
->Pointer address 문제 없음.

4.그럼 모지?
그래서 assembler를 확인해 봤지요.

ldr r2,r0 --> r0가 pointer adderss인데 검증됨.
ldr r1,[r2] --> 요기가 껄쩍찌근함.
bl serialoutput --> serial도 검증됨.

그래서
boot.s에서

ldr r2,=0xc00800a0
ldr r1,[r2]
bl serialoutput
을 해봤지요. -> =0xc00800a0인 이유는 그 위치가 code값이 들어가는
영역이어서 어떤값인지 알수있기 때문이지요.

그런데, 해보니 이상한 값이 나오내요.
0xc00800a0가 literal pool에 있는것도 확인 했는데요.
그러면, command가 Dram영역에서 실행되면서 Dram영역에 있는 문자상수를
읽어오지 못한다는 결과같은데...

아이고오오...
아시는분...??

푸지 wrote..
:
: 참 답변드리기가 곤란하네요..
: 부트로더에서 질문하시는 건가요??
: 만일 부트로더라면 소스에서 sdram 설정을 하신 것인지
: 그리고 질문이 너무 막연해서.. ^^