Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR 4.20: Всю оставшуюся память - хипу
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
meister
Как написать в xcl файле, чтобы все оставшиеся адреса из диапазона отдавались указанному сегменту (HEAP)?

Спасибо.
Сергей Борщ
Цитата(meister @ Jan 31 2009, 12:20) *
Как написать в xcl файле, чтобы все оставшиеся адреса из диапазона отдавались указанному сегменту (HEAP)?
Боюсь, что с библиотечной реализацией поддержки кучи - никак. Линкеру можно задать только максимальный размер сегмента (указанием доступных адресов) и минимальный (тем методом, которым задаются размеры стеков). Реализовать ваше желание можно объявив два сегмента, с привязкой к началу и концу свободной памяти, и заставив менеджер кучи брать память по началу первого и концу второго сегментов, а не по началу и размеру сегмента HEAP. В скрипте это может выглядеть примерно так:
Код
было:

-D_CSTACK_SIZE=(1024)
-D_IRQ_STACK_SIZE=(.1024)
-D_HEAP_SIZE=(.1024*8)

-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND
-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND

-Z(DATA)CSTACK+_CSTACK_SIZE#RAMSTART-RAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE#RAMSTART-RAMEND
будет:

-Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND
-Z(DATA)HEAP_START=RAMSTART-RAMEND

-Z(DATA)CSTACK+_CSTACK_SIZE#RAMSTART-RAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE#RAMSTART-RAMEND
-Z(DATA)HEAP_END#RAMSTART-RAMEND
А вот как исправить библиотечный менеджер, не имея его исходников - даже и не подскажу. Можете поискать на форуме, zltigo выкладывал свой менеджер, его вполне можно подточить.
GetSmart
Цитата(meister @ Jan 31 2009, 16:20) *
Как написать в xcl файле, чтобы все оставшиеся адреса из диапазона отдавались указанному сегменту (HEAP)?

На 100% не уверен, но кажется последнему сегменту в линкере можно задать всю оставшуюся память, например в раме. Вот такой вот строчкой
Код
-Z(DATA)HEAP=RAMSTART-RAMEND

Однако это не мешает задать строчку -D_HEAP_SIZE. Как на это будет реагировать менеджер кучи не знаю. Возможно если вообще не задавать -D_HEAP_SIZE, то он сам вычислит размер по началу и концу сегмента.
Сергей Борщ
Цитата(GetSmart @ Feb 1 2009, 00:00) *
Вот такой вот строчкой
Код
-Z(DATA)HEAP=RAMSTART-RAMEND
Она задает размер сегмента, определяемый его содержимым. Так же объявлены сегменты кода и данных. Поскольку содержимое сегмента HEAP равно нулю, то и размер самого сегмента будет нулевым.
Rst7
Цитата
А вот как исправить библиотечный менеджер, не имея его исходников - даже и не подскажу.


Кто мешает вытащить из закромов про-версию и покурить исходники?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.