133
КОМПОНЕНТЫ И ТЕХНОЛОГИИ •
№ 8 '2011
www.kite.ru
компоненты
микроконтроллеры
2) В этот момент ее вытесняет задача Б, при
этом задача А не «успела» модифициро-
вать и записать данные обратно в порт.
3) Задача Б изменяет значение порта и, на-
пример, блокируется.
4) Задача А продолжает выполняться с точки,
в которой ее выполнение было прервано.
При этом она продолжает работать с ко-
пией порта в регистре, выполняет какие-то
действия над ним и записывает значение
регистра обратно в порт.
Можно видеть, что в этом случае результат
воздействия задачи Б на порт окажется потерян
и порт будет содержать неверное значение.
О подобных операциях чтение/модифи-
кация/запись говорят, что они не являются
атомарными. Атомарными же операциями
называют те, выполнение которых не может
быть прервано планировщиком. Приводя
пример из архитектуры AVR, можно назвать
инструкции процессора cbi и sbi, позволя-
ющие сбросить/установить бит в регистре
специальных функций. Разумеется, опера-
ция длиной в одну машинную инструкцию
не может быть прервана планировщиком,
то есть является атомарной.
Неатомарными могут быть не только опе-
рации с регистрами специальных функций.
Операция над любой переменной языка Си,
физический размер которой превышает раз-
рядность микроконтроллера, является не-
атомарной. Например, операция инкремента
глобальной переменной типа unsigned long
на 8-битной архитектуре AVR выглядит так:
/* Код на Си */
unsigned long counter = 0;
counter++;
/* Скомпилированный машинный код и инструкции ассемблера */
618: 80 91 13 01
lds
r24, 0x0113
61c: 90 91 14 01
lds
r25, 0x0114
620: a0 91 15 01
lds
r26, 0x0115
624: b0 91 16 01
lds
r27, 0x0116
628: 01 96
adiw r24, 0x01
; 1
62a: a1 1d
adc
r26, r1
62c: b1 1d
adc
r27, r1
62e: 80 93 13 01
sts
0x0113, r24
632: 90 93 14 01
sts
0x0114, r25
636: a0 93 15 01
sts
0x0115, r26
63a: b0 93 16 01
sts
0x0116, r27
Если другая задача или прерывание обра-
тятся к этой же переменной в течение этих
11 инструкций, результат окажется искажен-
ным.
Следует отметить, что неатомарными яв-
ляются также операции с составными типа-
ми — структурами, когда модифицируется
сразу несколько членов структуры.
Достарыңызбен бөлісу: