Программирование ARM IAR Build Actions Mon, November 19 2018  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


IAR Build Actions Печать
Добавил(а) microsin   

Эти технические заметки дают дополнительную информацию по использованию Build Actions в системе программирования IAR Embedded Workbench (перевод Technical Note 99436 [1]).

Подсистема "Build Actions" (действия при сборке, далее сокращенно BA), управляемая через свойства проекта, предназначена для запуска команд и скриптов перед сборкой проекта (действия pre-build) и после его сборки (post-build). Это очень полезная функция, позволяющая осуществлять автоматизацию процесса сборки - например генерацию исходного кода [6], запуск перекодировщиков прошивки (например для шифрования [7]) и т. п.

Совет 1: чтобы посмотреть вывод от запрограммированных действий, связанных со сборкой (build actions) в окне сообщений сборки (Build window), разрешите опцию Tools -> Options... -> IDE Options -> Messages -> Show build messages -> All.

Совет 2: когда код проекта не требует перекомпиляции (т. е. уже скомпилирован, находится в актуальном, обновленном состоянии up-to-date), то команды BA не запустятся, они выполняются только в том случае, когда запускаются какие-либо компиляционные инструменты тулчейна IAR, влияющие на генерацию конечного выходного двоичного кода.

[Командная строка Build Actions]

Вы можете ввести имяприложения.exe в командных строках pre-build и post-build, если переменная окружения PATH включает директорию, где находится этот запускаемый файл имяприложения.exe. Можно проверить значение переменной окружения PATH с помощью команды path, введенной в приглашении интерпретатора командной строки cmd.exe. Однако имейте в виду, что обычные команды MS-DOS не могут быть исполнены в строках pre-build и post-build. Т. е., к примеру, Вы можете запустить через эти строки BA команду calc.exe, однако команда copy не запустится. Для запуска команд наподобие copy, path, set и командных bat-файлов применяйте в строке вызов cmd.exe:

cmd.exe /c "командная строка"

Пример запуска команды path из строк BA:

cmd /c "path"

По умолчанию инсталлятор IAR добавляет путь до папки $TOOLKIT_DIR$\bin в переменную окружения PATH, так что Вы можете запустить приложения IAR Embedded Workbench непосредственно из строк BA (строки команд pre-build и post-build).

Пример командной строки post-build (пример для IAR Embedded Workbench for ARM):

ielfdumparm

[Перенаправление stdout и stderr]

Чтобы перенаправить вывод stdout и stderr в командной строке Windows, можно ввести следующую командную строку в приглашении интерпретатора cmd.exe:

output.txt 2>&1

Чтобы запустить ту же самую команду из строки BA, нужно сделать промежуточный вызов cmd.exe:

cmd /c "path > output.txt 2>&1"

Совет 3: здесь текущей директорией, куда запишется файл output.txt, будет директория, где находится IarIdePm.exe. Если Вы хотите указать другой каталог, то укажите полный путь до него. Например, для сохранения файла output.txt в каталоге проекта введите команду:

cmd /c "path > $PROJ_DIR$\output.txt 2>&1"

Чтобы перенаправить вывод из приложения Windows, Вы можете ввести командную строку наподобие следующей:

имяприложения.exe > output.txt 2>&1

Ожидаемая соответствующая строка BA будет выглядеть следующим образом:

cmd /c "имяприложения.exe > output.txt 2>&1"

Может произойти, что Вы получите пустой файл output.txt. В этом случае нужно применить двойной косвенный вызов команды:

cmd /c "cmd /c "имяприложения.exe > output.txt 2>&1""

Пример строки BA (для IAR Embedded Workbench for ARM):

cmd /c "cmd /c "ielfdumparm > $PROJ_DIR$\output.txt 2>&1""

Совет 4: поскольку подобные строки команд могут выглядеть сложными и запутывающими, лучшим альтернативным решением будет вызов командного bat-файла из строк BA (см. далее).

[Использование скриптов *.bat]

С помощью .bat-файла Вы можете запускать команды MS-DOS как обычно. Внутри .bat-файла можно указать несколько команд друг за другом, и в них можно пропустить вызов "cmd /c", как это требовалось для командной строки BA.

Примечание: если ранее надо было делать двойной вызов "cmd /c", то в .bat-файле можно ввести только первую часть "cmd /c".

Пример запуска команды "path" с помощью .bat-файла, находящегося в директории проекта:

$PROJ_DIR$\pre-build.bat

Содержимое файла pre-build.bat:

path

Пример перенаправления вывода команды "path" с помощью .bat-файла, находящегося в директории проекта:

$PROJ_DIR$\pre-build.bat "$PROJ_DIR$"

Содержимое файла pre-build.bat:

path > %1\output.txt 2>&1

Примечание: Вы не можете внутри скрипта bat-файла использовать переменные аргумента наподобие $PROJ_DIR$, поскольку интерпретатор команд ничего не знает при них (это переменные среды IAR [8]). Вместо этого Вы можете передать переменные аргумента через параметры .bat-файла.

