Цитата(aaarrr @ Apr 15 2015, 18:56)

Для ARM выравнивание стека производится по границе двух слов (8 байт).
А топикстартеру лучше посмотреть map и проверить значение SP непосредственно перед вызовом printf().
Итак, выравнивание по границе не привело к успеху. Выравнивать кстати нужно по 8 байтам,там прям в starup.s это указано. Отладчик в моем проце отсутствует.
Цитата(Golikov A. @ Apr 15 2015, 11:56)

А стэк пишется с конца, тут ничего не изменилось? То есть на самом деле размер стэка определяет адрес первого сохраняемого значения.
Смещение на 64 К не привило к падению, а что если размер стека увеличить на 64 К? Взять тот размер что работает и 64К прибавить?
Увеличение размера стека не помогло.
Я освоил scatter файл,и с его помощью разбил память,отдельно для стека,отдельно для кучи и все остальное пространство собственно для программы.
Вот так выглядит мой scatter
CODE
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LOAD_ROM 0x08000000 0x0005FFFF ; load region size_region
{
EXEC_ROM 0x08000000 0x0005FFFF ; load address = execution address
{
*.o (START, +First)
*(InRoot$$Sections)
.ANY (+RO )
}
HEAP_RAM 0x20000400 0x00007BFF ; Heap region Heap_size = 31K
{
*(HEAP)
}
SRAM 0x20008000 0x000FFFF ; RW region RW_size = 64K
{
.ANY (+RW +ZI)
}
STACK_RAM 0x20018000 0x00007FFF ; Stack region Stack_size = 32K
{
*(STACK)
}
}
Карта памяти в приложении.
И моя программа с приветствием миру заработала при любых комбинациях и размерах областей памяти и ее содержимого.
О чудо,подумал я!
И на всякий случай решил удостовериться что ничего не работало. Я снова скомпилировал проект,но уже со стандартными настройками...такой какой был раньше и не работал.
И он ЗАРАБОТАЛ
Что это? И что я сделал этим разбиение памяти?
Mem_map_SCATTER.txt ( 995 байт )
Кол-во скачиваний: 105