Перейти к содержанию
    

размещение секций в не сплошную область. скрипт линкера

Здравствуйте.

Проблема размещения секций линкера в разнородные области памяти.

Имеется флешь с адресом 0x70000000 там размещена загружаемая секция text (обработчики прерываний).

Флешь медленная поэтому VMA  секция должна находится в быстрой внутренней (оперативной) памяти контроллера в секции   с адресом 0x20000000.

В примерах я не видел что бы  секции с кодом (только для чтения LMA) с большим значение адресов могли ссылаться  в области с меньшими значениями адреса как VMA секция,

обычно так поступают с секций data.

Мои попытки указывать виртуальный адрес для секции text (код) в обрасти внутренней оперативной памяти  приводят к увеличению образа до размера 1,5 гб

(предполагаю из за того что значения адресов флеши и внутренней оперативы сильно отличаются).

Я новичек в ld скриптах и кажется запутался..

Спасибо.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, winniethepooh сказал:

Проблема размещения секций линкера в разнородные области памяти.

Нет такой проблемы. Всё нормально размещается.

2 часа назад, winniethepooh сказал:

Мои попытки указывать виртуальный адрес для секции text (код) в обрасти внутренней оперативной памяти  приводят к увеличению образа до размера 1,5 гб

Цитата

П: - Доктор, когда я делаю вот так, у меня тут болит.
Д: - А Вы так не делайте.

Не делайте .bin, делайте .hex. И не будет болеть.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

простите я не понял, чем hex может мне помочь в этом случае?

то что в данном случае  секции с кодом не имеет значения ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, winniethepooh сказал:

простите я не понял, чем hex может мне помочь в этом случае?

Я же выделил. Оно поможет от:

1 час назад, jcxz сказал:

приводят к увеличению образа до размера 1,5 гб

 

46 минут назад, winniethepooh сказал:

то что в данном случае  секции с кодом не имеет значения ?

Значения для чего? Вопрос не ясен.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, jcxz said:

 

программа для прошивки которую я использую  не "понимает" hex (альтернативы нет),  моя проблема с размером была связана не с форматом файла а с тем что внутри секции оператор "."  получает значение из области расположения данной секции а в случае выхода из секции уже не возвращается к прежним адресам (извините за сумбур не владею предметом достаточно хорошо.) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, winniethepooh сказал:

Мои попытки указывать виртуальный адрес для секции text (код) в обрасти внутренней оперативной памяти  приводят к увеличению образа до размера 1,5 гб

(предполагаю из за того что значения адресов флеши и внутренней оперативы сильно отличаются).

Я новичек в ld скриптах и кажется запутался..

Попробую разъяснить. Предполагаете вы правильно.
Если вы задали линковщику расположить код несколькими кусками, сначала на младших адресах, а потом кусок на больших адресах, то линковщик так и сделает.
А формат *.bin - это образ памяти, там нет возможности формировать куски. Поэтому в нем будет (например) маленький кусок кода в начале, потом массив 0xFF (или нулей), а потом снова маленький кусок кода в конце. Формат *.hex позволяет адресовать куски кода, поэтому область 0xFF (или нулей) в него включена не будет.

з.ы. а вообще, по правилам хорошего тона, нужно сразу озвучивать компилятор, версию.
Я, конечно, глянул, что такое "ld скрипт" - это GCC, но зачем заставлять напрягаться.
Линковщик GCC не знаю, так что в этом не помогу.

з.з.ы. еще, если эта медленная флеш у вас внешняя, то совсем не обязательно, что ваш прошивальщик умеет ее прошивать. Так что там может быть с вашей стороны еще куча вопросов.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 minutes ago, Baser said:

 

спасибо Baser.

действительно, нужно сразу было озвучить.

непонятно как hex позволяет "адресовать" куски (.hex - текстовый формат), разве он не будет представлением неправильно сформированного образа в текстовом формате  с теми же "дырами" как в bin файле?

да внешняя nor флешка программируется j-link программатором и программой j-flash (если конечно файлы конфигурации представлены для данного контроллера и флешки)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 минут назад, winniethepooh сказал:

непонятно как позволяет "адресовать" куски

Начало каждой строки hex файла содержит адрес для блока данных, которые идут в строке дальше. В конце строки контрольная сумма.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

52 minutes ago, Zig said:

Начало каждой строки hex файла содержит адрес для блока данных, которые идут в строке дальше. В конце строки контрольная сумма.

для hex файла возможно редактирование, когда "дыры" вручную удаляются, таким образом получается непрерывная область для записи образа.

я правильно понимаю? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 минуту назад, winniethepooh сказал:

для hex файла возможно редактирование, когда "дыры" вручную удаляются, таким образом получается непрерывная область для записи образа.

я правильно понимаю? 

Не понял вашу мысль. hex файл, действительно, можно в ручную редактировать. Но обычно, наоборот, чем вы говорите. Например, ИАР, при вычислении CRC, принудительно заполняет все свободное пространство "чистой памятью" (0xFF или 0x00). Так, как это происходит в *.bin файле. Но эту область можно удалить (умеючи) для уменьшения размера *.hex файла.

А вот для "получения непрерывной области для записи образа" как раз эту "чистую память" нужно добавлять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, winniethepooh сказал:

для hex файла возможно редактирование, когда "дыры" вручную удаляются

Дыр в таком формате файлов нет по-определению. Он состоит из одной или нескольких записей. Каждая запись описывает непрерывную область памяти размером от 0 до 255 байт, в т.ч. начальный адрес этой области. Т.е. можно описывать фрагментированные по адресному пространству данные. При этом могут получиться дыры. Формат никак не описывает их содержимого. Программатор либо проигнорирует их, либо заполнит некоторым значением по-умолчанию, которое зависит от типа микросхемы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, Darth Vader сказал:

Он состоит из одной или нескольких записей. Каждая запись описывает непрерывную область памяти размером от 0 до 255 байт

Уточню, что одна запись (строка) обычно содержит до 16 байт.
А вот адрес 16-и разрядный. То есть при большем размере данных, применяют формат Intel Extended.
Там еще есть запись смещения адреса.
Intel HEX

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, Baser сказал:

Уточню, что одна запись (строка) обычно содержит до 16 байт.

Я исходил из этого:

Цитата
  • DD Поле данных. Запись может содержать несколько байт данных. Количество байт данных должно соответствовать полю LL.

Раз поле длины LL имеет размер в 1 байт, то максимальный размер описываемого одной записью области памяти может быть 255 байт (в случае LL=0xFF)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, Darth Vader сказал:

Раз поле длины LL имеет размер в 1 байт, то максимальный размер описываемого одной записью области памяти может быть 255 байт (в случае LL=0xFF)

Все так, согласен. Пару раз встречал такие hex файлы со строкой больше 80-и символов, которые переносились на другую строку. Но это же неудобно. Видел и файлы с 32-я байтами в строке. Но общераспространенной практикой являются 16 байт в строке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Baser сказал:

Но общераспространенной практикой являются 16 байт в строке.

Понятно. Спасибо за разъяснение. А то думал, что что-то пропустил в описании формата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...