EWARM CMSIS intrinsics.h 컴파일 에러

ST예제 컴파일시 에러



Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" (declared at line 52 of "C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h") 


C:\work\STM32_Lib\STM32_USB-FS-Device_Lib_V3.3.0\STM32_USB-FS-Device_Lib_V3.3.0\Libraries\CMSIS\CM3\CoreSupport\core_cm3.h 1084 



EWARM 최근 버젼에서 에러가 나옵니다.


CMSIS관련 어셈블러쪽을 IAR에서는 내부적으로 따로 제공하는데 이 부분이 서로 충돌 합니다.


CMSIS - Cortex Microcontroller Software Interface Standard Image



CMSIS 관련 자료는 다음 링크

http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php



해결 방법은 

1. core_cm3.c/h 을 rename 하시고, 

2. 컴파일러 옵션에서 아래와 같이 CMSIS 란에서 "Use CMSIS" 체크 박스 체크 해주시고,

3. 컴파일러에서 core_cm3.c 파일을 빼줍니다.


이게 좀 아리송 한게 체크 박스을 뒀다는건 외부 core_cm3.c/h도 사용 할 수 있게 한다는 건데...

뭘 하던간에 내부 "C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h" 파일을 

default로 물고 들어오니.... declaration is incompatible 에러가 나옵니다.

intrinsics.h을 안물고 들어가게 하는 옵션이 있을것 같은데...흑






위에 "Use CMSIS"을 체크 하면

IAR 컴파일러의 다음 Path을 참고 합니다.


C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.0\arm\CMSIS\Include  


이 폴더 안에는 "core_cm3.h" 가 독립적으로 들어 있고요.


"core_cm3.h" 에서는   


#include <intrinsics.h>                     /* IAR Intrinsics   */  


다시 이 파일은 


C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.0\arm\inc\c


여기 들어가 있습니다.