реклама на сайте
подробности

 
 
> Порядок размещения констант линкером
Mikka
сообщение Sep 27 2016, 06:35
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 25-05-10
Пользователь №: 57 524



Пишу в Eclipse для ARM
В секции .rodata находится объектный файл с двумя константами. Мне нужно поменять константы местами. Простое перемещение их в си-файле не помогает -- в main.map ничего не меняется. Можно конечно определять их в разных файлах, но хочется узнать еще варианты. Подскажите оптимальный способ. Заранее спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
AlexRayne
сообщение Sep 27 2016, 06:53
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 27-09-07
Пользователь №: 30 877



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

1)если у вас плюсовой код: засуньте их в анонимную структуру глобальную.
2)в скрипте линкера можно вручную прописать их порядок. для инициализации глобальных статиков в ГНУ компиляторе можно было назначать приоритет инициализации - число, которое добавлялось к имени секции. получается чтото вроде .init_array.N.
секции инициализации сортируются толи по возрастанию толи по убыванию его.
3)может и вам попробовать явно задать вашим константам секции с заданным именем в префиксе .rodata - типа .rodata.mycontainer.0, .rodata.mycontainer.1
Go to the top of the page
 
+Quote Post
brag
сообщение Sep 27 2016, 09:16
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
Мне нужно поменять константы местами.

Возникновение такой потребности уже говорит о неправильном стиле программирования, требуется рефакторинг. Программа не должна быть чувствительна к порядку инициализации констант.
А если речь идет о каких-то хардварных данных(например таблица прерываний) - тогда делайте структуры и размещайте их по нужным адресам, в отдельных секциях.
Go to the top of the page
 
+Quote Post
SlavaV
сообщение Sep 27 2016, 12:56
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 13-06-06
Из: г.Улан-Удэ
Пользователь №: 18 024



Не понял вопроса

нужно чтобы переменные были размещены по определённым адресам?
Go to the top of the page
 
+Quote Post
Mikka
сообщение Sep 27 2016, 13:57
Сообщение #5





Группа: Участник
Сообщений: 14
Регистрация: 25-05-10
Пользователь №: 57 524



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

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


Спасибо, решение найдено. Оказалось, что порядок в котором прописана инициализация переменных дает нужный результат.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Sep 27 2016, 14:49
Сообщение #6


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



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


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

Поменяется компилятор и все. Вам правильно сказали, размещайте в структуре две переменные. В структуре они гарантированно последовательно пойдут.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 27 2016, 17:53
Сообщение #7


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Тоже применил бы структуру. Типичная практика для бинарных файлов.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 27 2016, 19:20
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



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

Чукча не читатель.....
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016