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

 
 
> Coocox настройка heap?
maxntf
сообщение Apr 16 2016, 14:51
Сообщение #1


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

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Не получается настроить кучу в coocox.
По тем пример что на форуме http://www.coocox.org/forum/viewtopic.php?f=2&t=917 у меня не получилось. Во первых потому, что они с ошибками, а во вторых там не указано куда именно в файле *.ld нужна сделать вставку.
В общем я сделал по другому:
1. В файле startup добавил
Код
/*----------Heap Configuration-----------------------------------------------*/
#define HEAP_SIZE       0x00001000
__attribute__ ((section(".heap")))
unsigned long pulHeap[HEAP_SIZE];

2. В файле ld перенес сектор .heap который там уже был, под сектор .co_stack
Код
    /* .stack_dummy section doesn't contains any symbols. It is only
    * used for linker to calculate size of stack sections, and assign
    * values to stack symbols later */
    .co_stack (NOLOAD):
    {
        . = ALIGN(8);
        *(.co_stack .co_stack.*)
    } > ram

    .heap (COPY):
    {
        __end__ = .;
        _end = __end__;
        end = __end__;
        *(.heap*)
        __HeapLimit = .;
    } > ram
    
    /* Set stack top to end of ram , and stack limit move down by
    * size of stack_dummy section */
    __StackTop = ORIGIN(ram ) + LENGTH(ram );
    __StackLimit = __StackTop - SIZEOF(.co_stack);
    PROVIDE(__stack = __StackTop);
    
    /* Check if data + heap + stack exceeds ram  limit */
    ASSERT(__StackLimit >= __HeapLimit, "region ram  overflowed with stack")


В файле syscalls.c вообще ничего не менял.
Вот map файл который получился, и как видно из скриншота, функция calloc возвращает указатель именно из области сектора .heap
Но только не пойму как работает ограничение, когда вылезаем за размеры кучи. Дело в том, что даже если я ставлю HEAP_SIZE 0x00000010. Программа работает но там явно память выделяется за границами кучи.

Сообщение отредактировал maxntf - Apr 16 2016, 15:02
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Apr 16 2016, 15:40
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Сначала вот вам картинка распределения ОЗУ:
  • начало ОЗУ
  • переменные
  • переменные
  • переменные
  • сюда вы зачем-то засунули секцию co_stack
  • начало кучи
  • ↓куча растёт в сторону конца ОЗУ
  • ↓куча растёт в сторону конца ОЗУ
  • тут пусто
  • тут пусто
  • тут могут встретиться стек и ОЗУ
  • тут пусто
  • тут пусто
  • ↑сюда растёт стек
  • ↑сюда растёт стек
  • начало стека (конец ОЗУ)


Теперь пояснения.
секция co_stack, вероятно, фальшивая. То есть, для дела важен только её размер. Вкупе со значением HEAP_SIZE это позволяет линкеру выдать ошибку, если суммарный размер стек+куча+переменные превысит размер ОЗУ. То, что вы поместили эту секцию после секции text и перед секцией .heap, просто оставило неиспользуемый кусок ОЗУ между переменными и кучей.
Размер использованной кучи, скорее всего, не проверяется (можете посмотреть на функцию _sbrk() в syscalls.c. Максимум, что обычно делается - контролируется встреча кучи и стека. (И то далеко не всегда).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- maxntf   Coocox настройка heap?   Apr 16 2016, 14:51
|- - maxntf   Цитата(AHTOXA @ Apr 16 2016, 18:40) нача...   Apr 16 2016, 18:06
|- - AHTOXA   Цитата(maxntf @ Apr 16 2016, 23:06) Из ва...   Apr 16 2016, 18:18
|- - Lmx2315   Цитата(maxntf @ Apr 16 2016, 21:06) Во пе...   Apr 16 2016, 18:40
|- - maxntf   Цитата(Lmx2315 @ Apr 16 2016, 21:40) ..г...   Apr 16 2016, 19:04
- - maxntf   Вроде пришло понимание части вопросов! Что при...   Apr 18 2016, 12:01
|- - zltigo   QUOTE (maxntf @ Apr 18 2016, 15:01) [*] Э...   Apr 18 2016, 12:13
||- - maxntf   QUOTE (zltigo @ Apr 18 2016, 15:13) Разум...   Apr 18 2016, 12:34
||- - zltigo   QUOTE (maxntf @ Apr 18 2016, 15:34) Тогда...   Apr 18 2016, 13:47
|- - AHTOXA   Цитата(maxntf @ Apr 18 2016, 17:01) - из ...   Apr 18 2016, 13:49
|- - maxntf   Цитата(AHTOXA @ Apr 18 2016, 16:49) Непон...   Apr 18 2016, 15:05
|- - AHTOXA   Цитата(maxntf @ Apr 18 2016, 20:05) С эти...   Apr 18 2016, 16:43
- - maxntf   Вух!!!, вроде все понял. Много вопросо...   Apr 19 2016, 09:59
- - AHTOXA   Цитата(maxntf @ Apr 19 2016, 14:59) В ито...   Apr 19 2016, 10:48
- - zltigo   QUOTE (AHTOXA @ Apr 19 2016, 13:48) Ну чт...   Apr 19 2016, 11:06
- - maxntf   Уважаемые AHTOXA и zltigo спасибо Вам за помощь...   Apr 19 2016, 13:45
- - zltigo   QUOTE (maxntf @ Apr 19 2016, 16:45) Тогда...   Apr 19 2016, 14:28
- - maxntf   Цитата(zltigo @ Apr 19 2016, 17:28) Если ...   Apr 19 2016, 15:41
- - zltigo   QUOTE (maxntf @ Apr 19 2016, 18:41) Когда...   Apr 19 2016, 15:58
- - maxntf   Цитата(zltigo @ Apr 19 2016, 18:58) Будет...   Apr 19 2016, 16:02
- - zltigo   QUOTE (maxntf @ Apr 19 2016, 19:02) То ес...   Apr 19 2016, 16:14
- - maxntf   Цитата(zltigo @ Apr 19 2016, 19:14) Прогр...   Apr 19 2016, 17:30


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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 03:29
Рейтинг@Mail.ru


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