PDA

Просмотр полной версии : как записать в память



Anton_Minsk
27.11.2008, 13:16
Добрый день,
вопрос такой:
есть переменная типа Word содержащая адрес в памяти.
как мне записать значение по этому адресу?
бьюсь без толку, непонятно как в кодесисе вот так обратиться к памяти

Малышев Олег
27.11.2008, 13:29
a:word;
x: pointer to word;
x:=ADR(a);
x^:=22;

Anton_Minsk
27.11.2008, 13:49
a:word;
x:pointer to word;
x:=ADR(a);
x^:=22;

тут указатель х имеет адрес переменной а, и значение записывается по адресу а.

это не то
надо чтобы значение записалось по адресу, находящемуся в переменной а.

Малышев Олег
27.11.2008, 14:25
a: DWORD:=16#0; (* Убиваем вектора прерываний*)
x: pointer to BYTE;
x:=a;
x^:=0; (* Убили!*)

Anton_Minsk
28.11.2008, 12:40
А вот и нет. Только вектор загрузки, а он не нужен.
Попытка №2?

Владислав, подскажите пожалуйста, я этот вопрос обошел другим путем, но все же вопрос остается открытым.

Филоненко Владислав
28.11.2008, 19:32
Какой вопрос?
Запись по адресу? Записываете в указатель адрес и вперёд.
А, если не секрет, зачем?

Anton_Minsk
02.12.2008, 13:48
Какой вопрос?
Запись по адресу? Записываете в указатель адрес и вперёд.

Невольно вспомнилось: впрос, как положить слона в холодильник?
1. открыть холодильник
2. положить слона в холодильник
3. закрыть холодильник

мне нужен синтаксис операции для кодесиса, как это делается в других языках я знаю, вот в чем загвоздка.


А, если не секрет, зачем?

Это нужно для автоматического выключения датчиков с МВА8 протокол Овен
допустим идет обрыв датчика, я беру значения код ошибки и адрес ошибки. по адресу я автоматически записываю нужное мне значение в переменную датчика.
я эту проблему решил, но решил ее не самым оптимальным вариантом, хотелось бы узнать как это сделать правильно, спасибо

Малышев Олег
02.12.2008, 14:19
1) Давайте разберемся, что Вы имеете ввиду, говоря адрес.
Если это адрес IEC 61131 вида %Q... или %I то к обычным адресам эти адреса не имеют никого отношения.
2) Чтобы записать по адресу переменной нужно узнать этот адрес. Обычно это делается операцией ADR(). Иногда нужно добавить к адресу некое смещение. Это смещение нужно рассчитывать как DWORD переменную или константу тогда получается - x : POINTER to WORD ; x:=adr(error); x:=x+DWORD#4; x^:=WORD#3;
3) ИМХО, не стоит работать так с областью ввода и ввода. В принципе, работа с указателями - зло, и цена ошибки в случае с областью ввода-вывода выше чем с обычными переменными.