Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Всем мяу ! Возникла у меня простенькая задача, которую никак не могу решить. Необходимо с помощью линкера выделить некую область в памяти программ по определённым адресам и поместить в неё инициализированный массив (либо структуру) с данными. Т.к. я в этих линкерах, скриптах, ... - ноль без палочки, прошу знающих людей дать подсказку, либо небольшой примерчик. Перелопатил кучу статей, форумов, документов - везде ограничиваются примером, типа :
Т.е. размещением данных в собственно-созданной секции. Оно всё понятно, но вот вопрос - как создать эту секцию с помощью линкерного скрипта? Ума не приложу Всем ответившим - Спасибо !
Необходимо с помощью линкера выделить некую область в памяти программ по определённым адресам и поместить в неё инициализированный массив (либо структуру) с данными.
Для чего, если не секрет? Собираешься прошивателем переписывать секцию? Просто массив объявить как const мало?
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Блин, оказывается у меня компилятор просто выкидывал массив как ненужный. Причём, независимо от volatile. А я и так, и сяк, и что только в скрипте не писал... Простое обращение к массиву решила все проблемы.
Всегда думал, что квалификатор volatile служит для связывания шаловливых ручек оптимизатора
Отключает оптимизацию доступа к объекту. А нет доступа - нет объекта.
Во, можно такой кейс придумать. Берём на регистры какого-нибудь аппаратного модуля проецируем инициализированный массив с конфигурацией. При запуске в стартапе этот массив будет на место копироваться тем самым конфигурируя аппаратный модуль. Ну это так, чисто поржать
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Отвечаю на вопрос "Зачем это всё ?". Ибо, на самом деле, со стороны всё это выглядит глупым забиванием мозгов Это нужно для бутлодыря. Точнее не для него самого, а для ПО, которое он шьёт. В самом начале области кода я размещаю необходимую инфу о программе (имя, версия, стартовый адрес, ...), а бутлодырь, читая эту область, знает всё о ней. По большому счёту, мне нужна инфа только для того, чтобы бут писал её на дисплее, при выборе бинарного файла.
Ну по имени вашей секции это было понятно. Имеет право на существование. Можно было, правда, сразу за векторами прерываний расположить автоматом. Никто бы его оттуда не сдвинул.
Думаю, вот так его даже без обращений линкер не выкинет. Попробуйте для интереса. Без определения MEMORY. Ведь таблица векторов прерываний это точно такой-же массив как и у вас и без обращений.
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4565 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
VladislavS писал(а):
Можно было, правда, сразу за векторами прерываний расположить автоматом.
Тут уже, в принципе, без разницы, где её размещать. Вектора прерываний в моём МК могут находиться в любом месте, их адреса - не константы. PIC32MZ. Отсюда и линковка с бутом делаются проще - для каждой программы всё своё (адреса), только джампами прыгай на стартап ...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения