мимокрокодил (11.02.2016 14:44, просмотров: 1) ответил rual на Собрал таки вундервафлю, но есть два вопроса, важный и бонусный (ибо обошелся):
Это регулируется calling convention, для арма - AAPCS r4-r11 обязана сохранять (если портит) вызываемая функция, LR - вызывающая (потому что он испортится при вызове).
Если функция никого не вызывает, то LR можно не трогать.
Надо еще не забывать про выравнивание стека на 8 байт, а то можно огрести забавные глюки на ровном месте.
Из-за этого компилятор может сохранять на регистр больше, чем необходимо.
SVC может вызвать HardFault в случае Priority Escalation
Если приоритет SVC ниже или равен, чем текущий, а также если PRIMASK == 1.
В общем, если она не может немедленно исполниться.
Прочитать можно в ARMv7-M Architecture Reference Manual (DDI0403)