Разработка приложений для СнК SmartFusion2 с использованием средств разработки Libero SoC и SoftConsole.
Часть 2. Создание исполняемой версии прошивки
Для относительно простого приложения, каким является пример дизайна из предыдущей статьи, весь цикл разработки кода ВПО в смысле настроек компоновщика (Linker) среды SoftConsole можно упрощенно представить как совокупность двух этапов:
- Разработка и отладка кода ВПО, в ходе которой создается отладочная версия прошивки ВПО и применяются настройки компоновщика SoftConsole Debu.
- Создание исполняемой версии прошивки ВПО, предназначенной для работы в окончательной коммерческой версии устройства, для чего используются настройки компоновщика SoftConsole Release.
Поскольку 99% времени разработчика занимает процесс отладки создаваемого ВПО, среда SoftConsole 3.4 по умолчанию имеет настройки компоновщика Debug. В соответствии с данными настройками при реализации команды Project>Build Project создается файл с исполняемым кодом, который содержит отладочную информацию, необходимую для пошагового выполнения программы согласно командам отладчика. В рассмотренном в предыдущей статье примере этот файл называется LedUART_MSS_CM3_app.hex и находится в папке .LedUART\SoftConsole\LedUART_MSS_CM3\LedUART_MSS_CM3_app\Debug нашего проекта.
При выполнении команды Run>Debug Configuration>Debug главного меню SoftConsole код из этого файла загружается с помощью программатора в eSRAM микросхемы и в дальнейшем может быть пройден пошагово в режиме отладки.
Однако данный код не может быть использован в качестве окончательной версии прошивки, поскольку загружается в eSRAM и будет потерян после выключения питания. Версия прошивки Release, предназначенная для коммерческого использования в серийном устройстве, должна загружаться в постоянное запоминающее устройство (ПЗУ), например в eNVM, и выполняться непосредственно из ПЗУ либо отображаться в оперативную память eSRAM или внешнюю RAM и выполняться оттуда.
Для упрощения процесса загрузки серийного изделия исполняемый код ВПО объединяется с конфигурационной последовательностью матрицы FPGA в единый файл и загружается в SoC SmartFusion2 в общем процессе.
Итак, создадим Release-версию ВПО, загрузим ее в кристалл и убедимся, что программа продолжает работать после того, как питание включено заново. Для отработки данного действия будем использовать уже созданный нами проект LedUART. Считаем, что средства разработки LiberoSoC 11.6 и SoftConsole 3.4 запущены, а проекты загружены. Для получения Release-версии необходимо выполнить следующее:
- В среде SoftConsole 3.4 перейти в режим C/C++ Perspective, для чего выполнить команду главного меню SoftConsole Window>Open Perspective>C/C++:
- В появившемся окне Project Explorer щелкнуть правой кнопкой на проекте LedUART_CM3_app, в открывшемся меню выбрать пункт Properties, в появившемся окне свойств выбрать опцию C/C++ Build>Settings. Ввыпадающем списке Configuration выбрать пункт Во вкладке Tool settings выбираем опцию GNU C Linker>Miscellaneous.
- Вполне Linker flags заменяем имя файла настроек линковщика на production-smartfusion2‑execute-in-place.ld.
-
- Результат преобразований представлен на рис. 1.
- Нажимаем кнопки Apply, OK, сохраняем изменения.
- Затем необходимо выполнить пп. 2–4 по отношению к проекту LedUART_CM3_hw_platform.
- Для проекта LedUART_CM3_app выполнить команду Build configurations>Set Active>Release, то есть в окне Project Explorer щелкнуть правой кнопкой на проекте LedUART_CM3_app, в открывшемся окне установить конфигурацию Release в качестве активной.
- Выполнить п. 6 по отношению к проекту LedUART_CM3_hw_platform.
- Выполнить команду основного меню Project>Build All. В результате в папке проекта \LedUART\SoftConsole\LedUART_MSS_CM3\LedUART_MSS_CM3_app будет создан каталог Release, а в нем появится файл hex финальной версии ВПО.
Итак, исполняемую Release-версию программы встроенного программного обеспечения мы получили. Теперь необходимо создать общий загрузочный файл, содержащий исполняемый код ВПО и конфигурационную последовательность FPGA, и загрузить его в микросхему. Для этого в среде разработки Libero SoC 11.6 в окне редактирования свойств микроконтроллерной подсистемы LedUART_MSS нашего проекта дважды щелкаем на компоненте ENVM. В появившемся окне eNVM Configurator в разделе Available client types выбираем пункт Data Storage и щелкаем дважды по нему. В появившемся окне Add Storage Client вводим название нашего приложения App и указываем расположение файла LedUART_MSS_CM3_app.hex с исполняемым кодом. Остальные параметры формы оставляем без изменений. После выполнения указанных действий окно Add Storage Client должно выглядеть, как показано на рис. 2. Принимаем внесенные изменения, нажимаем OK. Состояние окна конфигуратора памяти eNVM изменилось: в нем появилась строка с параметрами нашего исполняемого модуля. В окне статистики видим, какую часть имеющейся в кристалле eNVM памяти заняло наше приложение (рис. 3). Принимаем внесенные изменения, нажимаем OK. Создаем компонент, для чего выполняем команду основного меню SmartDesign>Generate Component. Создаем результирующий файл прошивки для программирования микросхемы командой Design>Generate Bitstream и прошиваем чип, дважды щелкнув на команде Program Design> Ran PROGRAM Action в окне Design Flow.
Убеждаемся, что после выключения и включения питания нашего устройства разработанная нами программа по отправке в порт UART_0 принятого символа продолжает функционировать.
Процесс создания синтеза прошивки, включающей конфигурационную последовательность FPGA и исполняемый код процессора Cortex-M3, может занять несколько минут. Если нет уверенности в том, что создаваемая версия ВПО является итоговой, можно создать отладочную версию ВПО, предназначенную для загрузки в eNVM, выполнить пошаговую отладку, при необходимости дополнительно отредактировать код ВПО. Для этого следует использовать скрипт debug-in-microsemi-smartfusion2‑envm.ld. Преимущество данного варианта в том, что, однажды прошив FPGA, мы пропускаем операцию сборки и загрузки результирующей прошивки, загружая в кристалл только код изменившегося встроенного программного обеспечения. К недостаткам данного варианта относится то, что исполняемый файл ВПО содержит отладочную информацию и, следовательно, занимает больше места в eNVM.
Microsemi предлагает разработчику целый ряд полезных вариантов файлов настроек компоновщика, позволяющих, например, выполнять код ВПО из внешней Flash-памяти или с отображением кода во внешнюю SRAM. Примеры их применения рассмотрим в следующих статьях.
Проект, в котором реализованы описанные в данной статье этапы проектирования, доступен по ссылке [2].
- Поздняков П. Разработка приложений для СнК SmartFusion2 с использованием средств разработки Libero SoC и SoftConsole // Компоненты и технологии. 2016. № 1.
- drive.google.com/file/d/0B6gJ23CPBznKQ1JxWW9XQ29wLWc/view?usp=sharing /ссылка утрачена/