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

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


Участник
*

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



Ну так где указывать допустимые адреса, не в самом же "new"?
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение Oct 23 2009, 04:43
Сообщение #17


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

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



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

А почему все так замороченно?
Разве нельзя, ничего не указывая линкеру, объявить указатель, а потом присвоить ему адрес во внешней памяти.
typedef struct
{
UInt32 a;
UInt32 b;
UInt32 mass[1024];

} struct_1, *struct_1;

struct_1=Адрес;

А отдельные переменные так -- #define temp (*((DWORD*)Адрес)) -- здесь ошибка возможна только если обратиться к этой переменной до инита внешней памяти....

Сообщение отредактировал Step_ARM - Oct 23 2009, 04:48
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 23 2009, 05:34
Сообщение #18


Участник
*

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



Ну, этим методом хорошо пользоваться, когда у вас есть небольшое количество определенных структура данных и известно их количество. Я, например, пользуюсь им для использования двойного буфера у LCD. А если их количество не известно, и к тому же используются классы, то тут возникает ряд проблем:
1)Нужно как-то размещать класс по определенному адресу, тут уже class_1=Адрес не пройдет
2)Нужно контролировать "Адрес", то есть брать на себя обязанности диспетчера памяти.

Может я неправильно выразил свое желание, попробую сформулировать его еще раз: есть внутренняя и внешняя оперативка, и нужно использовать эти две области памяти в качестве оперативной памяти для программы, то есть при объявлении переменных и классов они должны размещаться в одной из этих областей. Также допустимо, чтобы только динамически создаваемые объекты размещались во внешней памяти, а остальные во внутренней.

Начинаю копать оператор "new", но пока ничего путного на глаза не попадается.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 23 2009, 08:23
Сообщение #19


Гуру
******

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



Цитата(Novichok1 @ Oct 23 2009, 08:34) *
Начинаю копать оператор "new", но пока ничего путного на глаза не попадается.

Можно и не копать, а сразу на "свой" менежер поменять. Менеджеры на форуме обсуждались неоднократно, от простых до навороченных. Я как-то и исходники своего постил и критерии такой реализации излагал, кстати он конкретно поддерживает и фрагментированную память.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Novichok1
сообщение Oct 28 2009, 06:31
Сообщение #20


Участник
*

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



Спасибо большое всем откликнувшимся, в особенности zltigo! Сейчас вхожу в стадию отладки.
Go to the top of the page
 
+Quote Post

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

 


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


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