Цитата(Сергей Борщ @ Dec 11 2007, 16:10)

Перепешите процедуры вход а выхода. После выхода состояние разрешения прерываний должно быть таким же, как и перед входом. Иначе как организовывать вложенные критические секции?
Я не силён в ассемблере, как в локальную переменную адрес, которой заранее не известен сохранить значение CPSR регистра.???
Код
uint32_t temp;
asm volatile (
"STMDB SP!, {R0} \n\t" /* Push R0. */
"MRS R0, CPSR \n\t" /* Get CPSR. */
"ORR R0, R0, #0xC0 \n\t" /* Disable IRQ, FIQ. */
"MSR CPSR, R0 \ n\t" /* Write back modified value. */
"LDMIA SP!, {R0}" ); /* Pop R0. */
/* Enable interrupts as per portEXIT_CRITICAL(). */
asm volatile (
"STMDB SP!, {R0} \n\t" /* Push R0. */
"MRS R0, CPSR \n\t" /* Get CPSR. */
"BIC R0, R0, #0xC0 \n\t" /* Enable IRQ, FIQ. */
"MSR CPSR, R0 \n\t" /* Write back modified value. */
"LDMIA SP!, {R0}" ); /* Pop R0.