Например TDA7294

Форум РадиоКот • Просмотр темы - GCC Linker
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб июл 26, 2025 08:40:16

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 13:30:58 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Всем мяу !
Возникла у меня простенькая задача, которую никак не могу решить.
Необходимо с помощью линкера выделить некую область в памяти программ по определённым адресам и поместить в неё инициализированный массив (либо структуру) с данными.
Т.к. я в этих линкерах, скриптах, ... - ноль без палочки, прошу знающих людей дать подсказку, либо небольшой примерчик. Перелопатил кучу статей, форумов, документов - везде ограничиваются примером, типа :
Код:
const char my_data[50] __attribute__( (section("my_section")) ) = {0};

Т.е. размещением данных в собственно-созданной секции.
Оно всё понятно, но вот вопрос - как создать эту секцию с помощью линкерного скрипта? Ума не приложу :dont_know:
Всем ответившим - Спасибо !


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 14:23:13 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 3
http://embedders.org/blog/teap0t/miro-s ... c_301_Link

Но лучше с самого начала

http://embedders.org/blog/teap0t/miro-s ... age=0,3&6=


Необходимо с помощью линкера выделить некую область в памяти программ по определённым адресам и поместить в неё инициализированный массив (либо структуру) с данными.

Для чего, если не секрет? Собираешься прошивателем переписывать секцию?
Просто массив объявить как const мало?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 14:34:31 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 0
Оно всё понятно, но вот вопрос - как создать эту секцию с помощью линкерного скрипта? Ума не приложу :dont_know:
Вы её создали уже в программе, в скрипте линкера осталось её разместить по нужному адресу. Как? Смотрите по ссылкам от dosikus.

Цитата:
область в памяти программ по определённым адресам и поместить в неё инициализированный массив
А можно все же поинтересоваться, ЗАЧЕМ? Ну должна же быть какая-то причина пришпиленности данных.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 14:41:01 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Блин, оказывается у меня компилятор просто выкидывал массив как ненужный. Причём, независимо от volatile. А я и так, и сяк, и что только в скрипте не писал... :))
Простое обращение к массиву решила все проблемы.

Добавлено after 1 minute 35 seconds:
Код:
volatile const char my_data[0x100] __attribute__( (section(".fw_info")) ) = {0};

В линкере :
Код:
MEMORY
{
    fw_info            (rx) : ORIGIN = 0x9D040000, LENGTH = 0x100
    .....
    .....

}

SECTIONS
{
    .fw_info ORIGIN(fw_info) : {
        KEEP(*(.fw_info))
    }
}


Добавлено after 4 minutes 37 seconds:
А можно все же поинтересоваться, ЗАЧЕМ? Ну должна же быть какая-то причина пришпиленности данных.
Скажем так - в целях повышения образованности :))

PS: Вот почему так. Мучаешься, сутки не спишь, стоит задать вопрос - сразу находится решение... :facepalm:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 14:48:39 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 156
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Волшебная сила форума ...

Код:
fw_info            (rx) : ORIGIN = 0x9D040000, LENGTH = 0x100


Может все таки rw или даже ro ?

Простое обращение к массиву решила все проблемы.


Используется опция- выкидывать незадействованные сущности.
Так и простые массивы выкидывает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 15:17:34 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
dosikus писал(а):
Может все таки rw или даже ro ?
Может быть.
Скопипиздил с соседней строчки, объявляющую регион программной памяти :dont_know:

PS: Пофиг, работает и ладно :)))

Добавлено after 12 minutes 11 seconds:
Используется опция- выкидывать незадействованные сущности.
Так и простые массивы выкидывает.
Всегда думал, что квалификатор volatile служит для связывания шаловливых ручек оптимизатора :roll:


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 15:30:52 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Аlex писал(а):
Всегда думал, что квалификатор volatile служит для связывания шаловливых ручек оптимизатора
ну дык для оптимизатора компилятора так и есть, а для линкера свою роль играет опция -Wl,-gc-sections - убирать неиспользуемые секции

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 15:42:12 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 2
Может все таки rw или даже ro ?

Неа, r - чтение, w - запись, x - исполнение. Тогда уж просто r.

Всегда думал, что квалификатор volatile служит для связывания шаловливых ручек оптимизатора :roll:
Отключает оптимизацию доступа к объекту. А нет доступа - нет объекта.

Во, можно такой кейс придумать. Берём на регистры какого-нибудь аппаратного модуля проецируем инициализированный массив с конфигурацией. При запуске в стартапе этот массив будет на место копироваться тем самым конфигурируя аппаратный модуль. Ну это так, чисто поржать :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 15:58:59 
Модератор
Аватар пользователя

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 16:03:35 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 428
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2529
Рейтинг сообщения: 3
Ну по имени вашей секции это было понятно. Имеет право на существование. Можно было, правда, сразу за векторами прерываний расположить автоматом. Никто бы его оттуда не сдвинул.

Думаю, вот так его даже без обращений линкер не выкинет. Попробуйте для интереса. Без определения MEMORY. Ведь таблица векторов прерываний это точно такой-же массив как и у вас и без обращений.
Код:
  .isr_vector :
  {
    . = ALIGN(4);
    KEEP(*(.isr_vector))
    . = ALIGN(4);
  } >FLASH

   .fw_info :
  {
    . = ALIGN(4);
    KEEP(*(.fw_info))
  } >FLASH 


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: GCC Linker
СообщениеДобавлено: Пт июл 27, 2018 16:17:48 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
VladislavS писал(а):
Можно было, правда, сразу за векторами прерываний расположить автоматом.

Тут уже, в принципе, без разницы, где её размещать.
Вектора прерываний в моём МК могут находиться в любом месте, их адреса - не константы. PIC32MZ. Отсюда и линковка с бутом делаются проще - для каждой программы всё своё (адреса), только джампами прыгай на стартап ...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y