Цитата(imiron13 @ Sep 30 2010, 11:43)

Теперь указатели стека имеют верные значения (0007FFF0-FIQ,0007FBF0-IRQ,0007F7F0-SV). Далее работа идет
в режиме Supervisor. В конце стартапа:
Код
ldr R0, = __main
BX R0
А для System/User? Там кто SP настраивает? Можете Вы, а может и билиотечная функция (это как пожелаете):
Код
; Enter User Mode and set its Stack Pointer
MSR CPSR_c, #Mode_SYS
IF :DEF:__MICROLIB
EXPORT __initial_sp
ELSE
MOV SP, R0
SUB SL, SP, #USR_Stack_Size
Кстати и вызов __main надо делать из System или User (в зависимости от того, в каком режиме Вы желаете быть при входе в main()

... хотя в сказанном не уверен

).
Цитата(vallav @ Sep 30 2010, 17:20)

В Keil - в вызове __main ( кода инициализации ) перед вызовом main ( самой программы ) стек инициализируется значением
_initial_sp, которое задается в стартапе при выделении блоков памяти.
Выглядит это так:
Stack_Size EQU 0x00000200
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
Сюдя по всему у топикстартера ARM7/ARM9, а не Cortex (как в LPC17xx)...
Сообщение отредактировал Student Pupkin - Sep 30 2010, 16:05