IAR EW ARM: как перенести проект в другую папку Печать
Добавил(а) microsin   

Часто нужно бывает в IAR Embedded Workbench (далее просто IAR) сделать из одного проекта другой - перенести его в другую папку и переименовать. Это не только потому, что на основе старых проектов удобно делать новые, а потому, что вместе с IAR поставляется много примеров, которые очень хорошо использовать в качестве основы нового проекта.

Например, из примера getting-started-project от IAR (находится в папке c:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\examples\Atmel\at91sam7x-ek) нам надо сделать новый проект, находящийся в папке c:\arm\myfirstproj. Далее будем для простоты путь c:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\ заменять на $TOOLKIT_DIR$\, а папку проекта c:\arm\myfirstproj\ на $PROJ_DIR$\..\. Процесс по шагам:

1. Создаем папку c:\arm\myfirstproj. Папка проекта ($PROJ_DIR$) будет соответствовать c:\arm\myfirstproj\ewp.

2. Содержимое папки $TOOLKIT_DIR$\examples\Atmel\at91sam7x-ek\getting-started-project копируем в папку $PROJ_DIR$\..\ (c:\arm\myfirstproj\).

3. Файл $PROJ_DIR$\..\getting-started-project.eww переименовываем в $PROJ_DIR$\..\myfirstproj.eww.

4. Файл $PROJ_DIR$\..\settings\getting-started-project.wsdt переименовываем в $PROJ_DIR$\..\settings\myfirstproj.wsdt.

5. Если опции старого проекта, который использовали для создания копии, были установлены по уму, и в папке проекта есть все исходные файлы, то больше никаких телодвижений не требуется. Но в примерах от IAR все устроено несколько сложнее - из-за использования внешних библиотек. Запускаем проект (меню File -> Open -> Workspace..., выбираем файл $PROJ_DIR$\..\myfirstproj.eww), и попробуем его перекомпилировать заново (Project -> Clean, Project -> Rebuild All). Компилятор будет выдавать ошибки наподобие:
- Fatal Error[Pe005]: could not open source file "board.h"
- Fatal Error[Pe005]: could not open source file "pio/pio.h"
- Fatal Error[Pe005]: could not open source file "aic/aic.h"
- Fatal Error[Pe005]: could not open source file "utility/led.h"
- Fatal Error[Pe005]: could not open source file "utility/assert.h"
- Fatal Error[Lc002]: could not open file "c:\asm\myfirstproj\ewp\..\..\..\at91Iib\boards\at91sam7x-ek\at91sam7x256\sram.icf"

Файл board.h находится в папке $TOOLKIT_DIR$\examples\Atmel\at91lib\boards\at91sam7x-ek\. В установках проекта этот путь задан относительно старого значения $PROJ_DIR$ - $PROJ_DIR$\..\..\..\at91lib\boards\at91sam7x-ek, но оно у нас поменялось. Поэтому исправим $PROJ_DIR$\..\..\..\at91lib\boards\at91sam7x-ek на $TOOLKIT_DIR$\examples\Atmel\at91lib\boards\at91sam7x-ek. Еще лучше будет скопировать папку resources и at91lib вместе с подкаталогами в корневую папку проекта и указать путь до неё через относительный каталог $PROJ_DIR$.

Аналогично исправляем (Project -> Options... -> C/C++ Compiler -> закладка Preprocessor):
$PROJ_DIR$\..\..\..\at91lib\peripherals
   на
$TOOLKIT_DIR$\examples\Atmel\at91lib\peripherals

$PROJ_DIR$\..\..\..\at91lib
   на
$TOOLKIT_DIR$\examples\Atmel\at91lib

Чтобы исправить ошибку линкера Lc002, исправляем (Project -> Options... -> Linker -> закладка Config -> галочка Linker configuration file\Override default):
$PROJ_DIR$\..\..\..\at91lib\boards\at91sam7x-ek\at91sam7x256\sram.icf
    на
