기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요?

처음 글을 질문을 드려 죄송하게 생각합니다만, 달리 질문을 할 데가 없네요.


beaglebone 보드를 구입해 처음부터 공부를 하고 있습니다.

ti am3359 라는 cortex-a8 프로세서를 달고 있습니다.

ti에서 제공하는 am3359용 startware 라는 것을 받아 bootloader를 컴파일 해보고 있습니다.

startware에는 gcc, 코드콤포저, iar 환경을 위한 프로젝트 를 같이 제공해 주고 있습니다.


그런데 cygwin에서 arm-none-eabi-* (yagarto) 를 사용해 컴파일 하면


selected processor does not support requested special purpose register -- `msr cpsr_c,#MODE_UND|I_F_BIT'


라는 에러를 만납니다.


ARM사에서 제공하는 퀵 인스트럭션 카드를 보면 틀리지 않은 구문 같은데요.

이 문장이 ccs 에서는 잘 컴파일이 되어서 빌드가 됩니다.

ccs에서 사용하는 컴파일러는 ccs 설치할때 같이 설치된 것입니다.


그런데 재미나는 것은 iar에서는 저렇게 immediate 값을 쓰지 않고 구현이 되어있습니다.


<iar 용 소스>

         mrs     r0,cpsr                       ; Original PSR value

         bic     r0,r0,#MODE_MSK               ; Clear the mode bits

         orr     r0,r0,#MODE_SVC|I_F_BIT       ; Set Supervisor mode bits

         msr     cpsr_c,r0                     ; Change the mode

         ldr     sp,=SFE(SVC_STACK)            ; End of SVC_STACK


참고로,


<gcc 용 소스>

         LDR   r0, =_stack                     @ Read the stack address

         MSR   cpsr_c, #MODE_UND|I_F_BIT       @ switch to undef  mode

         MOV   sp,r0                           @ write the stack pointer

         SUB   r0, r0, #UND_STACK_SIZE         @ give stack space


<ccs용 소스>

         LDR   r0, _stackptr                     ; Read the stack address

         MSR   cpsr_c, #MODE_UND|I_F_BIT       ; switch to undef  mode

         MOV   sp,r0                           ; write the stack pointer

         SUB   r0, r0, #UND_STACK_SIZE         ; give stack space



gnu as 문서를 살펴봤지만, msr에 대한 단서는 못찾았습니다. 당연한가요? ㅜㅜ

arm 좀 어렵네요. 찾아봐야 할 문서의 양은 둘째치고 체계적으로 정리해나가기가 참 힘듭니다.


장황해서 다시 질문을 요약하겠습니다.


위 gcc용 소스에서 왜 다음과 같은 컴파일 에러가 날까요?


selected processor does not support requested special purpose register -- `msr cpsr_c,#MODE_UND|I_F_BIT'


답변 부탁드립니다.

감사합니다.


고도리

2012.08.30 00:04:26
*.140.70.27

gcc 버전의 문제이거나, gcc 옵션의 문제입니다.

 

즉, 해당 명령어는 선택된 cpu에는 지원하지 않는다는 것이거든요.

대부분 이런 경우는 툴체인 문제거나, 아니면 컴팔옵션 중 cpu 옵션 문제입니다.

쿨한넘

2012.08.30 00:27:21
*.37.136.147

답변 감사합니다.

말씀을 참고해서 테스트를 해봤는데,


-mcpu=cortex-a8 옵션을 빼면 컴파일이 잘 됩니다.


이 옵션을 빼고 빌드를 진행해도 괜찮을까요?


고도리

2012.08.30 03:45:32
*.200.239.210

큰 문제는 없을 겁니다만....


해당칩이 진짜 cortex-A8인지는 확인해봐야할 듯 합니다.

CP15관련 명령이라 저런 경우 문제가 생기면 대부분 실제 칩이 틀린 경우거든요...



쿨한넘

2012.08.30 21:24:05
*.37.136.147

감사합니다. 일단 CP15 를 잘 몰라서 (ㅜㅜ) 코드를 살펴보고 테스트를 해보겠습니다.

다시한번 감사드립니다.

고도리

2012.08.30 22:49:39
*.200.239.210

mrs 등의 명령은 co-processor 15번에 access할 때 주로 사용하는 명령어로 기억이 납니다. 해서 답글을 그렇게 단 것입니다.


보통 cp15 명령어가 안 먹는 경우는 진짜 cpu가 틀린 경우가 많거든요.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort

사용자 로그인