Easyelectronics.ru

Электроника для всех
Текущее время: 22 авг 2019, 21:30

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Разделить флешку с помощью LD
СообщениеДобавлено: 15 июн 2015, 13:38 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 05 сен 2014, 11:48
Сообщения: 98
Откуда: Saratov
Всем добра! Не разу не сталкивался с линкер-скриптами, но тут возникла острая необходимость.
Есть МК с флешкой на 128КБ и ОЗУ на 32КБ
цель: разделить флешку на пару кусочков, один 48Кб, другой 80Кб.
48 Кб идёт на прогу, а 80Кб забит массивами с данными.
Сейчас скрипт линкера такой
Show текуущий скрипт линкера

но хочу добавить секцию, допустим MY_SECTIONS, чтобы потом использовать её примерно так
__attribute__((section("MY_SECTIONS")))
и он закидывал указанные данные в те 80Кб памяти

Если кто силён в ld-скриптах, то подправьте скрипт, или подскажите как правильно такое сделать, просто сейчас уже голова опухнет от такого количества информации :)

менял это
Код:
MEMORY
{
  FLASH (rx)   : ORIGIN = 0x08000000, LENGTH = 128K
  RAM (rwx)    : ORIGIN = 0x20000000, LENGTH = 32K
}

на
Код:
MEMORY
{
  FLASH (rx)   : ORIGIN = 0x08000000, LENGTH = 48K
  MY_AREA (rx)   : ORIGIN = 0x08300000, LENGTH = 80K
  RAM (rwx)    : ORIGIN = 0x20000000, LENGTH = 32K
}

вроде как что-то там менялось, писал, что моя прога в память не влазиет (и это ожидаемо, ибо прошивка с массивами больше 48Кб)
Только как и где прописать эту штуку дальше, я не нашёл.. :(


Вложения:
my-ld-scripts.rar [2.1 Кб]
Скачиваний: 162

_________________
Я волшебник.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разделить флешку с помощью LD
СообщениеДобавлено: 15 июн 2015, 23:12 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 1000
Alisa писал(а):
Всем добра! Не разу не сталкивался с линкер-скриптами, но тут возникла острая необходимость.

А вы на форуме Миландра не зарегистрированы?
Там, вроде, должны быть компетентные специалисты и пользователи, если здесь не посоветуют необходимое решение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разделить флешку с помощью LD
СообщениеДобавлено: 16 июн 2015, 06:46 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 720
Alisa писал(а):
цель: разделить флешку на пару кусочков, один 48Кб, другой 80Кб.
48 Кб идёт на прогу, а 80Кб забит массивами с данными.

Что мешает объявить дату как static const ???

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разделить флешку с помощью LD
СообщениеДобавлено: 16 июн 2015, 11:43 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 18:55
Сообщения: 163
Откуда: Томск
Можно как-то так:

Код:
MEMORY
{
    FLASH    (rx)     : ORIGIN = 0x00000000, LENGTH = 510K
    FLASH2   (rx)     : ORIGIN = 0x0007f800, LENGTH = 2K
...
}
...
SECTIONS
{
    .someseg : {
        *(somedata);
    } > FLASH2
...



Код:
#define SOME_SIZE   1024
const char constdata[SOME_SIZE] __attribute__((section("somedata")));



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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разделить флешку с помощью LD
СообщениеДобавлено: 16 июн 2015, 14:16 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2311
dmk793 писал(а):
Можно как-то так:

Код:
MEMORY
{
    FLASH    (rx)     : ORIGIN = 0x00000000, LENGTH = 510K
    FLASH2   (rx)     : ORIGIN = 0x0007f800, LENGTH = 2K
...
}
...
SECTIONS
{
    .someseg : {
        *(somedata);
    } > FLASH2
...



Код:
#define SOME_SIZE   1024
const char constdata[SOME_SIZE] __attribute__((section("somedata")));



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


Любопытно.
Надо попробовать.
А ещё можно прикрутить Mass Storage прямо к флешу контроллера и заливать данные командой dd (посекторное копирование) прямо в устройство.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Разделить флешку с помощью LD
СообщениеДобавлено: 16 июн 2015, 15:27 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 05 сен 2014, 11:48
Сообщения: 98
Откуда: Saratov
dmk793 писал(а):
Можно как-то так:

Код:
MEMORY
{
    FLASH    (rx)     : ORIGIN = 0x00000000, LENGTH = 510K
    FLASH2   (rx)     : ORIGIN = 0x0007f800, LENGTH = 2K
...
}
...
SECTIONS
{
    .someseg : {
        *(somedata);
    } > FLASH2
...


спасибо, большое, получилось :)
И ещё такой вопрос. Если, на примере вашего кода, я запишу в FLASH2 массив из констант, допустим так, как сделали это вы.
Код:
#define SOME_SIZE   1024
const char constdata[SOME_SIZE] __attribute__((section("somedata")));

То адрес первого элемента массива constdata[0], будет в начале этого сектора, т.е. 0x0007f800?

P.S.
KPG писал(а):
А вы на форуме Миландра не зарегистрированы?
Там, вроде, должны быть компетентные специалисты и пользователи, если здесь не посоветуют необходимое решение

Да, там я есть, но к сожалению, в силу небольшой аудитории пользователей форума, ответа там приходится ждать довольно долго (опять же, раз на раз не приходится), но как для меня, несложный вопрос, типа этого, ответ на него нахожу сам раньше, нежели чем ответят на форуме. А посложнее вопросы, типа этого, нечасто можно получить адекватный ответ, даже от разработчиков контроллера, на котором возникла та, или иная проблема.
P.P.S. Сначала как на форуме Миландра и спросил :)

_________________
Я волшебник.


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

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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB