Дек 122011
 

С момента появления версии 6.2 компилятор использует собственные библиотеки CMSIS, что позволяет улучшить оптимизацию приложений. Если проект создан в более ранней версии IAR EWARM и содержит «фирменные» библиотеки STM32 от производителя, то это приведет к сбою при компиляции.
Далее описаны действия, которые необходимо выполнить при переносе проектов, созданных в версиях 6.1 или более ранних, в версию IAR EWARM 6.2.

При попытке компиляции «старых» проектов в версии 6.2 или более новой, появится такая ошибка:

Error[Pe147]: declaration is incompatible with "__interwork
__softfp unsigned long __get_PSP(void)" (declared at line 52 of
"C:Program FilesIAR
C:LibrariesCMSISCM3CoreSupportcore_cm3.h

Что нужно сделать для преодоления этой проблемы:
1. Установите опцию "Use CMSIS" в разделе
Project options > General Options > Library Configuration:

Use CMSIS

2. Удалите все заголовочные файлы CMSIS из вашего проекта:
Делается этоудалением соотвествующих путей к CMSIS
“$PROJ_DIR$……LibrariesCMSISCM3CoreSupport”
из раздела
Project>Options>C/C++ Compiler>Preprocessor

Remove paths

Теперь при вызове файлов core_cm3 компилятор будет обращаться к собственным файлам из пакета IAR и компиляция пройдет корректно.
И наоборот, при работе в более ранних версиях, чем IAR EWARM 6.2 необходимо помнить, что библиотек CMSIS внутри пакета IAR нет, и позаботиться об их добавлении в проект. В этом случае надо использовать CMSIS от ST Microelectronics, добавив файлы core_cm3 проект. Затем, соответственно, указать компилятору пути к этим файлам в категории Project>Options>C/C++ Compiler>Preprocessor, и не забыть снять галочку в пункте "Use CMSIS" в разделе Project options > General Options > Library Configuration.

Другие статьи: