Спасибо. Ну вот как так? Р-р-р-р-раз - и 20 килознаков? Буду разбираться. По поводу примитивов синхронизаций: я понимаю,
что это краеугльные механизмы ОС, без них будет сфероконь в
вакууме. Но переключение+создание - это "номер ноль". Я держу в уме
буквально пару-тройку архитектур, и та же AVR (ну вот я ассемблер
их лучше всего знаю), не имеет примитивов, но можно сделать что-то
вроде
LDI r30, HI( ptr) ; load pointer to Z
LDI r31, LO(ptr)
LDI r18, 0x01
LD r19, Z ; get value by pointer
;TST r19 \ BRNE, BREQ label ; Wrong way - it needs many cycles
SBRS r19, 0 ; skip next instruction when (r19&0x01)!=0
ST Z, r18 ; set 0x01 by ptr
; next - analyze locked or not
На пару-тройку инструкций можно и прерывания запретить, там 2+[1|2|3]+2 (LD rA, Z \ SBRS rA, bit \ ST Z, rB) максимум 7 циклов.
Cortex-M3 имеет инструкции эксклюзивного доступа STREX/LDEX а вот M0/M0+ не имеет (но есть ISB/DMB/DSB ), придётся примерно как и на AVR-ке.