Цитата(Сергей Борщ @ Dec 6 2016, 10:48)

Он (народ) размещает стек в конце потому, что таким образом под него отдается вся незанятая память, которая, в противном случае, никем никогда не будет использована. Любая встреча стека с чем угодно (хоть глобальными переменными, хоть с кучей) - всегда катастрофа. Размащая стек в конце ОЗУ народ отдает под него максимально возможное количество памяти, больше уже не выделить никак. И это позволяет отложить больбу с проблемой "стек встретился с данными" до того момента, когда под вашу программу станет уже физически не хватать памяти. Вот и все.
Лучше наоборот - расположить стек так, чтобы при его разрушении сразу прекращалось выполнение программы и вылетало на критическую ошибку. Чтобы эту ошибку сразу увидеть и исправить по "горячим следам" сразу как она сделана. А не через несколько месяцев, когда начнёт где-зто что-то глючит уже и не пойми что. И тогда на поиски ошибки уйдёт на порядки больше времени.
Копить ошибки и замазывать их костылями - ущербный подход, в результате всё ПО будет кривое и глючное.
Цитата(Yogen @ Dec 6 2016, 11:11)

Если стек в конце, а данные в начале, то при выходе из границ стек будет безболезненно юзать пространство свободного ОЗУ. А если стек вначале, то при том же форсмажоре он сразу перейдёт через нижнюю границу RAM.
Стек должен быть не "в конце" и не "в начале", а там куда указано расположение "block HEAP" в *.icf. Вот на конец этого блока и надо ставить SP. Ставить можно например командой LDR SP, xxx в асм-стартап-файле. И нужно проинитить оба стека - MSP и PSP (если конечно не весь код выполняется в Handler-режиме).