Пример запуска ielfdumparm с помощью .bat-файла, находящегося в директории проекта:

$PROJ_DIR$\post-build.bat

Содержимое файла post-build.bat (пример для IAR Embedded Workbench for ARM):

ielfdumparm

Примечание: эта команда запустится, однако вывод из неё возможно не будет виден в окне сообщений сборки IAR (в окне Build window). В таком случае перенаправьте вывод и дамп файла с помощью команды "type" (см. далее).

Пример перенаправления вывода из ielfdumparm с помощью .bat-файла, находящегося в директории проекта:

$PROJ_DIR$\post-build.bat "$PROJ_DIR$"

Содержимое файла post-build.bat (пример для IAR Embedded Workbench for ARM):

cmd /c "ielfdumparm > "%1\output.txt 2>&1""

Чтобы получить дамп содержимого файла output.txt, добавьте к .bat-файлу следующую строку:

type "%1\output.txt"

Примечание: если Вы хотите запустить в .bat-файле несколько команд, откройте статью Википедии [2], и прочитайте разделы по перенаправлению, каналам и объединению действий в цепочку (redirection, piping, chaining).

Также см. пример проекта в [3] Common, который использует файл post-build.bat для BA post-build.

[Возвращаемые значения]

Если любая из команд BA (post- или pre-build) вернет код ошибки (результат, не равный 0), то весь процесс выполнения команд Build/Make будет оборван. См. проект примера [4] и его скриншоты ниже.

IAR TN99436 return value ok

IAR TN99436 return value fail

[Просмотр вывода только от Build Action]

Если Вы считаете, что окно сборки выводит слишком много информации, и очень трудно увидеть вывод от настроенных команд BA, то в качестве альтернативы можно перенаправить вывод в текстовый файл, и запустить блокнот (notepad.exe) чтобы увидеть вывод только сообщений BA.

Командная строка post-build:

$PROJ_DIR$\post-build.bat $PROJ_DIR$

Содержимое файла post-build.bat (пример для ARM):

echo off
cmd /c "ielfdumparm > "%1\output.txt 2>&1""
echo Look in the notepad window and then close
notepad "%1\output.txt"
echo on

Примечание: когда здесь имеются символы пробела в имени файлового пути, то обычный путь избежать проблем с такими путями - заключить их в двойные кавычки. Но если это не работает, например когда запускается notepad, попробуйте использовать путь, который не содержит пробелов или кавычек, или преобразуйте длинное имя пути в короткое типа 8.3.

[Команда touch системы Cygwin]

Вы можете запустить приложение Cygwin (cygwin-application.exe) в строках команд BA, если переменная окружения PATH содержит директорию, где находится cygwin-application.exe.

Вы можете запустить Cygwin-команду "touch" в командной строке pre-build, но если Вы добавите путь до файла, например "touch d:/test.c", то путь до файла не будет воспринят системой Cygwin. Cygwin ожидает путь по стандарту POSIX, наподобие /cygdrive/d/test.c, так что результирующая командная строка должна быть "touch /cygdrive/d/test.c", однако эта команда не может быть выполнена напрямую в командах BA. Вместо этого такая команда запускается косвенно, через вызов cmd.exe:

cmd /c "touch /cygdrive/d/test.c"

Альтернативно файл .bat (находящийся в каталоге проекта) может выглядеть следующим образом (команда pre-build):

$PROJ_DIR$\pre-build.bat

Файл pre-build.bat:

touch /cygdrive/d/test.c

Нет никакого смысла передавать переменные аргумента, такие как $PROJ_DIR$, в такой *.bat-файл через параметры, так как Cygwin не сможет их использовать напрямую (Cygwin ожидает путь POSIX).

Если Вы хотите запустить команду touch без внесения изменений, то BA не запустятся, и Вам нужно обратиться к другому способу запуска BA. Конечно, можно сделать предварительную очистку (Clean) и затем запустить сборку как обычно, чтобы привести в действие команды BA. Альтернативно можно сделать отдельный .bat-файл (который нужно запускать вручную), чтобы запустить touch, за которым будет запуск "IarBuild.exe -build" (см. Technical Note 47884 [5] для получения информации об IarBuild.exe).

Альтернатива для запуска команды touch - иметь действие pre-build, которое удаляет какой-нибудь объектный файл проекта:

cmd /c "del "$OBJ_DIR$\test.o""

[Ссылки]

1. Build Actions (pre-build and post-build) site:iar.com.
2. COMMAND.COM site:wikipedia.org.
3. Hiding symbols in a library using isymexport Technical Note 28924 site:iar.com.
4. return-value-example-project-ewarm-6.50.6.zip Return value example project (IAR Embedded Workbench for ARM 6.50.6) site:iar.com.
5. Build from the command line Technical Note 47884 site:iar.com.
6. IAR EW ARM: автоматическая генерация версии прошивки.
7. Безопасная и защищенная реализация бутлоадера.
8. Переменные аргумента IAR ($PROJ_DIR$, $DATE$, и т. п.).

 

Добавить комментарий


Защитный код
Обновить

Top of Page