Цитата(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. Надо будет поправить...)
Если бы я знал, что такое электричество...