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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Линковщик и внешняя оперативная память, Используется LPC2478
Novichok1
сообщение Oct 20 2009, 08:49
Сообщение #1


Участник
*

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



Доброго времени суток!
Работаю с LPC2478, у которого, как известно, есть внешние банки динамической памяти.
Так вот, возникла надобность указать линковщику, что у нас оперативная память не только на чипе, но еще и внешняя. Вопрос - как это сделать?
Дело в том, что нужно указать не один диапазон адресов, а хотя бы два, как это сделать, я не знаю. Другой вариант решения - покопаться с оператором "new" (C++), и в нем указать требуемый диапазон. Но я не знаю, как и это сделать(.
Буду рад любой помощи, заранее спасибо!
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 21 2009, 07:27
Сообщение #2


Участник
*

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



Неужели никто не сталкивался с подобными задачами? Может я неправильно сформулировал, попробую еще раз: мне надо указать линковщику дополнительный диапазон памяти, где он должен создавать переменные, ну или хотя бы только динамически создаваемы объекты. Как это можно сделать? Напрашивается корректировка скрипта для линковщика, но ни подробной документации по синтаксису и семантики этих скриптов, ни подобных примеров, где бы использовались несколько диапазонов для оперативной памяти я, к сожелению не нашел( Если есть какие - нибудь мысли, или полезные ссылки, пожалуйста, отпишитесь)

Сообщение отредактировал Novichok1 - Oct 21 2009, 07:29
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 21 2009, 07:36
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Полезная мысль - указать какой компилятор/линковщик Вы используете.
Вторая полезная мысль - поискать на форуме. Как раз недавно один коллега пришел к выводу, что использование линковщика вовсе необязательно и написал, как именно он сделал.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 21 2009, 07:42
Сообщение #4


Участник
*

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



Использую GCC v.4.2.2.
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 21 2009, 08:01
Сообщение #5


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



так надо линкер скрипт написать
доки например здесь есть
http://www.delorie.com/gnu/docs/binutils/ld_6.html
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 21 2009, 08:13
Сообщение #6


Участник
*

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



Цитата
Вторая полезная мысль - поискать на форуме. Как раз недавно один коллега пришел к выводу, что использование линковщика вовсе необязательно и написал, как именно он сделал


Спасибо за совет. Пока из более- менее сродного нашел только http://electronix.ru/forum/index.php?showtopic=58599&hl=, но там кажись IAR. Ну и задачи разные ставяться. Будем дальше искать.

Цитата
так надо линкер скрипт написать
доки например здесь есть
http://www.delorie.com/gnu/docs/binutils/ld_6.html


Спасибо за ссылочку - буду учить матчасть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2009, 08:13
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Novichok1 @ Oct 20 2009, 11:49) *
Так вот, возникла надобность указать линковщику...
..
покопаться с оператором "new" (C++), и ...

Для начала та память, которую статически распределяет линкер и динамическая память в общем случае вещи малосвязанные. Посему сразу можете начинать копать ту конкретную реализацию new() на предмет того, что она вообще умеет штатно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
skripach
сообщение Oct 21 2009, 12:44
Сообщение #8


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
Спасибо за совет. Пока из более- менее сродного нашел только http://electronix.ru/forum/index.php?showtopic=58599&hl=, но там кажись IAR. Ну и задачи разные ставяться. Будем дальше искать

Вот


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 22 2009, 07:44
Сообщение #9


Участник
*

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



To skripach:
Спасибо за ссылочку, но там IAR, а у меня GCC, ну и метод, к которому вы там пришли мне не подходит по идеологическим соображениям)
Просто мне нужно не просто разместить во внешней оперативке одну структуру, а постоянно работать в той области памяти. А обязанности линкера я не потяну.
Но я смотрю, Вы тоже были озабочены аналогичной проблемой, хотелось бы знать, есть ли какие - нибудь результаты, помимо освещенных в Вашей ветке?

Сообщение отредактировал Novichok1 - Oct 22 2009, 07:49
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 22 2009, 08:16
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Novichok1 @ Oct 22 2009, 10:44) *
А обязанности линкера я не потяну.

