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

 
 
 
Reply to this topicStart new topic
> GCC linker script cortex-M3, Вопросы по скрипту
mdmitry
сообщение Apr 11 2012, 08:09
Сообщение #1


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Предисловие: Предпочитаю использовать понятный для меня код.

Внимательно смотрел скрипт линкера для порта Cortex-M3 и сравнивал его с generic-m.ld от CodeSourcery arm-2011.09.
Возникли вопросы:
1. Где инициализируется стек? Вижу выравнивание
Код
/* higher address of the user mode stack */
PROVIDE ( _estack = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );
,
но не нашел загрузку регистров в файлах инициализации.

2. Что это за стек и где используется?
Код
/*
* This is the user stack section
* This is just to check that there is enough RAM left for the User mode stack
* It should generate an error if it's full.
*/
    ._usrstack :
    {
        . = ALIGN(4);
      _susrstack = .;
      . = . + _Minimum_Stack_Size;
      . = ALIGN(4);
      _eusrstack = .;
    } >RAM

Ссылку на символ usrstack не нашел.

3. Правильно ли понимаю, что куча располагается после секции bss с выравниванием на двойное слово?
Код
PROVIDE( _heap = _ebss );
PROVIDE ( _eheap = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );


Возможно, возникнут еще вопросы.
Спасибо.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 11 2012, 08:54
Сообщение #2


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

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



Цитата(mdmitry @ Apr 11 2012, 14:09) *
1. Где инициализируется стек? Вижу выравнивание
Код
/* higher address of the user mode stack */
PROVIDE ( _estack = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );
,
но не нашел загрузку регистров в файлах инициализации.

Вот же он:
Код
__attribute__ ((section(".isr_vector")))
intfunc g_pfnVectors[] =
{
    /* Core interrupt vectors */
(intfunc)((unsigned long)&_estack),
    Reset_Handler,

Cortex-M3 грузит указатель стека автоматом из первого адреса таблицы векторов.
Цитата
2. Что это за стек и где используется?

Это так называемый Main stack. Используется в прерываниях.
Цитата
Ссылку на символ usrstack не нашел.

Там же написано:
"This is just to check that there is enough RAM left for the User mode stack". Это просто для проверки, что осталось место под стек. То есть, если секция не влезет в память, линкер заругается, и мы будем знать, что у нас нет _Minimum_Stack_Size памяти для Main stack.
Цитата
3. Правильно ли понимаю, что куча располагается после секции bss с выравнивынием на двойное слово?

Нет. Куча распологается просто после bss. Конец bss выровнен на слово.
А _eheap - это конец кучи. (И он определён неверно, надо отнять ещё _Minimum_Stack_Size. Надо будет поправить...)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 11 2012, 09:14
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(AHTOXA @ Apr 11 2012, 12:54) *
Cortex-M3 грузит указатель стека автоматом из первого адреса таблицы векторов.

Спасибо, AHTOXA. Я проглядел.
Цитата
Это так называемый Main stack. Используется в прерываниях.

Стало понятно.
Цитата
Нет. Куча распологается просто после bss. Конец bss выровнен на слово.
А _eheap - это конец кучи. (И он определён неверно, надо отнять ещё _Minimum_Stack_Size. Надо будет поправить...)


Начало кучи на конце bss?
Код
PROVIDE( _heap = _ebss );

Конец кучи здесь:
Код
PROVIDE ( _eheap = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );

но это совпадает с
Код
/* higher address of the user mode stack */
PROVIDE ( _estack = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );

Куча и стек совпадают? Или нет если отнять _Minimum_Stack_Size то не совпадают!


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

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

 


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


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