Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AiPSP_ekzamen_main.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

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). Механизм обработки прерываний в программах на С/С++ основан на использовании такого файла инициализации среды выполнения

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]