С.Н. Падалко, М.Н. Терентьев
78
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 1
п р
,
1, ,
A A m j j
m
(1)
где
п
А
— адрес потомка;
А
р
— адрес родителя;
m —
предельное число непосред-
ственных потомков, которое может иметь один узел (модуль сети);
j —
номер
потомка в пределах пространства адресов его родителя.
Координатор имеет адрес 0, подключение к сети ему не требуется. Коорди-
натор готов к работе сразу после включения. Остальные узлы после включения
должны получить логический адрес. Отвечать на запросы подключающихся уз-
лов могут любые подключенные к сети узлы, имеющие свободные адреса для
потомков, т. е. если число уже подключенных потомков данного узла не превы-
шает
т
. Подключающемуся узлу назначается адрес, определенный по (1).
Адрес родителя
р
А
любого узла с адресом
А
, не являющегося координатором
р
1
int
,
A
А
m
(2)
где int — целая часть числа.
В общем случае маршрут передачи сообщения от
узла с адресом
SRC
А
до узла с адресом
DEST
А
состоит
из восходящей и нисходящей ветвей (рис. 2). Эти вет-
ви пересекаются в узле с адресом
,
LCP
А
являющимся
общим родителем источника и адресата наименьшего
возможного уровня. В частном случае в роли такого
узла может выступать координатор сети — узел с адре-
сом
А
0
.
При использовании приведенной схемы назначе-
ния логических адресов узлам сети маршрутизация
сообщений выполняется следующим образом. Приняв
некоторое адресованное ему сообщение по радиоканалу, узел определяет адрес
следующего в маршруте передачи узла c помощью функции
GetNext()
, возвра-
щающей на узле с адресом
A
THIS
адрес узла, на который должно быть передано
сообщение для последующей доставки на узел с адресом
A
DEST
, при условии
.
DEST THIS
A A
Код этой функции, а также функции
GetParent()
, возвращающей
адрес родителя своего аргумента, т. е. реализующей выражение (2), приведен
ниже:
/* определение адреса родителя */
unsigned int GetParent(unsigned int A)
{
return (A-1)/m; /* модуль сети m — глобальная переменная */
}
/* маршрутизация сообщения по дереву */
unsigned int GetNext(unsigned int Athis, unsigned int Adest)
{
/* пока адрес назначения больше моего адреса */
while(Adest > Athis)
Рис. 2.
Маршрут пере-
дачи сообщения