winniethepooh 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба Здравствуйте. Проблема размещения секций линкера в разнородные области памяти. Имеется флешь с адресом 0x70000000 там размещена загружаемая секция text (обработчики прерываний). Флешь медленная поэтому VMA секция должна находится в быстрой внутренней (оперативной) памяти контроллера в секции с адресом 0x20000000. В примерах я не видел что бы секции с кодом (только для чтения LMA) с большим значение адресов могли ссылаться в области с меньшими значениями адреса как VMA секция, обычно так поступают с секций data. Мои попытки указывать виртуальный адрес для секции text (код) в обрасти внутренней оперативной памяти приводят к увеличению образа до размера 1,5 гб (предполагаю из за того что значения адресов флеши и внутренней оперативы сильно отличаются). Я новичек в ld скриптах и кажется запутался.. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 2 часа назад, winniethepooh сказал: Проблема размещения секций линкера в разнородные области памяти. Нет такой проблемы. Всё нормально размещается. 2 часа назад, winniethepooh сказал: Мои попытки указывать виртуальный адрес для секции text (код) в обрасти внутренней оперативной памяти приводят к увеличению образа до размера 1,5 гб Цитата П: - Доктор, когда я делаю вот так, у меня тут болит. Д: - А Вы так не делайте. Не делайте .bin, делайте .hex. И не будет болеть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winniethepooh 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба простите я не понял, чем hex может мне помочь в этом случае? то что в данном случае секции с кодом не имеет значения ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 45 минут назад, winniethepooh сказал: простите я не понял, чем hex может мне помочь в этом случае? Я же выделил. Оно поможет от: 1 час назад, jcxz сказал: приводят к увеличению образа до размера 1,5 гб 46 минут назад, winniethepooh сказал: то что в данном случае секции с кодом не имеет значения ? Значения для чего? Вопрос не ясен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winniethepooh 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 10 minutes ago, jcxz said: программа для прошивки которую я использую не "понимает" hex (альтернативы нет), моя проблема с размером была связана не с форматом файла а с тем что внутри секции оператор "." получает значение из области расположения данной секции а в случае выхода из секции уже не возвращается к прежним адресам (извините за сумбур не владею предметом достаточно хорошо.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 4 часа назад, winniethepooh сказал: Мои попытки указывать виртуальный адрес для секции text (код) в обрасти внутренней оперативной памяти приводят к увеличению образа до размера 1,5 гб (предполагаю из за того что значения адресов флеши и внутренней оперативы сильно отличаются). Я новичек в ld скриптах и кажется запутался.. Попробую разъяснить. Предполагаете вы правильно. Если вы задали линковщику расположить код несколькими кусками, сначала на младших адресах, а потом кусок на больших адресах, то линковщик так и сделает. А формат *.bin - это образ памяти, там нет возможности формировать куски. Поэтому в нем будет (например) маленький кусок кода в начале, потом массив 0xFF (или нулей), а потом снова маленький кусок кода в конце. Формат *.hex позволяет адресовать куски кода, поэтому область 0xFF (или нулей) в него включена не будет. з.ы. а вообще, по правилам хорошего тона, нужно сразу озвучивать компилятор, версию. Я, конечно, глянул, что такое "ld скрипт" - это GCC, но зачем заставлять напрягаться. Линковщик GCC не знаю, так что в этом не помогу. з.з.ы. еще, если эта медленная флеш у вас внешняя, то совсем не обязательно, что ваш прошивальщик умеет ее прошивать. Так что там может быть с вашей стороны еще куча вопросов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winniethepooh 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 57 minutes ago, Baser said: спасибо Baser. действительно, нужно сразу было озвучить. непонятно как hex позволяет "адресовать" куски (.hex - текстовый формат), разве он не будет представлением неправильно сформированного образа в текстовом формате с теми же "дырами" как в bin файле? да внешняя nor флешка программируется j-link программатором и программой j-flash (если конечно файлы конфигурации представлены для данного контроллера и флешки) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 31 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 29 минут назад, winniethepooh сказал: непонятно как позволяет "адресовать" куски Начало каждой строки hex файла содержит адрес для блока данных, которые идут в строке дальше. В конце строки контрольная сумма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winniethepooh 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 52 minutes ago, Zig said: Начало каждой строки hex файла содержит адрес для блока данных, которые идут в строке дальше. В конце строки контрольная сумма. для hex файла возможно редактирование, когда "дыры" вручную удаляются, таким образом получается непрерывная область для записи образа. я правильно понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 31 минуту назад, winniethepooh сказал: для hex файла возможно редактирование, когда "дыры" вручную удаляются, таким образом получается непрерывная область для записи образа. я правильно понимаю? Не понял вашу мысль. hex файл, действительно, можно в ручную редактировать. Но обычно, наоборот, чем вы говорите. Например, ИАР, при вычислении CRC, принудительно заполняет все свободное пространство "чистой памятью" (0xFF или 0x00). Так, как это происходит в *.bin файле. Но эту область можно удалить (умеючи) для уменьшения размера *.hex файла. А вот для "получения непрерывной области для записи образа" как раз эту "чистую память" нужно добавлять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 30 минут назад, winniethepooh сказал: для hex файла возможно редактирование, когда "дыры" вручную удаляются Дыр в таком формате файлов нет по-определению. Он состоит из одной или нескольких записей. Каждая запись описывает непрерывную область памяти размером от 0 до 255 байт, в т.ч. начальный адрес этой области. Т.е. можно описывать фрагментированные по адресному пространству данные. При этом могут получиться дыры. Формат никак не описывает их содержимого. Программатор либо проигнорирует их, либо заполнит некоторым значением по-умолчанию, которое зависит от типа микросхемы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 10 минут назад, Darth Vader сказал: Он состоит из одной или нескольких записей. Каждая запись описывает непрерывную область памяти размером от 0 до 255 байт Уточню, что одна запись (строка) обычно содержит до 16 байт. А вот адрес 16-и разрядный. То есть при большем размере данных, применяют формат Intel Extended. Там еще есть запись смещения адреса.Intel HEX Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 45 минут назад, Baser сказал: Уточню, что одна запись (строка) обычно содержит до 16 байт. Я исходил из этого: Цитата DD Поле данных. Запись может содержать несколько байт данных. Количество байт данных должно соответствовать полю LL. Раз поле длины LL имеет размер в 1 байт, то максимальный размер описываемого одной записью области памяти может быть 255 байт (в случае LL=0xFF) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 8 минут назад, Darth Vader сказал: Раз поле длины LL имеет размер в 1 байт, то максимальный размер описываемого одной записью области памяти может быть 255 байт (в случае LL=0xFF) Все так, согласен. Пару раз встречал такие hex файлы со строкой больше 80-и символов, которые переносились на другую строку. Но это же неудобно. Видел и файлы с 32-я байтами в строке. Но общераспространенной практикой являются 16 байт в строке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 31 июля, 2020 Опубликовано 31 июля, 2020 · Жалоба 3 минуты назад, Baser сказал: Но общераспространенной практикой являются 16 байт в строке. Понятно. Спасибо за разъяснение. А то думал, что что-то пропустил в описании формата. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться