Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК МПСС.doc
Скачиваний:
38
Добавлен:
09.11.2019
Размер:
11 Mб
Скачать

2. Настройка и запуск Code Composer Studio (simulation)

После инсталляции CCS при первом запуске программы вначале необходимо произвести настройку ИСР для работы в режиме симуляции ЦСП для отладки кода в виртуальном режиме:

  1. Проверить установлены ли драйвера для платы DSK5510, которые располагаются в папке: С:\CCStudio_v3.1\specdig\ xds510usb\

  2. Запустить утилиту «Setup CCStudio v3.1»(ярлык расположен на рабочем столе), (рисунок 2.1). Эта утилита предлагает выбрать плату отладочного модуля, которая будет установлена в системе, и с которой будет работать ИСР CCS

Рисунок 2.1 – утилита «Setup CCStudio v3.1».

  1. Из списка выбрать плат: «С5510 Device Simulator» и нажать кнопку: «<<Add» (рисунок 2.2). Этот отладочный модуль является виртуальным симулятором отладочной платы DSK5510, и именно он будет установлен в систему для работы с ИСР CCS.

Рисунок 2.2 – Добавление DSK5510 в систему.

  1. После добавление нажать кнопку «Save & Quit» для сохранения настроек системы и выхода из утилиты. В появившемся диалоге нажать кнопку «Да» (рисунок 2.3).

Рисунок 2.3 – Запрос на запуск ИСР CCS.

  1. Автоматически запуститься среда разработки (рис. 2.4):

Рисунок 2.4 – Внешний вид ИСР CCS.

3. Особенности проектирования в иср Code Composer Studio

Разработка Программного Обеспечения и Концепция COFF.

Для стандартизации процесса разработки программного обеспечения Texas Instruments использует «Общий Формат Объектных Файлов» (Common Object File Format (COFF)). COFF наиболее эффективен в задачах, когда разработка программного обеспечения разделена между несколькими программистами.

Каждый файл, содержащий программный код, может быть написан независимо и называется модулем, включая спецификацию всех ресурсов, необходимых для правильного выполнения модуля. Модули могут быть написаны в Code Composer Studio или текстовом редакторе, который может сохранять файлы в ASCII-формате. Предполагаемые расширения исходных файлов на языке ассемблера – .asm, и .c для языка Си.

Рисунок 3.1 – Этапы сборки проекта.

Множество модулей объединяются в завершенную программу с помощью компоновщика. Компоновщик эффективно распределяет ресурсы доступные в устройстве для каждого модуля проекта. Компоновщик пользуется командным файлом .cmd, для определения ресурсов памяти и правил расположения в них различных секций, входящих в состав модуля. Выходом процесса компоновки становится скомпонованный объектный файл .out, который может быть выполнен на DSP, и может быть получен .map файл, который показывает, куда были размещены все секции проекта. Схематически этот процесс отражен на рисунке 3.1.

Концепция COFF обеспечивает модульную разработку программного обеспечения, независимую от аппаратной базы. Отдельно взятый ассемблерный файл может быть написан для выполнения определенной задачи и может быть скомпонован с несколькими другими задачами для получения более сложных систем.

Код разрабатывается аппаратно-независимым, что позволяет программисту модуля не думать о распределении памяти, так как эта работа будет сделана на этапе компоновки проекта. При изменении любого из модулей производится новая сборка проекта, и вопросы распределения памяти решаются заново, исключая вероятность появления конфликтов.

Проекты.

Code Composer работает с проектами, которые создаются для решения задач ЦОС на базе ЦСП. Проект содержит в себе всю необходимую информацию для того, чтобы создать запускаемый файл. Например, он описывает такие вещи как: исходные файлы, заголовочные файлы, карту памяти конечного устройства и опции сборки программы. Информация проекта хранится в файле с расширением *.PJT, который создается и обслуживается средой Code Composer (Рисунок 3.2).

Рисунок 3.2 – Дерево проекта в ИСР CCS

Опции сборки.

Опции проекта указывают компилятору, ассемблеру и компоновщику, как собрать код в соответствии с требованиями системы. Когда создается новый проект, Code Composer формирует два набора опций, называемых конфигурациями: одна называется Debug – Отладочная, а вторая Release – Конечная (Оптимизированная).

Чтобы облегчить процесс настройки опций, ИСР CCS предлагает графический пользовательский интерфейс для различных настроек компилятора, открыть которые можно выбрав раздел Project → Build Options… после чего откроется окно как показано на рисунке 3.3.

Рисунок 3.3 – Опции сборки проекта.

Содержимое строки компилятора полностью соответствует тому, что выбрано через пользовательский интерфейс.

