Грендайзер писал(а):А что значит указано? В атмел студио или в эклипс я ведь вершину стека то не задавал.
Угу. Студия отдает под стек и кучу всю свободную оперативку.
Грендайзер писал(а):Там выходит компилятор сам догадывался, а у arm, выходит не умеет?
Догадываться не надо, линкер знает, сколько оперативки есть у камешка, под который идет сборка, компилятор занял сколько-то этой памяти под статическую область, остальное - стек и куча.
А вот для АРМов сделали по-другому, а именно - потребовали, чтобы программист сам указывал размеры стека и кучи. Зачем это сделали - непонятно, вероятно, так исторически сложилось. Впрочем, не везде. Какая-то из систем программирования - не помню, не то Coocox, не то EmBitz таки отдает под стек и кучу всю свободную оперативку.
А может так и правильно. Ведь у АРМ-ов могут быть разные виды оперативки, в разных областях. Даже и к STM32, которые посолидней, можно прицепить дополнительную SRAM, а к особо продвинутым STM-кам и SDRAM. Так, что, может быть, и не зря нас заставляют контролировать всю оперативку, включая стек и кучу...
Ну, и (для простых камешков, естественно, без всяких дополнительных оперативок) никто не мешает поправить скрипт линкера и уговорить его таки отдать всю имеющуюся оперативку под стек с кучей. Я в эти дела, правда, не вникал, но, теоретически, там ничего военного...
Грендайзер писал(а):И что будит если я в качестве размера стека задам значение размера оперативной памяти (ну и про кучу то же не забуду)?
Да без вопросов. Просто не забудь впоследствии исправить эти цифры, когда заведешь несколько новых статических переменных или массивов, иначе получишь ошибку.
Добавлено after 4 hours 39 minutes 55 seconds:
СКАЗОЧНИК писал(а):Manage Run-Time Enviroment это штука пока неизвестна мне.

Видел такую штучку, но что-то там очень много галочек. Один раз понаставил и завалился всяким хламом...
Да там, собственно, ничего сложного. Запускаешь Кейл, давишь "проект", выбираешь New uVision project, в появившемся окошке Select Device for Target заходишь в STMicroelectronics (давишь на нем плюсик), находишь свой STM32F103C8, давишь ОК и кейл открывает окно Manage Run-Time Enviroment. В нем раскрываешь CMSIS, ставишь галочку на CORE, далее раскрываешь Device, ставишь галочку на Startup, раскрываешь StdPeriph Drivers и ставишь обязательные галочки Framework и RCC, а также галочки на то оборудование, с которым собираешься работать. Например, на GPIO. И все, дави ОК.
Далее, в дереве проекта раскрываешь Target1, давишь правой кнопкой на Source Group 1 и выбираешь Add New Item to Group..., далее давишь кнопу C file (c), пишешь свежепридуманное название для первого .с-файла твоего проекта, и вперед!
Откроется пустой файл. В нем пишешь
Код: Выделить всё
#include "RTE_Components.h"
#include "stm32f10x.h"
int main(void)
{
while(1)
{
}
}
и пробуешь собрать проект. Должно быть чисто, если ты не забудешь Enter после последней фигурной скобки.
Теперь расрываешь в дереве проекта Device, находишь и дважды щелкаешь startup_stm32f10x_md.s и RTE_Device.h, внутри им смотреть необязательно, выберешь под текстом закладку Configuration Wizard и конфигурируй. На первой прдкрути, если надо, размер стека и кучи, на второй обязательно подкрути клоки - дефолтно там стоит High-speed External Clock 25 МГц, а у тебя кварц 8 МГц. Ну, может еще что подкрутить надо, по используемому оборудованию. Затем сохрани все это, пересобери еще раз, убедись, что все ОК и все, можешь творить!
Да, Target 1 и Source Group 1 можешь переименовать, как тебе нравится. Если не лень, конечно. Мне, например, лень...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)