Разработка программного обеспечения встраиваемых микропроцессорных систем, проектируемых на базе расширяемых вычислительных платформ семейства Zynq 7000 AP SoC фирмы Xilinx.
Часть 4
Импортирование исходных модулей в состав проекта прикладной программы для разрабатываемой микропроцессорной системы
Включение исходных модулей, ранее сформированных при создании других программных приложений, в состав разрабатываемого проекта прикладной программы осуществляется командой Import, которая представлена во всплывающем меню File и контекстно-зависимом всплывающем меню, открываемом щелчком правой кнопки мыши. Перед выполнением этой команды рекомендуется во встроенной панели Project Explorer в разделе формируемого проекта программного приложения выделить строку с названием соответствующего подраздела, в состав которого должен быть включен импортируемый исходный модуль. Как правило, импортируемые файлы копируются в подраздел src, представленный в составе раздела разрабатываемого проекта прикладной программы. После активизации команды Import на экране появляется стартовая диалоговая панель «мастера» Import Wizard, чей первоначальный вид приведен на рис. 1.
Указанный «мастер» позволяет импортировать различные объекты, в том числе архивы, исходные и исполняемые модули, существующие проекты. Поэтому в открывшейся стартовой диалоговой панели необходимо в первую очередь выбрать тип импортируемого объекта. Для этого нужно развернуть раздел General, как показано на рис. 2.
Далее в указанном разделе следует выделить строку File System, а затем перейти к следующей диалоговой панели «мастера» Import Wizard. Переход к заключительной диалоговой панели «мастера», вид которой дан на рис. 3, осуществляется с помощью клавиши «Далее» (Next), расположенной в нижней части стартовой диалоговой панели (рис. 2).
В заключительной диалоговой панели «мастера» Import Wizard следует, прежде всего, в поле редактирования/выбора значения параметра From directory указать полное название каталога, включающее путь доступа к нему, который содержит исходные модули, входящие в состав проекта прикладной программы. Идентификатор требуемого каталога может быть задан с помощью клавиатуры после активизации данного поля редактирования/выбора или указан в выпадающем списке этого поля. Наиболее наглядным способом определения каталога, содержащего включаемые исходные файлы, является использование клавиши Browse, расположенной справа от поля редактирования/выбора значения параметра From directory. При нажатии клавиши открывается стандартная панель навигации по дискам компьютера, позволяющая быстро найти необходимый каталог. После закрытия стандартной панели навигации полное название выбранного каталога автоматически заносится в поле редактирования/выбора значения параметра From directory. Структура и содержание каталога, указанного в этом поле, отображаются в соответствующих встроенных панелях, представленных в заключительной диалоговой панели «мастера» Import Wizard (рис. 3). В правой встроенной панели нужно с помощью соответствующих индикаторов состояния отметить идентификаторы файлов, которые нужно включить в состав проекта программного приложения. При большом количестве файлов различного типа в выбранном каталоге целесообразно воспользоваться фильтром, позволяющим, в частности, показать во встроенной панели только исходные модули для применяемого языка программирования. Для установки фильтра отображаемых файлов имеется клавиша Filter Types, при нажатии которой на экране появляется диалоговая панель с заголовком Select Types, чей вид демонстрирует рис. 4.
В открывшейся диалоговой панели приведен список всех типов файлов, используемых средствами разработки программного обеспечения встраиваемых микропроцессорных систем Xilinx SDK. Для создания фильтра отображаемых файлов нужно установить в положение «включено» индикаторы состояния, расположенные в строках представленного списка, которые содержат соответствующие расширения. Например, при импортировании исходных модулей программного приложения, разрабатываемого на языке C, целесообразно отображать только идентификаторы файлов с расширениями .c, .C и .h. Если в списке, приведенном в диалоговой панели Select Types, отсутствует требуемый тип файлов, то его можно указать с помощью клавиатуры в поле редактирования значения параметра Other extensions (рис. 4). Сформированный фильтр типов отображаемых файлов вступает в силу только после нажатия клавиши OK, находящейся в нижней части диалоговой панели Select Types.
Для импортирования всех исходных модулей и папок, идентификаторы которых представлены в соответствующих встроенных панелях, предусмотрена клавиша Select All (рис. 3). Отмена сделанного ранее выбора идентификаторов импортируемых файлов осуществляется клавишей Deselect All. После создания списка импортируемых исходных модулей рекомендуется в поле редактирования значения параметра Into folder уточнить название раздела, куда будут скопированы выбранные файлы. По умолчанию в этом списке отображается название раздела, выделенного во встроенной панели Project Explorer основного окна средств Xilinx SDK перед выполнением процедуры импортирования исходных модулей. При необходимости можно указать другой раздел с помощью клавиатуры или стандартной панели навигации по дискам компьютера, которая открывается при нажатии клавиши Browse, расположенной справа от поля редактирования значения параметра Into folder.
В нижней части заключительной диалоговой панели «мастера» Import Wizard находится группа индикаторов состояния параметров процесса импортирования Options, предоставляющих дополнительные возможности в ходе копирования выбранных исходных модулей в состав требуемого раздела проекта программного приложения. Если в составе списка импортируемых исходных модулей присутствуют идентификаторы одноименных файлов, которые уже содержатся в выбранном разделе разрабатываемого проекта прикладной программы, то при их копировании будет появляться стандартная диалоговая панель запроса замены существующих модулей. В случае необходимости замены всех одноименных файлов, представленных в указанном разделе проекта программного приложения, можно избежать появления этих запросов, установив индикатор состояния параметра Overwrite existing resources without warning в положение «включено». По умолчанию этот индикатор находится в сброшенном состоянии, при котором для копирования каждого одноименного исходного модуля требуется подтверждение его перезаписи. Для автоматического создания в процессе импортирования раздела верхнего уровня иерархии следует переключить в положение «включено» индикатор состояния параметра Create top-level folder.
Запуск процесса копирования выбранных исходных модулей осуществляется с помощью клавиши «Готово» (Finish), расположенной в нижней части заключительной диалоговой панели «мастера» Import Wizard.
Структура проекта прикладной программы, создаваемого с помощью шаблона Hello World
Шаблон Hello World предназначен в первую очередь для быстрого освоения процесса разработки прикладных программ для встраиваемых микропроцессорных систем, проектируемых на базе кристаллов расширяемых вычислительных платформ семейства Zynq‑7000 AP SoC [1–9]. Кроме того, шаблон удобен для создания проектов программных приложений, осуществляющих передачу информации через стандартные устройства ввода/вывода. В состав проекта, сформированного с помощью шаблона Hello World, входят следующие исходные модули:
helloworld.c — файл, содержащий исходный код головного модуля программы на языке C;
platform.c — файл, включающий исходный код модуля, выполняющего инициализацию компонентов процессорного блока кристалла расширяемой вычислительной платформы;
platform.h и platform_config.h — заголовочные файлы для модуля инициализации процессорного блока.
Исходный код головного модуля программы Hello World выглядит следующим образом:
/* * helloworld.c: simple test application * * This application configures UART 16550 to baud rate 9600. * PS7 UART (Zynq) is not initialized by this application, since * bootrom/bsp configures it to baud rate 115200 * * ------------------------------------------------ * | UART TYPE BAUD RATE | * ------------------------------------------------ * uartns550 9600 * uartlite Configurable only in HW design * ps7_uart 115200 (configured by bootrom/bsp) */ #include <stdio.h> #include "platform.h" void print(char *str); int main() { init_platform(); print("Hello World\n\r"); return 0; }
В составе модуля инициализации процессорного блока используются функции управления кэш-памятью данных и команд, а также функция установки параметров конфигурации последовательного приемопередатчика, применяемого в качестве стандартного устройства ввода/вывода. Ниже приведен исходный код этого модуля, дополненный комментариями:
#include "xparameters.h" #include "xil_cache.h" #include "platform_config.h" /* * Uncomment the following line if ps7 init source files are added in the * source directory for compiling example outside of SDK. */ /*#include "ps7_init.h"*/ #ifdef STDOUT_IS_16550 #include "xuartns550_l.h" #define UART_BAUD 9600 #endif // Функция разблокировки кэш-памяти void enable_caches() { #ifdef __PPC__ Xil_ICacheEnableRegion(CACHEABLE_REGION_MASK); Xil_DCacheEnableRegion(CACHEABLE_REGION_MASK); #elif __MICROBLAZE__ #ifdef XPAR_MICROBLAZE_USE_ICACHE Xil_ICacheEnable(); #endif #ifdef XPAR_MICROBLAZE_USE_DCACHE Xil_DCacheEnable(); #endif #endif } // Функция блокировки кэш-памяти void disable_caches() { Xil_DCacheDisable(); Xil_ICacheDisable(); } // Функция установки параметров последовательного приемопередатчика void init_uart() { #ifdef STDOUT_IS_16550 XUartNs550_SetBaud(STDOUT_BASEADDR, XPAR_XUARTNS550_CLOCK_HZ, UART_BAUD); XUartNs550_SetLineControlReg(STDOUT_BASEADDR, XUN_LCR_8_DATA_BITS); #endif #ifdef STDOUT_IS_PS7_UART /* Bootrom/BSP configures PS7 UART to 115200 bps */ #endif } // Функция инициализации процессорного блока void init_platform() { /* * If you want to run this example outside of SDK, * uncomment the following line and also #include "ps7_init.h" at the top. * Make sure that the ps7_init.c and ps7_init.h files are included * along with this example source files for compilation. */ /* ps7_init();*/ enable_caches(); init_uart(); } // Функция сброса процессорного блока void cleanup_platform() { disable_caches(); }
Заголовочный файл platform.h содержит директиву препроцессора, включающую заголовочный файл platform_config.h в состав прикладной программы, а также выражения декларации функций инициализации и сброса процессорного блока. Исходный текст заголовочного файла platform.h имеет следующий вид:
#ifndef __PLATFORM_H_ #define __PLATFORM_H_ #include "platform_config.h" void init_platform(); void cleanup_platform(); #endif
Заголовочный файл platform_config.h включает директивы препроцессора, определяющие отдельные параметры конфигурации процессорного блока. Текст этого файла выглядит так:
#ifndef __PLATFORM_CONFIG_H_ #define __PLATFORM_CONFIG_H_ #define STDOUT_IS_PS7_UART #define UART_DEVICE_ID 0 #ifdef __PPC__ #define CACHEABLE_REGION_MASK 0xf0000001 #endif #endif
После завершения процесса подготовки исходных модулей проекта разрабатываемой прикладной программы следует при необходимости отредактировать содержимое автоматически сформированного шаблона файла директив для компоновщика (linker script) или сгенерировать этот файл заново.
Создание файла директив для компоновщика (linker script)
Если в составе разрабатываемого проекта прикладной программы отсутствует автоматически сгенерированный шаблон файла директив для компоновщика (linker script) или требуется сформировать новый вариант этого файла, нужно выполнить следующую последовательность действий. Прежде всего рекомендуется выделить во встроенной панели Project Explorer строку с названием раздела формируемого проекта программного приложения, для которого создается файл директив компоновщика. Далее следует выбрать пункт Xilinx Tools главного меню основного окна интегрированной среды разработки программного обеспечения для встраиваемых микропроцессорных систем. Затем в открывшемся одноименном всплывающем меню надо активизировать команду Generate Linker Script, после чего на экране появляется диалоговая панель с названием Target Processor, как видно на рис. 5. В этой диалоговой панели нужно определить микропроцессорное ядро кристалла расширяемой вычислительной платформы, для которого генерируется файл директив компоновщика. Требуемый вариант указывается в соответствующем поле выбора и подтверждается нажатием клавиши OK, представленной в диалоговой панели Target Processor. Если информация о выбранном микропроцессорном ядре уже содержится в разрабатываемом проекте прикладной программы, то эта диалоговая панель не выводится.
Для генерации нового файла директив компоновщика (linker script) можно воспользоваться и контекстно-зависимым всплывающим меню, открывающимся щелчком правой кнопки мыши после выделения строки с названием раздела разрабатываемого проекта прикладной программы во встроенной панели Project Explorer (рис. 6). В этом меню следует выбрать команду Generate Linker Script. При отсутствии информации о микропроцессорном ядре, для которого разрабатывается программное приложение, на экран выводится диалоговая панель с названием Target Processor — в ней и нужно указать требуемый вариант.
После выбора микропроцессорного ядра на экране появляется диалоговая панель Generate a linker script, первоначальный вид которой изображен на рис. 7. Открывшаяся диалоговая панель позволяет в интерактивном режиме сформировать файл директив для компоновщика с требуемой конфигурацией регионов адресного пространства памяти проектируемой микропроцессорной системы и распределением в них соответствующих секций исполняемого модуля разрабатываемой прикладной программы.
В диалоговой панели Generate a linker script рекомендуется в первую очередь уточнить место расположения создаваемого файла директив (linker script), воспользовавшись полем редактирования значения параметра Output Script. По умолчанию в указанном поле редактирования для записи генерируемого файла предлагается подраздел src, входящий в состав раздела разрабатываемого проекта прикладной программы, для которого создается этот файл. При необходимости можно изменить предлагаемый подраздел с помощью клавиатуры после активизации поля редактирования значения параметра Output Script. Более наглядный способ выбрать место расположения генерируемого файла директив для компоновщика — использование стандартной панели навигации по дискам компьютера, которая появляется при нажатии клавиши Browse, находящейся справа от данного поля редактирования (рис. 7).
Затем нужно указать, для каких вариантов конфигурации средств компиляции и компоновки создаваемой прикладной программы будет применен формируемый файл директив (linker script). Для этого есть поле выбора значения параметра Modify project build settings as follows. Выпадающий список возможных значений такого параметра содержит два варианта — Set generated script on all project build configurations и Set generated script on project’s active build configuration. Вариант Set generated script on all project build configurations распространяет действие генерируемого файла директив (linker script) на все конфигурации средств компиляции и компоновки программного приложения. Для использования создаваемого файла директив только в рамках активной (выбранной) конфигурации средств компиляции и компоновки предназначен вариант Set generated script on project’s active build configuration.
Далее целесообразно ознакомиться с картой распределения адресного пространства памяти для разрабатываемого программного приложения, которая автоматически формируется на основании информации о конфигурации аппаратной части проектируемой микропроцессорной системы. Эта карта отображается в виде таблиц Hardware Memory Map и Fixed Section Assignments. В таблице Hardware Memory Map приведена информация о регионах, которые автоматически выделяются в адресном пространстве памяти на основании сведений об аппаратной части проектируемой встраиваемой системы. Таблица содержит три колонки с названиями Memory, Base Address и Size. В колонке Memory перечислены идентификаторы регионов, зарезервированных в адресном пространстве памяти. Ячейки, образующие столбец с названием Base Address, включают значения базовых адресов для всех выделенных регионов адресного пространства памяти. В ячейках, входящих в состав колонки с названием Size, представлена информация о размере всех регионов адресного пространства памяти, указанных в столбце Memory.
Для получения доступа к таблице Fixed Section Assignments, содержащей сведения о секциях исполняемого кода разрабатываемой прикладной программы, которые должны быть зафиксированы в строго определенных регионах адресного пространства памяти, необходимо расположить курсор в строке с ее названием и щелкнуть левой кнопкой мыши. В состав указанной таблицы, чей вид приведен на рис. 8, входят три колонки с названиями Section, Assigned Memory и Address. В колонке Section отображаются обозначения секций с фиксированным расположением. Ячейки, составляющие столбец Assigned Memory, содержат идентификаторы регионов адресного пространства памяти, где должны находиться указанные секции. Колонка Address содержит информацию об адресах памяти, выделенной для фиксированных секций.
Для того чтобы определить размещение остальных секций исполняемого модуля разрабатываемого программного приложения в адресном пространстве памяти проектируемой микропроцессорной системы, нужно воспользоваться двумя вкладками, представленными в правой части диалоговой панели Generate a linker script. Вкладка Basic, вид которой демонстрирует рис. 7, предоставляет возможность быстрого распределения основных секций разрабатываемой прикладной программы в выделенных регионах адресного пространства памяти. Размещение всех секций кода программного приложения устанавливается с помощью поля выбора значения параметра Place Code Sections in. Выпадающий список возможных вариантов значений этого параметра включает идентификаторы регионов адресного пространства памяти, перечисленные в таблице Hardware Memory Map. Расположение всех секций данных прикладной программы указывается в поле выбора значения параметра Place Data Sections in, выпадающий список допустимых значений которого содержит те же варианты, что и для параметра Place Code Sections in. Регион адресного пространства, где должны размещаться стек и область динамически распределяемой памяти, устанавливается с помощью поля выбора значения параметра Place Heap and Stack in. Требуемый размер области динамически распределяемой памяти задается в поле редактирования значения параметра Heap Size. Необходимый объем памяти, резервируемой под стек, указывается в поле редактирования значения параметра Stack Size. По умолчанию для параметров Heap Size и Stack Size предлагается значение, равное 1 кбайт. Для изменения предлагаемого размера области динамически распределяемой памяти и стека следует воспользоваться клавиатурой после активизации соответствующего поля редактирования.
Вкладка Advanced (рис. 8) позволяет определить размещение каждой секции кода и данных исполняемого модуля разрабатываемого программного приложения в адресном пространстве памяти проектируемой встраиваемой системы. Эта вкладка содержит три таблицы с заголовками Code Sections Assignments, Data Sections Assignments и Heap and Stack Sections Assignments. В таблице Code Sections Assignments отображаются сведения о расположении различных секций кода разрабатываемой прикладной программы в адресном пространстве памяти проектируемой микропроцессорной системы. Таблица Data Sections Assignments предоставляет информацию о размещении секций данных в соответствующих регионах адресного пространства памяти. Эти таблицы имеют аналогичную структуру, в состав которой входят две колонки с названиями Section и Assigned Memory. В колонке Section приводятся обозначения секций кода или данных исполняемого модуля прикладной программы. В столбце Assigned Memory указаны идентификаторы регионов адресного пространства памяти, в которых должны размещаться соответствующие секции кода или данных. Каждая ячейка, входящая в состав этой колонки, представляет собой поле выбора требуемого региона. Для изменения предлагаемого варианта размещения какой-либо секции следует выделить соответствующую ячейку столбца Assigned Memory, поместив в нее курсор и щелкнув левой кнопкой мыши. После этого в правой части выделенной ячейки появляется кнопка управления выпадающим списком возможных вариантов. При нажатии указанной кнопки на экране отображается список всех регионов адресного пространства памяти, перечисленных в таблице Hardware Memory Map, как показано на рис. 9. В этом списке следует выбрать нужный вариант расположения соответствующей секции.
Для того чтобы добавить информацию о размещении секции кода исполняемого модуля, которая отсутствует в таблице Code Sections Assignments, следует воспользоваться клавишей Add Section, расположенной под указанной таблицей (рис. 8). При нажатии этой клавиши на экране появляется диалоговая панель с заголовком Add a custom code section, вид которой изображен на рис. 9. В поле редактирования значения параметра Enter section name, представленном в открывшейся диалоговой панели, надо с помощью клавиатуры указать обозначение определяемой секции кода и подтвердить его нажатием клавиши OK. После этого в таблице Code Sections Assignments добавится новая строка, содержащая сведения о размещении указанной секции кода программного приложения.
Для удаления сведений о расположении какой-либо секции кода в адресном пространстве памяти необходимо выделить соответствующую строку таблицы Code Sections Assignments и нажать клавишу Remove Section, расположенную под таблицей. При этом следует учитывать, что отдельные секции кода исполняемого модуля не могут быть удалены, а потому при выделении строки, содержащей информацию о размещении такой секции, клавиша Remove Section находится в недоступном состоянии.
Таблица Heap and Stack Sections Assignments предоставляет возможность определить объем и расположение стека и область динамически распределяемой памяти в адресном пространстве проектируемой микропроцессорной системы. Регионы адресного пространства памяти, в котором должны размещаться эти области, указываются в соответствующих полях выбора, представленных в ячейках колонки Assigned Memory. Размер выделяемого сегмента для стека и области динамически распределяемой памяти задается в соответствующих полях редактирования, расположенных в столбце Assigned Size.
Непосредственный запуск процесса генерации файла директив для компоновщика, выполняемого в автоматическом режиме на основании указанной информации, осуществляется с помощью клавиши Generate, помещенной в нижней части диалоговой панели Generate a linker script (рис. 9). После успешного завершения этого процесса в разделе, заданном в поле редактирования значения параметра Output Script, появляется файл lscript.ld. При необходимости содержимое сгенерированного файла может быть отредактировано в соответствии с особенностями структуры исполняемого модуля разрабатываемого программного приложения. В частности, в адресном пространстве памяти проектируемой встраиваемой системы могут быть выделены дополнительные регионы, а также изменено размещение отдельных секций исполняемого модуля.
Редактирование файла директив для компоновщика linker script
Для внесения изменений в файл директив компоновщика можно применять различные текстовые редакторы, в том числе встроенный редактор интегрированной среды разработки программного обеспечения встраиваемых микропроцессорных систем Xilinx SDK. Но более эффективным и наглядным является интерактивный метод редактирования файла директив (linker script). Чтобы воспользоваться этим методом, нужно во встроенной панели Project Explorer выделить строку с названием файла директив для компоновщика и дважды щелкнуть левой кнопкой мыши. Затем понадобятся соответствующие инструменты управления, которые представлены на странице Summary открывшейся вкладки основного окна средств Xilinx SDK (рис. 10).
Информация о доступных регионах адресного пространства памяти разрабатываемой микропроцессорной системы приведена в форме таблицы, расположенной в разделе Available Memory Regions. Эта таблица включает три колонки с названиями Name, Base Address и Size. В колонке Name отображаются идентификаторы регионов адресного пространства памяти, выделенных для размещения секций кода и данных исполняемого модуля. В столбце с названием Base Address представлены значения базовых адресов для соответствующих регионов адресного пространства памяти. Колонка Size содержит информацию о размере всех регионов адресного пространства памяти. Каждая ячейка рассматриваемой таблицы представляет собой поле редактирования значения соответствующего параметра. Таким образом, разработчику предоставляется возможность изменения идентификатора, базового адреса и размера выделенного региона.
Для создания нового региона в адресном пространстве памяти проектируемой встраиваемой системы следует воспользоваться клавишей Add Memory, которая находится справа от рассмотренной таблицы. При нажатии этой клавиши в таблице добавляется новая строка, вид которой демонстрирует рис. 10. В качестве названия выделяемого региона адресного пространства памяти предлагается идентификатор newMemoryN, где N соответствует порядковому номеру этого региона. Предлагаемое название рекомендуется заменить с помощью клавиатуры мнемоническим идентификатором, соответствующим назначению выделяемого региона. Затем нужно определить значение базового адреса и размер формируемого региона адресного пространства памяти.
Сведения о размере стека и области динамически распределяемой памяти представлены в полях редактирования, расположенных в разделе Stack and Heap Sizes (рис. 10). Чтобы установить требуемый объем стека, нужно воспользоваться полем редактирования значения параметра Stack Size. Размер области динамически распределяемой памяти указывается в поле редактирования значения параметра Heap Size.
Информация о распределении секций кода и данных исполняемого модуля в регионах адресного пространства памяти содержится в таблице, расположенной в разделе Section to Memory Region Mapping. Таблица состоит из двух колонок с названиями Section Name и Memory Region. В колонке Section Name отображается список секций исполняемого модуля разрабатываемого программного приложения. В столбце Memory Region приведены идентификаторы регионов адресного пространства памяти, в которых должны находиться соответствующие секции кода и данных. Каждая ячейка этой колонки представляет собой поле выбора региона. При выделении какой-либо ячейки столбца Memory Region в правой ее части появляется кнопка управления выпадающим списком возможных вариантов размещения выбранной секции. Нажатие кнопки открывает список, содержащий идентификаторы всех доступных регионов адресного пространства памяти, которые определены в разделе Available Memory Regions (рис. 11).
Для того чтобы все выполненные изменения в файле директив (linker script) вступили в силу, необходимо сохранить этот файл на диске с помощью команды Save из всплывающего меню File или кнопки быстрого доступа , находящейся на оперативной панели управления основного окна средств Xilinx SDK. После завершения редактирования всех файлов, содержащих текст программы на выбранном языке и директивы для компоновщика, рекомендуется установить требуемые значения параметров компиляции исходных модулей разрабатываемого программного приложения.
Установка параметров компиляции исходных модулей разрабатываемой прикладной программы
Для установки нужных значений параметров компиляции исходных модулей нужно в первую очередь во встроенной панели Project Explorer основного окна средств Xilinx SDK выделить строку с названием раздела разрабатываемого проекта прикладной программы, после чего выбрать пункт Project главного меню. Затем в открывшемся одноименном всплывающем меню следует активизировать команду Properties, при выполнении которой на экран выводится диалоговая панель параметров для выбранного проекта программного приложения, как показано на рис. 12. Эта диалоговая панель имеет заголовок Properties for <идентификатор_проекта_программного_приложения>.
Открывшаяся диалоговая панель имеет несколько страниц, доступ к которым предоставляет интерактивный список, расположенный в левой части этой панели. Каждая страница содержит определенную группу параметров средств разработки программного обеспечения, применяемых для создаваемого проекта прикладной программы. Отдельные страницы объединены в разделы в соответствии с функциональным назначением предоставляемых параметров. Для получения доступа к параметрам компиляции исходного кода и генерации исполняемого модуля разрабатываемого программного приложения нужно развернуть раздел C/C++ Build. При этом рассматриваемая диалоговая панель принимает вид, изображенный на рис. 13.
В развернутом разделе C/C++ Build следует выбрать страницу Settings. Непосредственный доступ к этой странице обеспечивает также команда C/C++ Build Settings контекстно-зависимого всплывающего меню, которое открывается щелчком правой кнопки мыши при выделении во встроенной панели Project Explorer строки с названием раздела разрабатываемого проекта программного приложения (рис. 14).
Страница Settings позволяет установить требуемые значения параметров ассемблера, компилятора и компоновщика для разрабатываемого проекта прикладной программы. Все параметры управления, сосредоточенные на этой странице, разделены на группы и подгруппы, соответствующие каждому из перечисленных инструментов средств Xilinx SDK и функциональному назначению. В верхней части страницы Settings находится поле выбора Configuration, определяющее вариант конфигурации средств компиляции и компоновки создаваемой прикладной программы, для которого предназначены устанавливаемые значения параметров управления. Выпадающий список этого поля выбора первоначально содержит стандартные варианты конфигурации, предлагаемые средствами Xilinx SDK, — Debug и Release (рис. 15).
Вариант конфигурации Debug применяется для формирования исполняемого модуля разрабатываемого программного приложения, включающего дополнительную отладочную информацию, которая позволяет контролировать процесс ее выполнения. Вариант Release предназначен для создания отлаженной версии исполняемого модуля прикладной программы, отличающейся наилучшей производительностью.
Если ни одна из предлагаемых конфигураций средств компиляции и компоновки не подходит полностью для разрабатываемого проекта программного приложения, то разработчику предоставляется возможность создания нового варианта. Для этой цели на странице Settings предусмотрена клавиша Manage Configurations. При ее нажатии на экране появляется одноименная диалоговая панель, чей вид демонстрирует рис. 16.
В открывшейся диалоговой панели представлена таблица, содержащая сведения о существующих конфигурациях средств компиляции и компоновки. Эта таблица включает в себя три колонки с названиями Configuration, Description и Status. В колонке Configuration приведены названия существующих конфигураций, в столбце Description — их краткое описание, в колонке Status — сведения о текущем состоянии. Чтобы сформировать новую конфигурацию, нужно воспользоваться клавишей New, которая находится под рассмотренной таблицей. Нажатие этой клавиши открывает диалоговую панель создания новой конфигурации с заголовком Create New Configuration, вид которой приведен на рис. 17.
В этой диалоговой панели необходимо, прежде всего, в поле редактирования значения параметра Name определить название формируемой конфигурации. Затем следует в поле редактирования значения параметра Description привести краткое описание создаваемой конфигурации. Далее с помощью группы кнопок с зависимой фиксацией Copy settings from нужно указать конфигурацию, совокупность значений параметров которой будет скопирована в новую конфигурацию. Чтобы использовать в качестве основы создаваемой конфигурации один из существующих вариантов для текущего проекта программного приложения, следует зафиксировать в нажатом состоянии кнопку Existing configuration. Для копирования значений параметров, установленных в одной из конфигураций, предлагаемых по умолчанию, нужно переключить в нажатое положение кнопку Default configuration. Если необходимо воспользоваться вариантом конфигурации из других проектов прикладных программ, то в нажатое состояние следует переключить кнопку Import from project. Чтобы скопировать в создаваемую конфигурацию совокупность настроек одного из предопределенных вариантов, предусмотренных в составе средств Xilinx SDK, следует нажать кнопку Import predefined. В результате нажатия одной из перечисленных кнопок становится доступным поле выбора, расположенное справа от нее, в котором необходимо указать требуемый вариант, используемый в качестве прототипа для создаваемой конфигурации. Процедура формирования новой конфигурации завершается нажатием клавиши OK, которая находится в нижней части диалоговой панели Create New Configuration. После этого в таблице, представленной в диалоговой панели Manage configurations, добавляется строка, содержащая информацию о сформированной конфигурации.
Диалоговая панель управления конфигурацией средств компиляции и компоновки для разрабатываемого проекта программного приложения позволяет сделать активным, а также переименовать выбранный вариант или удалить неиспользуемую конфигурацию. Для этого следует выделить соответствующую строку в таблице, отображаемой в диалоговой панели Manage configurations. Чтобы сделать выбранную конфигурацию активной, нужно воспользоваться клавишей Set active (рис. 16). Переименование выбранного варианта осуществляется с помощью клавиши Rename, при нажатии которой на экране появляется диалоговая панель с заголовком Rename Configuration, изображенная на рис. 18.
В этой панели можно отредактировать название и краткое описание выбранной конфигурации средств компиляции и компоновки. Выполненные изменения вступают в силу после нажатия клавиши OK в диалоговой панели Rename Configuration. Для удаления выделенной конфигурации предназначена клавиша Remove, после ее нажатия на экран выводится диалоговая панель запроса подтверждения (рис. 19). Выбранный вариант будет удален при нажатии клавиши Yes в этой диалоговой панели.
После определения используемого варианта конфигурации следует установить требуемые значения основных параметров компиляции исходных модулей разрабатываемого проекта программного приложения, которые сосредоточены в группе ARM gcc compiler. При выделении строки с названием этой группы страница Settings принимает вид, представленный на рис. 15. В поле редактирования значения параметра Command отображается командная строка запуска компилятора. Причем во встроенной панели All options приведены все параметры компилятора, установленные для разрабатываемого проекта программного приложения. Чтобы изменить эти параметры, необходимо щелчком левой кнопки мыши выбрать соответствующую подгруппу, входящую в состав группы ARM gcc compiler.
Для определения параметров оптимизации, выполняемой в процессе компиляции исходного кода прикладной программы, нужно открыть подгруппу Optimization. Затем страница Settings приобретает вид, изображенный на рис. 20.
Установка уровня оптимизации, производимой в ходе компиляции исходных модулей разрабатываемого программного приложения, осуществляется с помощью поля выбора значения параметра Optimization Level. Выпадающий список возможных значений этого параметра содержит пять вариантов None (-O0), Optimize (-O1), Optimize more (-O2), Optimize most (-O3) и Optimize for size (-Os). Вариант None (-O0) запрещает выполнение оптимизации в процессе компиляции. Варианты Optimize (-O1), Optimize more (-O2) и Optimize most (-O3) соответствуют минимальному, среднему и максимальному уровню оптимизации. Для оптимизации размера объектного кода, формируемого в результате компиляции, предназначен вариант Optimize for size (-Os). Поле редактирования значения параметра Other optimization flags предоставляет возможность определения дополнительных параметров оптимизации.
Параметры, определяющие объем отладочной информации, который следует включить в состав объектного кода, относятся к подгруппе Debugging, входящей в группу ARM gcc compiler. При выборе этой подгруппы страница Settings принимает вид, приведенный на рис. 21.
Необходимый объем отладочной информации, добавляемой в процессе компиляции исходного кода прикладной программы, указывается в поле выбора значения параметра Debug level. Выпадающий список допустимых значений этого параметра содержит четыре варианта — None, Minumal (g1), Default (g) и Maximum (g2). При использовании варианта None отладочная информация не включается в состав объектного кода. Варианты Minumal (g1), Default (g) и Maximum (g2) соответствуют минимальному, среднему и максимальному объему формируемой отладочной информации. Для определения дополнительных параметров, управляющих генерацией отладочной информации, предусмотрено поле редактирования значения параметра Other debugging flags.
Для того чтобы установленные значения параметров компиляции вступили в силу, необходимо нажать клавишу «Применить» (Apply) или OK, расположенную в нижней части диалоговой панели Properties for.
- Зотов В. Расширение семейства программируемых систем на кристалле Zynq‑7000 AP SoC // Компоненты и технологии. 2013. № 12. 2014. № 1.
- Zynq‑7000 All Programmable SoC Overview. Advance Product Specification. — Xilinx, 2013.
- Zynq‑7000 All Programmable SoC (XC7Z010, XC7Z015, and XC7Z020): DC and AC Switching Characteristics. — Xilinx, 2013.
- Zynq‑7000 All Programmable SoC (XC7Z030, XC7Z045, and XC7Z100): DC and AC Switching Characteristics. — Xilinx, 2013.
- Zynq‑7000 All Programmable SoC Technical Reference Manual. — Xilinx, 2013.
- Zynq‑7000 All Programmable SoC: Concepts, Tools, and Techniques (CTT) A Hands-On Guide to Effective Embedded System Design. — Xilinx, 2013.
- Zynq‑7000 All Programmable SoC Software Developers Guide. — Xilinx, 2013.
- Zynq‑7000 All Programmable SoC PCB Design and Pin Planning Guide. — Xilinx, 2013.
- 7 Series FPGAs and Zynq‑7000 All Programmable SoC XADC Dual 12‑Bit 1 MSPS Analog-to-Digital Converter User Guide. — Xilinx, 2012.
- Зотов В. Средства автоматизированного проектирования и этапы разработки встраиваемых микропроцессорных систем на базе расширяемых процессорных платформ семейства Zynq‑7000 AP SoC // Компоненты и технологии. 2014. № 2–3.
- Зотов В. Проектирование встраиваемых микропроцессорных систем на базе расширяемых процессорных платформ семейства Zynq‑7000 AP SoC в САПР Xilinx ISE Design Suite // Компоненты и технологии. 2014. № 4–12. 2015. № 1.
- Зотов В. Аппаратные средства разработки и отладки встраиваемых микропроцессорных систем, проектируемых на основе расширяемых вычислительных платформ фирмы Xilinx семейства Zynq‑7000 AP SoC // Компоненты и технологии. 2013. № 1.
- Зотов В. ZedBoard — эффективный инструмент разработки и отладки встраиваемых микропроцессорных систем, проектируемых на основе расширяемых вычислительных платформ фирмы Xilinx семейства Zynq‑7000 AP SoC // Компоненты и технологии. 2013. № 6.
- Зотов В. MicroZed — семейство унифицированных модулей для отладки и реализации встраиваемых микропроцессорных систем, проектируемых на основе платформ фирмы Xilinx серии Zynq‑7000 AP SoC // Компоненты и технологии. 2013. № 11.
- Embedded System Tools Reference Manual. — Xilinx, 2013.
- Зотов В. Разработка программного обеспечения встраиваемых микропроцессорных систем, проектируемых на базе расширяемых вычислительных платформ семейства Zynq‑7000 AP SoC фирмы Xilinx. Часть 1 // Компоненты и технологии. 2015. № 2.
- Зотов В. Разработка программного обеспечения встраиваемых микропроцессорных систем, проектируемых на базе расширяемых вычислительных платформ семейства Zynq‑7000 AP SoC фирмы Xilinx. Часть 2 // Компоненты и технологии. 2015. № 3.
- Зотов В. Разработка программного обеспечения встраиваемых микропроцессорных систем, проектируемых на базе расширяемых вычислительных платформ семейства Zynq‑7000 AP SoC фирмы Xilinx. Часть 3 // Компоненты и технологии. 2015. № 4.