Цитата
А так нельзя?
Пробовать надо.
Для начала, надо внимательно читать документацию. Номер раз -
Цитата
Base register mode: For the purpose of address calculation, the base register is read from the current
processor mode registers, not the User mode registers.
Значит, годится STMxx SP,{R13}^
Но, имеем два -
Цитата
Banked registers: This instruction must not be followed by an instruction which accesses banked
registers (a following NOP is a good way to ensure this).
И три - нельзя writeback SP сделать
Значит, финальный вариант должен выглядеть так -
Код
SUB SP,SP,#4
STMEA SP,{R13}^
NOP
LDMFD SP!,{R0}
Цитата
Ещё небольшой вопрос - как современные оси, например, RTX отслеживают переполнение стека у пользовательской задачи без MMU?
За всех не отвечу, Nucleos при сборке с контролем стека банально внутри каждой ОСовской функции проверяет, не вышел ли стек за границу. Все. Полумера конечно, но бывает спасает.