25. Косвенная адресация
25 - 20 Automating with STEP 7 in STL and SCL
Автоматизация посредством STEP 7
с использованием STL и SCL
Если Вы программируете функциональный блок как блок версии 1,то есть,
без "мультиэкземплярного режима", то STEP 7 не использует адресный
регистр AR2.
Итак, Вы хотите использовать адресный регистр AR2 в функциональном
блоке с возможностью работы в "мультиэкземплярном режиме", Вы
должны сначала сохранить содержимое адресного регистра AR2 и DI-
регистра до использования и вновь восстанавливать данные в регистрах
после выполнения операции доступа. Вы не должны программировать
никаких обращений к параметрам блока или к статическим локальным
данным в области, в которой Вы используете адресный регистр AR2.
При использовании адресного регистра AR2 внутри функций никаких
ограничений не накладывается.
Пример:
В функциональном блоке Вам необходимо использовать регистр AR2 и
DI-регистр для выполнения косвенной адресации. Прежде всего Вы
должны сохранить содержимое DI-регистра и адресного регистра AR2.
При этом Вы не должны выполнять обра щения к параметрам блоков или к
статическим локальным данным до того, пока Вы не восстановите
содержимое регистров (см. рис. 25.5, нижняя часть).
25.4.3 Ограничения на использование статических локальных
данных
При использовании функциональных блоков, скомпилированны х с
CODE_VERSION1 (без "мультиэкземплярного режима"), Вы можете
использовать все операторы (инструкции), описанные в данной главе без
ограничений.
При использовании функциональных блоков с во зможностью работы в
"мультиэкземплярном режиме", редактор (Editor) обращается к
экземплярным данным посредством адресного регистра AR2; то есть, все
эти операции доступа носят косвенный характер. Это же касается
косвенной адресации и обработки адресных регистров. Если Вы
используете абсо лютную адресацию для экземплярных данных, в которых
Вы храните указатели на область (area pointers), редактор использует
абсолютные адреса. Тем не менее, как только Вы начнете использовать
символьную адресацию, редактор отбросит эту часть программы как
попытку "двойной косвенной адресации" (duoble indirect addressing).
В таблице 25.3 представлены два таких примера: если Вы используете
косвенную адресацию посредством памяти в фун кциональных блоках с
возможностью работы в "мультиэкземплярном режиме", то Вы не можете
непосредственно использовать указатель, который Вы желаете сохранять
в статических локальных данных. Вы должны скопировать указатель во
временные локальные данные, и после этого можете работать с ним. При
этом Вы не можете непосредственно загрузить (load) указатель на
статические локальные данные в а дресный регистр и не можете также
переслать содержимое адресного регистра непосредственно в указатель
(второй пример).