И не надо, просто скажите ему какими областями памяти он может распоряжаться. Однако, насколько я могу догадываться, Вы хотите динамически выделять память, к этому линкер, как я уже писал, вообще отношения не имеет - этим занимается менеджер памяти ВО ВРЕМЯ РАБОТЫ ПРИЛОЖЕНИЯ.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
skripach
сообщение Oct 22 2009, 08:50
Сообщение #11


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
есть ли какие - нибудь результаты, помимо освещенных в Вашей ветке?

пока нет, будут - поделюсь.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 22 2009, 09:11
Сообщение #12


Участник
*

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



Цитата
И не надо, просто скажите ему какими областями памяти он может распоряжаться. Однако, насколько я могу догадываться, Вы хотите динамически выделять память, к этому линкер, как я уже писал, вообще отношения не имеет - этим занимается менеджер памяти ВО ВРЕМЯ РАБОТЫ ПРИЛОЖЕНИЯ.


Ну я уже понял, что глобальным и статическим переменным адреса выделяются в секциях .data и .bss (надеюсь, что правильно понял), а выделение памяти в куче происходит посредством выполнения оператора 'operator new'. А вот выделение памяти под локальные переменные, либо не статические члены класса происходит в стеке. И следующий момент, который нужно отметить - инициализация внешней памяти происходит внутри программы, то есть до этой инициализации никто туда не должен лезть, значит секции .data и .bss должны быть расположены во внутренней оперативке.

Ситуация, значит, вырисовывается такая: поскольку on-chip RAM всего 64KB, а внешняя оперативка несравнимо больше, и к тому же данные, которые требуются хранить довольно громоздкие, то их объявление как глобальных, и таким образом запись либо в секцию .data, либо в секцию .bss является плохим решением. Значит эти данные нужно объявить как локальные (либо не статическими членами класса). Это можно сделать двумя способами:
1) Объявить их в стеке;
2) Объявить их в куче посредством "new".

В первом случае не надо копать "operator new", второй более предпочтителен, но нужно разобрать "operator new". Но в обоих случаях нужно указать линковщику, что есть еще дополнительная оперативка, чего я пока не знаю(.

Надеюсь приведенные рассуждения правильные, если где- то ошибка, попрошу поправить.
И было бы замечательно, если кто - нибудь приведет пример указанию линковщику нескольких диапазонов оперативной памяти.
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 22 2009, 09:39
Сообщение #13


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Novichok1 @ Oct 22 2009, 13:11) *
И следующий момент, который нужно отметить - инициализация внешней памяти происходит внутри программы, то есть до этой инициализации никто туда не должен лезть, значит секции .data и .bss должны быть расположены во внутренней оперативке.

Нет не значит!
И более того даже инициализацию секции .bss можно на С написать, посмотрите для примера IAR cstartup.
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 22 2009, 11:30
Сообщение #14


Участник
*

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



Цитата
Нет не значит!


Спасибо, KRS, вывели меня из ступора. Так действительно, при направлении .bss на внешнюю рамку, адреса не инициализированных глобальных переменных лежат где надо! И тут пришло время слов уважаемого zltigo. А именно, выскакивает ошибка "Pabort exception !!!" при попытке в программе динамически выделить память для указанной переменной через "new". Подскажите, пожалуйста, как в нем копаться и что там нужно исправлять.


Вообще, не совсем понятно, зачем нужно копаться во внутренностях "new", на мой взгляд должно быть достаточно указать линковщику, как уже говорилось, два диапазона адресов для использования в качестве оперативной памяти, а уже сам "new" должен смотреть какие адреса допустимы, и сколько и где выделять. Если не прав- поправьте, а если прав, то как и где все - таки указать эти два диапазона? Насчет "где" по моему есть два варианта
1) Linker script (секции .data и .bss по ходу отпадают)
2) startup.s (там вроде что- то записывается, связанное с адресам оперативной памяти)

Сообщение отредактировал zltigo - Oct 22 2009, 13:07
Причина редактирования: Удалено цитирование обширных исходников
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 22 2009, 13:05
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Novichok1 @ Oct 22 2009, 14:30) *
а уже сам "new" должен смотреть какие адреса допустимы, и сколько и где выделять.

А new об этом знает? Или Вы все это за его авторов решили? Уже писал - надо смотреть на конкретную реализацию.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th July 2025 - 22:53
Рейтинг@Mail.ru


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