Цитата(Golikov A. @ Jun 27 2013, 08:41)

В том числе и исключения и прочее, особенно аварийные ситуации, через пол года, год, подохнешь этот огород разбирать, что там и зачем было...
Вот обработчик исключительной ситуации:
Код
HardFaultException:
mov r0, sp
push {lr}
bl print_fault
pop {pc}
в котором вызывается функция на C print_fault с одним аргументом.
Код
void print_fault(sFAULT *fault)
{
con_str("FAULT:\n\r");
con_str("r0 = "); con_dword(fault->r0); con_str(", ");
con_str("r1 = "); con_dword(fault->r1); con_str(", ");
con_str("r2 = "); con_dword(fault->r2); con_str(", ");
con_str("r3 = "); con_dword(fault->r3); con_str("\n\r");
con_str("r12 = "); con_dword(fault->r12); con_str(", ");
con_str("lr = "); con_dword(fault->lr); con_str(", ");
con_str("pc = "); con_dword(fault->pc); con_str(", ");
con_str("xpsr = "); con_dword(fault->xpsr); con_str("\n\r");
con_start();
}
Как без asm-вставки передать в качестве аргумента в функцию текущее значение указателя стека?
На asm, как Вы видите, все элементарно и никакой путаницы.
Хотя, в данном случае, "огород" получился слишком маленький.