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