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

이번에 6400을가지고 하나 만들고 있는데요... 다름이 아니라 VFP를 사용하려고 합니다.

그런데 이를 GCC에서 어떻게 사용하는지 잘 모르겠습니다.

첫째로 지금 현재 잘 구분이 잘 되지 않는 것이 -mhard-float 옵션과 -mfpu=vfp의 관계 입니다.

서로 연관 관계가 있는 것인지 아님 별개의 것인지 궁금 하구요..

현재 libgcc.a를 사용하여 링킹을 하고 있는데요...  

다음과 같은 옵션을 사용하였을 떄

CFLAGS        += -mcpu=arm1176jzf-s -mfpu=vfp -fno-builtin -mapcs

이와같은 에러가 뜹니다.

error : libgcc.a uses FPA instructions. whereas s3c6400.elf does not

6300에서 제대로 VFP를 사용하려면 정확하게 어떤 옵션을 줘야 하는 건가요?

고수님들의 도움 부탁 드립니다.
  

고현철

2008.09.07 12:09:33
*.32.117.22

강좌란의 김재훈님께서 올린 글을 참조하시기 바랍니다.

target=_blank>http://222.112.227.25/bbs/view.php?id=lecture&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=7


일반적으로 툴체인 만드는 옵션이랑 컴파일 옵션은 동일합니다.
profile

김재훈

2008.09.07 19:28:10
*.162.4.197

hardware floating 연산은 ARM 프로세서에 적용되지 않는 것으로 알고 있습니다. (폭넓은 인스트럭션 셋을 지원하는 대부분의 x86 계열을 위한 옵션이라고 생각합니다.) 따라서, ARM의 경우 software floating 연산 옵션을 주어, fpu는 vfp 유닛을 사용 합니다. 이 옵션을 줄 경우 컴파일러에서는 1차 코드를 software floating point 연산 코드로 컴파일 하며, 이 코드를 바탕으로 ARMv6 아키텍쳐의 vfp 유닛에 맞도록 최적화를 진행하게 됩니다.

결론적으로 정확히 말하자면,

-msoftfp 옵션과 -mfp=vtp를 쓰셔야 겠지요. :)

참고로, ARM과 같은 RISC 계열의 프로세서의 경우 hardware floating을 지원하지 않는 것으로 알고 있습니다.

홍성관

2008.09.08 08:31:01
*.34.49.11

일단 답변 감사 드립니다. 아무래도 제 개발 환경이 맞는지 부터 확인 해야 할 것 같네요... 오늘 한참 aesop을 뒤지다가 조금 이사한 부분이 있어어요.. 저는 현재 www.gnuarm.org에서 cygwin용 바이너리로 배포 되는 것을 다운로드 받아 개발 환경을 구축 하고 있는 상태 이구요.. aesop에서는 crosstool이라는 것을 받아 gcc개발 환경을 구축하고 있는 것 같네요. crosstool은 소스를 직접 다운로드 받아 컴파일을 받고 패치도 하는 것 같은데요..정확하게 이 둘의 차이점이 무었인가요..? 강의란에 있는데로 cygwin 에서 demo-armv6.... 스크립트를 실행 하였는데요.. 컴파일 중에 에러가 나서 더이상 진행을 못 하더라구요... 윈도우즈에서 어떻게 해 볼려고 했는데 linux환겨으로 바꿔야 할 듯 하네요... 혹 다른 방법 있나요? 초보라서 기초적인 질문들만 드릴네요... 꾸벅..

고현철

2008.09.08 12:16:29
*.111.183.146

리눅스는 리눅스 환경에서 개발하는게 좋습니다.

여러가지 문제때문에요....cygwin이면 제일 편하겠지만
세팅하느라.....넘 정력(?) 낭비할 듯 합니다.....아마도...^^
profile

김재훈

2008.09.09 08:51:51
*.162.4.182

아.. cygwin.. 잘만 셋팅하면 편하긴 하지만...
개발 환경의 불확실성(?) 때문에 자꾸 꺼려지더라구요. ^^

홍성관

2008.09.10 02:27:01
*.233.242.78

재훈님께서 말씀 하신데로 Fedora를 설치하고 재공해 주신 toolchain으로 제가 가진 Sample을 컴파일 하였습니다만... 다음과 같은 error가 나오네요.. "undefined reference to raise"하면서 에러를 내는군요... 참고로 저는 지금 Linux나 uboot를 빌드하는 것이 아니라 일반 Firmware를 개발 하고 있습니다. 혹시 에러의 원인 및 해결 방법을 아시나요?

홍성관

2008.09.10 02:35:24
*.233.242.78

찾아보니 0으로 나누었을때 나는 Exception함수 인것 같은데.. div0에서 참조를 하는 것 같네요... 어찌됐든 함수가 없다고 해서 혹시나 하고 임의로 소스에 void raise() 함수를 만들어 줬더니 넘어가고 컴파일이 완료 되네요.. 음... 되긴 됬는데 어쩨 찜찜 하네요.. 뭔가 근본적인 해결 법이 없을 까요?
List of Articles
번호 제목 글쓴이 날짜 조회 수

사용자 로그인