$TOOLKIT_DIR$\examples\Atmel\at91lib\boards\at91sam7x-ek\at91sam7x256\sram.icf

После этого пропадут все ошибки.

6. Исправляем путь к макросам отладчика (Project -> Options... -> Debugger -> галочка Use macro file(s)):
$PROJ_DIR$\..\..\..\resources\at91sam7xx-ek-sram.mac
   на
$TOOLKIT_DIR$\examples\Atmel\resources\at91sam7xx-ek-sram.mac

7. Аналогичным образом правим все конфигурации, какие есть в проекте (at91sam7x128_flash, at91sam7x128_sram, at91sam7x256_flash, at91sam7x256_sram, at91sam7x512_flash, at91sam7x512_sram). Ненужные конфигурации можно удалить.

Все, получили проект в новой папке. Если мы хотим поменять имя проекта, то действуем следующим образом:
8. В папке ewp проекта переименовываем файлы:
getting-started-project.dep
getting-started-project.ewd
getting-started-project.ewp
    в
myfirstproj.dep
myfirstproj.ewd
myfirstproj.ewp

9. В папке ewp\settings\ проекта переименовываем файлы:
getting-started-project.dbgdt
getting-started-project.dni
getting-started-project.cspy.bat
getting-started-project_at91sam7x256_flash.jlink
getting-started-project_at91sam7x256_sram.jlink
    в
myfirstproj.dbgdt
myfirstproj.dni
myfirstproj.cspy.bat
myfirstproj_at91sam7x256_flash.jlink
myfirstproj_at91sam7x256_sram.jlink

10. Открываем переименованный на шаге 3 файл myfirstproj.eww текстовым редактором, ищем там строку:
$WS_DIR$\ewp\getting-started-project.ewp
    и меняем её на:
$WS_DIR$\ewp\myfirstproj.ewp

Готово!

Как переименовать проект IAR, на примере проекта Audio_playback_and_record из STM32Cube_FW_F4_V1.24.0\Projects\STM32F4-Discovery\Applications\Audio\:

1. Сделайте копию папки проекта в любом месте, где должен проект находиться (папка Audio_playback_and_record со всем содержимым). При этом папку Audio_playback_and_record можно переименовать как угодно. Все дальнейшие действия будут происходить только в папке EWARM, которая находится внутри папки Audio_playback_and_record.

2. Зайдите в папку EWARM проекта. Удалите файлы *.ewd, *.eww. Удалите в каталоге EWARM все папки - settings, Debug, Release. Эти папки и все находящиеся в них файлы временные, они будут автоматически созданы при компиляции проекта.

3. Переименуйте файл EWARM\*.ewp, это основной файл настроек проекта. В проектах примеров STM32CubeMX все файлы настроек проекта называются Project.ewp, что не слишком информативно. Дайте файлу проекта любое понятное имя, желательно короткое, например recandplay.ewp.

4. Откройте файл recandplay.ewp в текстовом редакторе. Найдите в нем и замените имена файлов Project.* на recandplay.*. Например, следует заменить Project.hex на recandplay.hex.

5. В проекте наверняка есть множество добавленных внешних библиотек. Ссылки на них обычно содержат пути наподобие $PROJ_DIR$\..\..\..\..\..\..\название_библиотеки. Например:

\\ Ссылки на каталоги подключаемых файлов:
$PROJ_DIR$\..\..\..\..\..\..\Drivers\CMSIS\Device\ST\STM32F4xx\Include
$PROJ_DIR$\..\..\..\..\..\..\Drivers\STM32F4xx_HAL_Driver\Inc
$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\STM32F4-Discovery
$PROJ_DIR$\..\..\..\..\..\..\Middlewares\ST\STM32_USB_Device_Library\Core\Inc
$PROJ_DIR$\..\..\..\..\..\..\Middlewares\Third_Party\FatFs\src
\\ ... и т. д.
 
