Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Порядок размещения констант линкером
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Mikka
Пишу в Eclipse для ARM
В секции .rodata находится объектный файл с двумя константами. Мне нужно поменять константы местами. Простое перемещение их в си-файле не помогает -- в main.map ничего не меняется. Можно конечно определять их в разных файлах, но хочется узнать еще варианты. Подскажите оптимальный способ. Заранее спасибо
AlexRayne
Цитата(Mikka @ Sep 27 2016, 09:35) *
Пишу в Eclipse для ARM
В секции .rodata находится объектный файл с двумя константами. Мне нужно поменять константы местами. Простое перемещение их в си-файле не помогает -- в main.map ничего не меняется. Можно конечно определять их в разных файлах, но хочется узнать еще варианты. Подскажите оптимальный способ. Заранее спасибо

1)если у вас плюсовой код: засуньте их в анонимную структуру глобальную.
2)в скрипте линкера можно вручную прописать их порядок. для инициализации глобальных статиков в ГНУ компиляторе можно было назначать приоритет инициализации - число, которое добавлялось к имени секции. получается чтото вроде .init_array.N.
секции инициализации сортируются толи по возрастанию толи по убыванию его.
3)может и вам попробовать явно задать вашим константам секции с заданным именем в префиксе .rodata - типа .rodata.mycontainer.0, .rodata.mycontainer.1
brag
Цитата
Мне нужно поменять константы местами.

Возникновение такой потребности уже говорит о неправильном стиле программирования, требуется рефакторинг. Программа не должна быть чувствительна к порядку инициализации констант.
А если речь идет о каких-то хардварных данных(например таблица прерываний) - тогда делайте структуры и размещайте их по нужным адресам, в отдельных секциях.
SlavaV
Не понял вопроса

нужно чтобы переменные были размещены по определённым адресам?
Mikka
Цитата(SlavaV @ Sep 27 2016, 15:56) *
нужно чтобы переменные были размещены по определённым адресам?

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


Спасибо, решение найдено. Оказалось, что порядок в котором прописана инициализация переменных дает нужный результат.
jorikdima
Цитата(Mikka @ Sep 27 2016, 06:57) *
Нужно чтобы две константы размещались в определенном порядке. Сначала шла одна, а за ней вторая. Это делается для дальнейшей работы с бинармым файлом.


Спасибо, решение найдено. Оказалось, что порядок в котором прописана инициализация переменных дает нужный результат.

Поменяется компилятор и все. Вам правильно сказали, размещайте в структуре две переменные. В структуре они гарантированно последовательно пойдут.
sigmaN
Тоже применил бы структуру. Типичная практика для бинарных файлов.
jcxz
Цитата(Mikka @ Sep 27 2016, 19:57) *
Спасибо, решение найдено. Оказалось, что порядок в котором прописана инициализация переменных дает нужный результат.

Чукча не читатель.....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.