В этой статье будет приведена краткая памятка, как создать проект для процессора Blackfin с нуля - на примере ADSP-BF538 и VisualDSP++ 5.0 Update 10.1. Далее описан процесс по шагам.
Шаг 1. Запустите VisualDSP. Выберите в меню File -> New -> Project...
Шаг 2. Запустится мастер создания нового проекта Project Wizard. В разделе дерева параметров Project -> Select Type выберите вариант Standard application. В поле ввода Name введите имя для нового проекта. В поле ввода Directory укажите полный путь до папки, где будет создан проект.
Обратите внимание, что в поле ввода Directory будет подставлен полный путь до каталога на диске, где будет находиться новый проект. Полный путь завершается папкой, которая по умолчанию названа так же, как называется проект. При желании это можно изменить либо вводом полного имени, либо выбором папки для проекта (для выбора можно воспользоваться кнопкой ...). Если указанная в поле ввода Directory папка не существует на диске, то она будет создана. На запрос о создании не существующей папки ответьте положительно.
Шаг 3. Выберите раздел Project -> Select Processor. Укажите тип используемого процессора Blackfin (в данном примере выбран ADSP-BF538).
Можно создавать проекты и для других семейств - SHARK и TigerSHARK, для этого вверху есть выпадающий список Processor family. Можно также выбрать ревизию кристалла из выпадающего списка Silicon Revision (если Вы точно знаете ревизию кристалла), но это не обязательно, можно оставить по умолчанию Automatic.
Шаг 4. Перейдите в раздел Application Settings. Основные настройки здесь это выбор языка проекта (выпадающий список "Select the desired source language for the template code") и выбор типа генерируемого выходного двоичного файла (выпадающий список "Select the project output type for your application"). По умолчанию выбран язык C (есть еще варианты Assembly и C++) и выходной файл Executable (.dxe).
Тип Executable (.dxe) подходит для отладки программы с использованием JTAG (ICE-100B, ICE-1000 или ICE-2000). Можно также выбрать тип проекта Loader file (.ldr). Этот вариант подходит для загрузки и запуска программы процессора из внешней памяти.
На этом базовые шаги по созданию проекта завершены. Нажмите кнопку Finish, и будет создан новый проект.
[Обзор папок дерева проекта]
Система автоматически создаст папку для нового проекта, если она не была создана (в данном примере это папка C:\asm\u8glib-test-generic\), и два новых файла с расширениями *.с и *.dpj (если на шаге 4 был выбран язык C++, то модуль исходного кода будет с расширением *.cpp). В модуле исходного кода с расширением *.c будет создана болванка функции main, куда Вам надо будет добавить нужный код, а в файле с расширением *.dpj будут сохранены настройки проекта.
В левой верхней части рабочего пространства среды VisualDSP Вы увидите дерево папок проекта. Их назначение хорошо понятно по их названию.
Source Files. В эту папку добавляют модули исходного кода на языке C или ассемблера. Все модули исходного кода (с расширением *.c, *.cpp, *.s) папки Source Files будут автоматически компилироваться при запуске сборки проекта. В этой папке можно также создавать подкаталоги, отражающие структуру проекта. Например, если Вы используете в проекте какую-то библиотеку, то целесообразно для её модулей создать отдельный каталог, это упрощает навигацию по проекту.
Linker Files. В эту папку будет помещен автоматически создаваемый файл настроек линкера с расширением *.ldf (см. далее).
Header Files. В эту папку обычно помещают заголовочные файлы проекта (файлы с расширением *.h), хотя это и не обязательно: заголовочные файлы можно помещать и в другие папки, а можно вообще не добавлять в дерево проекта.
[Конфигурации Debug и Release]
После того, как проект создан, в нем автоматически появятся 2 конфигурации Debug и Release. Назначение конфигураций понятна и названия, в них автоматически прописаны соответствующие опции - Debug сделана для отладки, Release для готового кода, который будет использоваться в производстве. Выбрать нужную конфигурацию можно из выпадающего списка панели инструментов VisualDSP.
Обе эти конфигурации отличаются только лишь настройками оптимизации (подробнее см. [1], вопрос "VisualDSP: чем отличаются конфигурации по умолчанию Debug и Release?"). В конфигурации Debug оптимизация включена, в Release отключена (это касается в основном настроек проекта Compile -> General и Link -> Elimination). Отлаживать программу по шагам в исходном коде (при наличии JTAG-отладчика) можно в конфигурации Debug, в конфигурации Release пошаговая отладка по исходному коду невозможна.
Шаг 5. Конфигурация линкера, файл *.ldf.
Одна из стадий сборки проекта - линковка, которая запускается после компиляции исходного кода. Опции линковки задаются в специальном разделе настроек проекта - Add Startup Code/LDF. Этот шаг нужен не всегда, однако он обычно необходим в сложных проектах, особенно когда к процессору подключается внешняя память SDRAM, или надо сконфигурировать параметры кучи.
Add Startup Code/LDF. Этот раздел настроек проекта позволяет создать и настроить конфигурацию проекта, базирующуюся на особенностях реализации рабочей системы.
Здесь можно выбрать 3 варианта подключения конфигурации линкера в программе:
Add an LDF and startup code. В этом варианте система VisualDSP генерирует как файл настроек линкера, так и стартовый код для процессора, и добавляет их в проект.
Add startup code only. В этом варианте генерируется только код startup.
Don't add an LDF or startup code. Это вариант по умолчанию, когда стартовый код и файл настроек линкера не генерируются системой. Вы полностью отвечаете за начальную настройку ядра процессора, и настройки линкера берутся из LDF по умолчанию для выбранного типа процессора (настроенный файл *.ldf система не генерирует).
Startup code. Это процедура, которая инициализирует и конфигурирует процессор, когда выполнение программы начинается со стартового адреса после сброса. Код startup переводит процессор в заранее известное, предопределенное состояние (known state), инициализирует его выбранные функции и разрешает работу стандартной модели кода реального времени выполнения Blackfin.
Вы должны сгенерировать настроенный код startup для Вашего проекта, если Вы хотите сконфигурировать кэш процессора, тактовые частоты CCLK и SCLK, настройки энергопотребления, опции инициализации реального времени выполнения или профайлинг компилятора. Если Вы не хотите генерировать код startup, то приложение будет собрано в расчете на поведение по умолчанию. Код startup может быть сгенерирован автоматически на основе настраиваемых установок проекта в разделе Add Startup Code/LDF.
LDF. Аббревиатура LDF расшифровывается как Linker Description File, т. е. файл описания настроек линкера. Он определяет целевую карту памяти процессора и размещает секции программы в нужных местах адресного пространства. Короче говоря, он предоставляет полную информацию, необходимую для линковки Вашего кода.
Вы должны сгенерировать настроенный файл LDF для Вашего проекта, если хотите конфигурировать опции памяти, относящиеся к размещению кучи (heap, это место в памяти, связанное с динамическим выделением и освобождением памяти), стека или внешней памяти (например SDRAM). Если Вы не хотите генерировать LDF, то приложение будет слинковано с помощью LDF по умолчанию для выбранного процессора.
По умолчанию выбран последний вариант (Don't add an LDF or startup code), но он подходит не всегда. Например, в схеме имеется микросхема памяти SDRAM MT48LC16M16A2 на 32 мегабайта, и её нужно добавить в адресное пространство процессора, чтобы можно было использовать в программе. Для этого нужно воспользоваться настройками проекта в разделе Add Startup Code/LDF.
Если выбрать первый или второй вариант (Add an LDF and startup code или Add startup code only), то открываются дополнительные настройки проекта в разделе Add Startup Code/LDF. Эти настройки распределены по разделам: LDF Settings и Startup Code Settings (эти разделы появляются только после выбора, сделанного в разделе настроек Add Startup Code/LDF).
LDF Settings. Это настройки, касающиеся памяти процессора. Для добавления памяти SDRAM зайдите в раздел LDF Settings -> External Memory и поставьте галочку Use external memory (SDRAM). Затем выберите размер внешней памяти (Size of external memory). После того, как нажмете OK, будет сгенерирован файл имя_проекта.ldf, и помещен в корневую папку проекта (там же находится файл настроек проекта имя_проекта.dpj). Также будут сгенерированы файлы имя_проекта_basiccrt.s (файл настройки ядра процессора) и имя_проекта_heaptab.c (файл инициализации кучи).
В дереве проекта VisualDSP эти файлы будут видны в папках Linker Files и Generated Files.
Чтобы настройки вступили в силу, необходимо перекомпилировать проект.