Перейти к содержанию
    

динамическое выделение памяти tms320f28335 (не dsp/bios)

Есть внешняя память хочу на ней выделить память для создания каких то классов, при этом чтобы была возможность динамичеки выделять память и во внутренней. По сути хочется выделять динамически память в разных сегментах памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть внешняя память хочу на ней выделить память для создания каких то классов...

по-моему, .esystem секция памяти отвечает за динамическое распределение( в нее все валится). Поэтому в *.cmd файле линковщика засылаете .esystem по адресу Вашей памяти

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Чтобы справиться с проблемой нужно пробовать способы, описанные в 7.5.4.6 Allocation Using Multiple Memory Ranges и 7.5.4.7 Automatic Splitting of Output Sections Among Non-Contiguous Memory Ranges (spru513 TMS320C28x Assembly Language Tools ).

В параграфе 7.5.4.7 сказано, что линковщик может разделять на части выходную секцию ( например, такую, как ваша ”.esystem”) и помещать их в различные области памяти для эффективного размещения данной выходной секции. Для создания особого указания линковщику, что данная секция может быть разделена используют оператор >> . примерно так:

.esystem: { *(.esystem) } >> RAML4 | RAML5 | RAML6 | RAML7, PAGE = 1

 

заменяете некоторые из RAML4 | RAML5 | RAML6 | RAML7 на адрес вашей внешней памяти, и должно быть Вам счастье, наверное...

 

Пробуйте, и отпишитесь помогло или нет??? меня Ваша проблема тоже когда-нибудь коснется, а сотен других инженеров уже коснулась! =)

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вроде для моей проблемы можно использовать:

.sysmem и ф-и malloc тогда память выделяется в sysmem и

.esysmem и ф-и far_malloc тогда память выделяется в esysmem.

Но если у меня память выделяется для класса опрератором new, то формально можно использовать Placement new. Данный оператор не выделяет память, а получает своим аргументом адрес на уже выделенную каким-либо образом память (например, на стеке или через malloc). Происходит размещение (инициализация) объекта путем вызова конструктора, и объект создается в памяти по указанному адресу.

 

01:typedef class myOTL

02:{

03: int x;

04: public:

05: myOTL(): x(5){};

06:

07:}myOTL;

08:

09: void *qw;

10: myOTL *a;

11: qw=std::malloc( sizeof(myOTL));

12: if(qw)

13: {

14: a = new (qw) myOTL();

15: }

16: std::free(qw);

Но компилятор выдает ошибку (у меня CGT v5.0.2).

"main.cpp", line 14: error: no instance of overloaded "operator new" matches the argument list

argument types are: (unsigned long, void *)

Как я понимаю наш компилятор не поддерживает Placement new. Тогда как еще можно вызвать конструктор класса?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неверно понимаете.

В вашем класе вам надо перегрузить new:

class myOTL {

...

public:

void * operator new(uint, myOTL *p) const { return p; }

};

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...