Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создание командного файла компоновщикаСодержание книги
Поиск на нашем сайте
Секции Программа, написанная на языке Си, содержит одновременно и код, и разные типы данных (глобальные, локальные и т.д.). Texas Instruments и в принятом формате COFF эти различные части программы называются секциями – Sections. Разделение кода и данных на различные секции обеспечивает гибкость, так как позволяют размещать кодовые секции в ПЗУ, а переменные в ОЗУ. В таблице 3.1 показаны секции, создаваемые компилятором.
Таблица 3.1 - Имена секций компилятора
Примечание: в скобках указаны секции для модели памяти.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 } Микроконтроллер имеет два типа памяти: память программ и память данных (Гарвардская архитектура). Поэтому описание каждого типа памяти должно быть раздельно. Компоновщик использует следующий синтаксис для их описания:
Командный файл будет следующим: 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 }
|
||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 328; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.133.149.244 (0.01 с.) |