Битовые поля
Объявление битового поля назначает простое имя переменной группе бит.
Объявление выглядит так:
FIELD var = [var1, var2, ... varN];
где FIELD – ключевое слово, var – имя переменной, var1 и т.д. – список имён переменных, входящих в битовое поле.
Битовые поля могут быть использованы в выражениях. С ними можно обращаться как с обычными переменными.
Примеры:
FIELD addr = [A7, A6, A5, A4, A3, A2, A1, A0];
или
FIELD addr = [A7..A0];
При использовании FIELD компилятор внутренне генерирует простое 32 битное поле. Оно используется для представления переменных в битовом поле.
Порядок появления индексных переменных в битовых полях не имеет значения. Индексная переменная занимает бит с номером, совпадающим с индексом.
То есть, A0 будет располагаться в бите 0. Объявления [A7..0] и [A0..7] обозначают одно и то же. Не стоит использовать различные индексные переменные в одном битовом поле. Битовое поле содержащее A2 и B2 будет содержать обе этих переменных в одном бите, что приведёт к генерации ошибочного выражения.
Не рекомендуется использовать в одном выражении индексные и неиндексные переменные.
Примеры операций с битовыми полями:
/* привязываем к пинам переменные */
PIN [2..5] = [a0..a3];
PIN [6..9] = [b0..b3];
PIN [12..15] = [z0..z3];
/* собираем переменные в битовые поля */
FIELD a = [a0..a3];
FIELD b = [b0..b3];
FIELD z = [z0..z3];
/* работаем с битовыми полями */
z = a & b;
/* в результате компилятор развернёт выражение до:
z0 =>
a0 & b0
z1 =>
a1 & b1
z2 =>
a2 & b2
z3 =>
a3 & b3
*/
/* Не обязательно выполнять операцию между парой битовых полей. Можно выполнять операции между полем и отдельной переменной: */
z = a & b1;
в результате компилятор развернёт выражение до:
z0 =>
a0 & b1
z1 =>
a1 & b1
z2 =>
a2 & b1
z3 =>
a3 & b1