\\ Ссылки на компилируемые модули кода:
$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\cs43l22\cs43l22.c
$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\lis302dl\lis302dl.c
$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\Components\lis3dsh\lis3dsh.c
$PROJ_DIR$\..\..\..\..\..\..\Drivers\BSP\STM32F4-Discovery\stm32f4_discovery.c<
\\ ... и т. д.

Здесь $PROJ_DIR$ это макрос, который соответствует полному пути до содержимого папки EWARM. Лучше всего сделать копию этих библиотек в каталог проекта, и переделать пути ссылок на них относительно $PROJ_DIR$. Примерно так:

\\ Ссылки на каталоги подключаемых файлов:
$PROJ_DIR$\..\Drivers\CMSIS\Device\ST\STM32F4xx\Include
$PROJ_DIR$\..\Drivers\STM32F4xx_HAL_Driver\Inc
$PROJ_DIR$\..\Drivers\BSP\STM32F4-Discovery
$PROJ_DIR$\..\Middlewares\ST\STM32_USB_Device_Library\Core\Inc
$PROJ_DIR$\..\Middlewares\Third_Party\FatFs\src
\\ ... и т. д.
 
\\ Ссылки на компилируемые модули кода:
$PROJ_DIR$\..\Drivers\BSP\Components\cs43l22\cs43l22.c
$PROJ_DIR$\..\Drivers\BSP\Components\lis302dl\lis302dl.c
$PROJ_DIR$\..\Drivers\BSP\Components\lis3dsh\lis3dsh.c
$PROJ_DIR$\..\Drivers\BSP\STM32F4-Discovery\stm32f4_discovery.c<
\\ ... и т. д.

Достоинство такого подхода в том, что Вы теперь можете свободно вносить изменения в свою копию кода библиотек (например, добавляя туда комментарии), и у Вас остается исходная копия в каталогах (или архиве) STM32CubeMX.

Для примера проекта Audio_playback_and_record я создал копии следующих каталогов (и соответствующим образом исправил пути в файле *.ewp):

Drivers\CMSIS\Device\ST\STM32F4xx\Include
Drivers\STM32F4xx_HAL_Driver\Inc
Drivers\STM32F4xx_HAL_Driver\Src
Drivers\BSP\STM32F4-Discovery
Drivers\BSP\Components
Drivers\BSP\Components\Common\
Middlewares\ST\STM32_USB_Device_Library\Core\Inc
Middlewares\ST\STM32_USB_Device_Library\Core\Src
Middlewares\ST\STM32_USB_Host_Library\Class\MSC\Inc
Middlewares\ST\STM32_USB_Host_Library\Class\MSC\Src
Middlewares\ST\STM32_USB_Host_Library\Core\Inc
Middlewares\ST\STM32_USB_Host_Library\Core\Src
Middlewares\ST\STM32_Audio\Addons\PDM\Inc
Middlewares\ST\STM32_Audio\Addons\PDM\Lib
Middlewares\Third_Party\FatFs\src

6. Откройте проект *.ewp в IAR, попробуйте его скомпилировать. Если Вы что-то пропустили, то компилятор сообщит о не найденных заголовочных файлах, а линкер сообщит о ссылках на не существующие символы. Сначала по сообщениям компилятора надо найти в архиве STM32CubeMX недостающие файлы заголовков и скопировать их в соответствующие папки проекта. После этого по сообщениям линкера надо найти в архиве STM32CubeMX те модули, которые содержат недостающие символы, и добавить эти модули в проект. Возможно, также необходимо будет добавить в проект бинарные библиотеки. Например, в проекте Audio_playback_and_record используется библиотека libPDMFilter_CM4_IAR_wc32.a.

[Ссылки]

1191122IAR830-renamed-projects.zip - примеры двух переименованных проектов из STM32Cube_FW_F4_V1.24.0 (Audio_playback_and_record и LwIP_TCP_Echo_Client).