Существует ряд опций компоновщика, но следующие четыре являются основными:

  1. «–o <filename>» – определяет имя выходного (пускового) файла.

  2. «–m <filename>» – указывает компоновщику создавать файл с картой проекта (map-файл).

  3. «–c» – указывает компилятору, что он должен автоматически инициализировать глобальные и статические переменные.

  4. «–x» – указывает компоновщику перечитывать библиотеки. Без этой опции библиотеки прочитываются один раз, поэтому ссылки из одной библиотеки на другую могут не быть разрешены.

Среди ряда параметров сборки, особое внимание следует уделить выбору уровню оптимизации (Program Level Opt. рисунок 3.4). Есть четыре уровня оптимизации (-o0, -o1, -o2, -o3), которые управляют типом и степенью оптимизации:

  1. Уровень 0 оптимизации выполняет упрощение контрольного потокового графа, распределяет переменные для регистров, исключает неиспользованный код, и упрощает выражения и утверждения.

  2. Уровень 1 оптимизации выполняет все оптимизации Уровня 0, исключает неиспользованные определения, и исключает местные общие выражения.

Рисунок 3.4 – Опции сборки и оптимизации.

  1. Уровень 2 оптимизации выполняет все оптимизации Уровня 1, плюс конвейерная обработка программного обеспечения, оптимизация циклов, и разворачивание циклов. Также исключает глобальные общие подвыражения и неиспользованные назначения.

  2. Уровень 3 выполняет все оптимизации Уровня 2, исключает все функции, к которым никогда не обращаются, и упрощает функции возвращающие значения, которые никогда не используются.

Создание Командного Файла Компоновщика

Секции

Программа, написанная на языке Си, содержит одновременно и код, и разные типы данных (глобальные, локальные и т.д.). Texas Instruments и в принятом формате COFF эти различные части программы называются секциями – Sections. Разделение кода и данных на различные секции обеспечивает гибкость, так как позволяют размещать кодовые секции в ПЗУ, а переменные в ОЗУ. В таблице 3.1 показаны секции, создаваемые компилятором.

Таблица 3.1 - Имена секций компилятора

Инициализированные секции

Имя

Описание

Адрес размещения

.text

Код программы

Программа

.cinit

Инициализированные глобальные и статические переменные

Программа

.econst (.const)

Содержит данные (например, const int k = 3;)

Данные

.switch

Таблицы для оператора switch

Данные (программа для ‑mt)

.pinit

Таблицы глобальных конструкторов языка Си

Программа

Неинициализированные секции

Имя

Описание

Адрес размещения

.ebss (.bbs)

Глобальные и статические переменные

Данные

.stack

Пространство стека

Младшие 64К данных

.esysmem (.sysmem)

Память для функций определения памяти far malloc

Данные

Примечание: в скобках указаны секции для модели памяти .small (см. рис 3.5).

Секции программы на языке Си должны размещаться в разных областях памяти процессорной системы. Раздельные секции для кода, констант и переменных позволяет достичь большей производительности. В этом случае секции могут быть размещены точно в нужной область памяти процессорной системы. Секции размещают исходя из назначения (рисунок 3.6), руководствуясь следующими правилами:

Программный Код (.text)

Программный код состоит из последовательности инструкций для обработки данных, инициализации системных настроек и так далее. Программный код должен быть определен во время сброса (Reset) или включения питания. Поэтому необходимо помещать программный код в энергонезависимую память такую как Flash или EPROM.

Рисунок 3.5 – Опции компилятора.

Рисунок 3.6 – Разделение кода программы по секциям памяти.

Константы (.cinit – инициализированные данные)

Инициализированными называются те области памяти данных, которые должны быть определены во время сброса (Reset) или включения питания. Константы содержат начальные значения переменных или значения по умолчанию. Константы подобно программному коду определяют в энергонезависимой памяти.

Переменные (.ebss – неинициализированные данные)

Неинициализированные области памяти содержат данные, которые могут изменяться в процессе выполнения программного кода. Эти данные, в отличие от программного кода и констант, должны находиться в ОЗУ. Эти области памяти могут модифицироваться и обновляться, как это происходит в языках высокого уровня при вычислении математических формул. Каждая переменная объявляется директивой, чтобы зарезервировать память, содержащую ее значение. В соответствии с их определением, им не присваивается какое-либо значение, а изменить их может только работающая программа.

Процесс компоновки кода состоит из трех шагов:

  1. Определение различных областей памяти (встроенная SARAM, Flash, внешняя память)

  2. Описание распределения секций по областям памяти

  3. Запуск компоновщика в процессе сборки (build) или пересборки (rebuild)

Командный Файл Компоновщика (.cmd)

Компоновщик объединяет секции из всех входных файлов, определяя память каждой секции исходя из ее длины и положения определяемого командами MEMORY и SECTIONS в командном файле компоновщика.

Область команды MEMORY описывает конфигурацию памяти процессорной системы для компоновщика.

Формат описания следующий:

Name: origin = 0x????, length = 0x????

Например, если разместить 128К Flash-памяти начиная с адреса 0x3D8000, то содержимое файла будет следующим:

MEMORY

{

FLASH: origin = 0x3D8000, length = 0x20000

}

Таким же образом определяются другие сегменты памяти. Если определить M0SARAM и M1SARAM, то это будет записано как:

MEMORY

{

M0SARAM: origin = 0x000000, length = 0x0400

M1SARAM: origin = 0x000400, length = 0x0400

}

Микроконтроллер имеет два типа памяти: память программ и память данных (Гарвардская архитектура). Поэтому описание каждого типа памяти должно быть раздельно. Компоновщик использует следующий синтаксис для их описания:

Страница компоновщика

Определение Texas Instruments

Page 0

Program (память программ)

Page 1

Data (память данных)

Командный файл будет следующим:

MEMORY

{

PAGE 0: /* Память программ */

FLASH: origin = 0x3D8000, length = 0x20000

PAGE 1: /* Память данных */

M0SARAM: origin = 0x000000, length = 0x0400

M1SARAM: origin = 0x000400, length = 0x0400

}

Директива SECTIONS определяет, как будут распределены секции в описанной памяти. Следующий код используется для связи секций с памятью определенной в предыдущем примере:

SECTIONS

{

.text:> FLASH PAGE 0

.ebss:> M0SARAM PAGE 1

.cinit:> FLASH PAGE 0

.stack:> M1SARAM PAGE 1

}

Компоновщик будет собирать все кодовые секции из всех файлов проекта вместе. Также он поступает с остальными секциями.

Начиная с первой секции, компоновщик поместит их в указанный сегмент памяти.

MEMORY

{

PAGE 0: /* Память программ */

FLASH: origin = 0x3D8000, length = 0x20000

PAGE 1: /* Память данных */

M0SARAM: origin = 0x000000, length = 0x0400

M1SARAM: origin = 0x000400, length = 0x0400

}

SECTIONS

{

.text:> FLASH PAGE 0

.ebss:> M0SARAM PAGE 1

.cinit:> FLASH PAGE 0

.stack:> M1SARAM PAGE 1

}

Карта памяти для TMS320VC5510

Все 16M байты памяти адресуемы как пространство программ или данных (рисунок 3.7). Когда ЦП использует пространство программ для чтения программного кода из памяти, он применяет адреса в 24 бита для обращения к байтам. Когда программа получает доступ к пространству данных, она использует адреса в 23 бита для обращения к 16 - разрядным словам. В обоих случаях шины адреса переносят значения в 24 бита, но в течение доступа к пространству данных, младший бит на шине адреса приравнивается к 0.

Пространство данных делится на 128 основных страниц данных (с 0 по 127). Каждая основная страница данных имеет 64К адресов. Инструкция, ссылающаяся на основную страницу данных, объединяет 7- разрядную страницу данных с 16 - разрядным офсетом.

На странице данных 0 первые 96 адресов (00 0000h-00 005Fh) зарезервированы под регистры, отображенные в карте памяти (MMR). Существует соответствующий блок из 192-х адресов (00 0000h-00 00BFh) в пространстве программ. Не рекомендуется хранить (запоминать) программный код в пространстве памяти.

Для того, чтобы посмотреть, как адреса распределяются между внутренней памятью и внешней памятью, и, чтобы получить информацию о внутренней памяти, обратитесь к технической документации вашего C55x DSP в частности SPRU371D (перевод).

Рисунок 3.7 – Карта памяти TMS320VC5510.

Обращение к памяти процессора может осуществляться по адресам. Аппаратно доступ к блокам, описанным в таблице 3.2, может осуществляться параллельно. Т.е. два доступа за один цикл (два чтения, две записи или чтение и запись). DARAM - Dual-Access RAM (Память с двойным доступом).

Таблица 3.2 – Пространство памяти DARAM

Внутри кристалла также имеются области памяти с одиночным доступом (SARAM). В таблице 3.3 обозначено деление этих областей по адресам.

Таблица 3.3 – Пространство памяти SARAM

В TMS320VC5510 есть вектор прерываний, который обслуживает все внутренние и внешние прерывания. Пространство памяти отведенное вектору прерывания представлено в таблице 3.4.

Таблица 3.4 – Пространство памяти SARAM