ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
1056606 Топик полностью
Dingo (30.11.2020 05:48, просмотров: 520) ответил fk0 на Во-первых я предлагаю абстрагироваться от используемой процессорной архитектуры для начала. Можно сделать модель на ПК, в виде компьютерной программы, а потом переносить на МК. Так будет и проще, и быстрей, и исключит какие-либо архитектурно-зависимые решения. Во-вторых игнорировать примитивы синхронизации никак нельзя, это -- краеугольный камень, без них собственно планировщик построить не удастся.
Спасибо. Ну вот как так? Р-р-р-р-раз - и 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-ке.