Компоненты и технологии • №2 '2011 компоненты


Эта статья продолжает знакомить читателя с созданием программ, ра-



Pdf көрінісі
бет77/129
Дата28.09.2023
өлшемі4.1 Mb.
#478975
1   ...   73   74   75   76   77   78   79   80   ...   129
Kurniz

Эта статья продолжает знакомить читателя с созданием программ, ра-
ботающих под управлением FreeRTOS — операционной системы для 
микроконтроллеров. на этот раз речь пойдет о проблемах организации 
совместного доступа нескольких задач и/или прерываний к одному ре-
сурсу в среде FreeRTOS.
FreeRTOS —
операционная система 
для микроконтроллеров
Продолжение. Начало в № 2`2011


133
КОМПОНЕНТЫ И ТЕХНОЛОГИИ • № 8 '2011
www.kite.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 инструкций, результат окажется искажен-
ным.
Следует отметить, что неатомарными яв-
ляются также операции с составными типа-
ми — структурами, когда модифицируется 
сразу несколько членов структуры.


Достарыңызбен бөлісу:
1   ...   73   74   75   76   77   78   79   80   ...   129




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет