- •1. Принципы и базовые алгоритмы обработки сигналов в цифровых системах. Требования к аппаратной базе для выполнения базовых операций цос.
- •3. Форматы представления данных в сигнальных процессорах. Сравнительные особенности процессоров, ориентированных на обработку фз- и пз-данных. Оценка необходимой разрядности процессора.
- •1. Данные с фиксированной запятой (Fixed-Point Numbers)
- •2. Данные с плавающей запятой (Floating-Point Numbers)
- •4. Этапы и средства разработки и отладки по для процессоров цос. Критерии выбора языка программирования и средств разработки по
- •6. Особенности программной организации ввода-обработки-вывода данных в системах цос, работающих в реальном времени. Работа по прерываниям. Использование буферов.
- •7. Методики оптимизации кода для risc-процессоров
- •Inline- функции
- •8. Dsp семейства adsp-2106x. Основные характеристики и особенности архитектуры.
- •9. Карта памяти adsp-2106x. Пространства внутренней памяти, памяти многопроцессорной системы и внешней памяти. Пространство памяти iop-регистров.
- •10. Физическая организация внутренней памяти. Блоки памяти. Возможные виды конфликтов при обращении к внутренней памяти и способы их устранения. Адресация нормальных и коротких слов.
- •12. Доступ к памяти в программе. Организация dag. Основные возможности. Особенности программирования регистров dag. Кольцевые буферы.
- •13. Системные регистры: назначение и работа с ними. Устройство обмена между шинами (px-регистры).
- •14. Общие принципы работы вычислительных блоков adsp-21ххх. Особенности организации вычислений с пз- и фз-данными. Регистровый файл. Поддерживаемые типы данных и их идентификация в программе.
- •15. Теневые регистры. Регистры флагов. Понятие "липких" флагов. Флаги аккумулирующих сравнений.
- •16. Описание и функции алу. Флаги состояния и режимы работы алу. Мас. Функционирование мас. Особенности выполнения операций округления и насыщения при работе с фз-операндами. Флаги состояния мас.
- •17. Сдвигатель. Функционирование сдвигателя. Выделение и депонирование битовых полей. Флаги состояния сдвигателя. Организация многофункциональных вычислений. Ограничения.
- •19. Организация циклов. Ограничения при организации циклов. Циклы не по счетчику. Достоинства и недостатки аппаратной поддержки циклов.
- •20. Кэш инструкций. Структура и функционирование. Возможности управления обновлением кэша. Примеры повышения/понижения эффективности выполнения кода с учетом работы кэша.
- •21. Обработка прерываний: общая последовательность действий. Таблица прерываний. Маскирование прерываний. Регистры, программного секвенсора, используемые при обработке прерываний.
- •22. Отличия работы процессора при разрешенных и запрещенных вложенных прерываниях.
- •23. Организация работы с таймером. Программные прерывания. Внешние прерывания.
- •24. Понятие и назначение dma-пересылок в adsp-2106x. Направления пересылок. Каналы dma. Принципы функционирования dma-контроллера adsp-2106x. Генерация прерываний dma-контроллером.
- •26. Цепочечные dma-пересылки в adsp-2106x. Tcb-блоки. Инициирование и завершение цепочечных dma-пересылок. Контроль состояния цепочечной dma-пересылки
- •27. Порты sharc-процессоров. Реализуемые виды интерфейсов. Организация взаимодействия между процессорным ядром и портами при вводе/выводе данных.
- •29. Архитектура и принципы функционирования линк-портов (звеньевых портов) adsp-2106x. Регистры управления работой линк-портов adsp-2106x. Связь между линк-буферами и линк-портами.
- •30. Организация взаимодействия между процессорами по выделенным каналом через линк-порты. Регистр lsrq и его назначение. Идея алгоритма "передачи маркера".
- •31. Механизм арбитража внешней шины. Схемы приоритетов. Приоритетный доступ процессорного ядра.
- •32. Операции вещательной записи. Блокировка шины. Использование "зеркальных" семафоров. Межпроцессорные сообщения и вектор прерывания virpt.
- •33. Отличительные особенности компилятора cc21k. Поддерживаемые типы данных и их реализация.
- •2.1. Общие сведения
- •2.2. Поддерживаемые типы данных
- •34. Расширения языка с. Ассемблерные вставки – использование регистров. Поддержка пространств памяти данных памяти команд. Доступ к круговым буферам.
- •2.3.1. Поддержка inline-функций
- •2.3.2. Ассемблерные вставки
- •2.3.3. Поддержка пространств памяти данных и памяти команд
- •2.3.4. Доступ к круговым буферам
- •2.4.1. Использование памяти
- •2.4.2. Регистры компилятора
- •36. Работа со стеком при вызове процедур в рамках rte. Передача и возврат параметров. Взаимодействие программ на с и ассемблере
- •2.4.4. Передача параметров в функции и возврат значений
- •2.5. Взаимодействие подпрограмм на с и ассемблере
- •2.5.1. Описания имен и области их видимости
- •2.5.2. Макросы для работы со стеком при вызове и возврате из функций на ассемблере
- •2.5.3. Вызов подпрограммы на ассемблере из программы на с
- •2.5.4. Вызов подпрограммы на с из подпрограммы на ассемблере
- •37. Разработка обработчиков прерываний. Диспетчер прерываний. Классификация обработчиков прерываний по "быстродействию" и накладным расходам.
2.4.1. Использование памяти
Среда выполнения С/С++ требует использования определенных секций для размещения кода и данных в памяти процессора. Эти секции задаются в LDF-файле в виде выходных (Output) секций. Естественно, что проецирование секций на физическую память процессора должно выполняться с учетом модели процессора и структуры его памяти. Одним из наиболее простых вариантов для небольших проектов является отказ от разработки собственного LDF-файла и использование LDF-файла по умолчанию. В этом случае LDF-файл вообще не следует добавлять в проект: компоновщик будет использовать файл описания архитектуры, соответствующий выбранному в опциях типу процессора и языку программирования. Если же необходимы какие-либо модификации, например, в размерах сегментов, то следует скопировать стандартный ldf-файл в свою директорию, подключить его к проекту и затем вносить в него изменения.
Стандартными для компилятора С/С++ выходными секциями являются:
Имя секции |
Для чего используется |
seg_pmco |
Размещается в памяти программ, содержит код программы, а также требуется для нормальной работы некоторых библиотечных функций С/С++ |
seg_dmda |
Размещается в памяти данных. По умолчанию содержит все глобальные и статические переменные, а также символьные строки, например в этой секции будет размещен массив data: static int datas[10]; Требуется для работы некоторых библиотечных функций С/С++ |
seg_pmda |
Размещается в памяти программ и содержит переменные, которые должны быть явно помещены в PM-память, например: static int pm coeffs[10]; Требуется для работы некоторых библиотечных функций С/С++ |
seg_stak |
Размещается в памяти данных и используется для хранения локальных переменных и адресов возврата из подпрограмм. Обязательна для функционирования программы на С/С++. Обычно размер стека составляет 4К 32-битовых слов |
seg_heap |
Размещается в памяти данных и представляет собой "кучу", из которой динамически выделяется память при необходимости во время работы программы (при выполнении операций malloc, calloc и т.п.). Стандартный размер кучи – 60К 32-битовых слов. Компилятор поддерживает возможность использования нескольких куч, причем размещенных в различных пространствах памяти |
seg_init |
Размещается в памяти программ и содержит данные, необходимые для инициализации программы, т.е. ее загрузки во внутреннюю память процессора для выполнения (или настройки параметров внешней памяти при выполнении команды из внешнего ОЗУ) |
seg_rth |
Размещается в памяти программ и содержит код для выполнения инициализационных действий и таблицу векторов прерываний. Инициализационный (заголовочный) код, run-time header, устанавливает начальные значения переменных среды выполнения С/С++, инициализирует таблицу векторов прерывания, вызывает функцию main(). Для этого по умолчанию используется объектный файл, выходящий в состав среды VisualDSP++ (например, 060_hdr.doj). Механизм обработки прерываний в программах на С/С++ основан на использовании такого файла инициализации среды выполнения |
