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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Coocox настройка heap?
zltigo
сообщение Apr 19 2016, 11:06
Сообщение #16


Гуру
******

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



QUOTE (AHTOXA @ Apr 19 2016, 13:48) *
Ну что же, если вам так нравится, то пусть будет так. Хотя мне больше по душе вариант, когда стек начинается в конце ОЗУ.

Для случаев, когда стеков несколько смысл "в конце ОЗУ" теряется полностью, ибо для начала нужно решить какой из стеков sm.gif.
QUOTE
Если размер этих секций превысит свободное ОЗУ, то вы получите ошибку линковки. А так - да, можно и без этих секций, просто объявить _stack, _heap_begin и _heap_limit.

Да, все так - ошибка линковки и ГАРАНИЯ наличия заданных размеров, пусть даже они объявлены, как минимальные. Что еще касается фокусов памяти и конкретно FreeRTOS, то в ней есть одна глупость с созданием IDLE Task. Она создается последней, что в корне неверно, поскольку динамической памяти может не хватить, задача не создастся и все просто рухнет. Кроме того, это единственная абсолютно необходимая неудаляемая задача. В общем, как ни крути она должна создаваться первой.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
maxntf
сообщение Apr 19 2016, 13:45
Сообщение #17


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

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



Уважаемые AHTOXA и zltigo спасибо Вам за помощь!

Цитата(AHTOXA @ Apr 19 2016, 13:48) *
Вы опять поменяли местами стек и кучуsm.gif
Ну что же, если вам так нравится, то пусть будет так. Хотя мне больше по душе вариант, когда стек начинается в конце ОЗУ.

Если размер этих секций превысит свободное ОЗУ, то вы получите ошибку линковки. А так - да, можно и без этих секций, просто объявить _stack, _heap_begin и _heap_limit.

Мне почему то больше понравился вариант сначала стек потом куча. Тогда исключается вариант их пересечения. Чтоб размер этих секций не превысил ОЗУ, я размер стека буду задавать какой нужен, а размер кучи все что осталось. А для контроля минимального размера кучи и сделаю условие в линкере.
Код
    _StackSize = 0x1000;/*устанавливаем*/
    _StackTop = . + _StackSize;
    PROVIDE(_stack = _StackTop);
    
    _HeapSize = _eram - _StackTop;
    _HeapBegin = _eram - _HeapSize;
    _HeapLimit = _eram;
    _HeapMinimal = 0x2000;/*устанавливаем*/
    
ASSERT(_HeapSize > _HeapMinimal, "warning! small size of the heap")
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 19 2016, 14:28
Сообщение #18


Гуру
******

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



QUOTE (maxntf @ Apr 19 2016, 16:45) *
Тогда исключается вариант их пересечения.

Если только с целью "исключения", то цель не будет достигнута, ибо стек теперь наедет на статически распределеные переменные sm.gif sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
maxntf
сообщение Apr 19 2016, 15:41
Сообщение #19


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

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



Цитата(zltigo @ Apr 19 2016, 17:28) *
Если только с целью "исключения", то цель не будет достигнута, ибо стек теперь наедет на статически распределеные переменные sm.gif sad.gif

Когда он туда наезжает у меня программа вылетает в прерывание HardFault_Handler. Можно там фиксировать что переполнение стека. И потом менять его размер. А если наедет на кучу, как узнать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 19 2016, 15:58
Сообщение #20


Гуру
******

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



QUOTE (maxntf @ Apr 19 2016, 18:41) *
Когда он туда наезжает у меня программа вылетает в прерывание HardFault_Handler.

Будет творится все, что угодно и описанный Вами вылет, но как частный случай. Все абсолютно так-же, как и с задействованой памятью в куче. Контроллеру и его стеку вообще все равно, что портить - статически иди динамически выделенную память. Да он и слов таких не знает sm.gif






--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
maxntf
сообщение Apr 19 2016, 16:02
Сообщение #21


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

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



Цитата(zltigo @ Apr 19 2016, 18:58) *
Будет творится все, что угодно и описанный Вами вылет, но как частный случай.


То есть не факт что программа обязательно вылетает в это прерывание?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 19 2016, 16:14
Сообщение #22


Гуру
******

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



QUOTE (maxntf @ Apr 19 2016, 19:02) *
То есть не факт что программа обязательно вылетает в это прерывание?

Программе порортили какие то данные. Например, переменная x станет вдруг равной 100500. Ну и? Да она вообще никуда вылетать не обязана. А может и вылететь по, практически любой причине.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
maxntf
сообщение Apr 19 2016, 17:30
Сообщение #23


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

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



Цитата(zltigo @ Apr 19 2016, 19:14) *
Программе порортили какие то данные. Например, переменная x станет вдруг равной 100500. Ну и? Да она вообще никуда вылетать не обязана. А может и вылететь по, практически любой причине.

Просто у меня в отладке, когда указатель стека попадает в секцию bss сразу происходит вылет в то самое прерывание. Поскольку с прерываниями я еще не успел толком разобраться, вот и предположил что есть такая заглушка. Ну раз это не так, значит на данном этапе моих познаний ARM все равно как расположить стек и кучу (главное понял как rolleyes.gif ). А дальше посмотрим.

Сообщение отредактировал maxntf - Apr 19 2016, 17:31
Go to the top of the page
 
+Quote Post

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

 


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


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