Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 30

Тема: ADR(%X.X) в указатель неверного типа — бип-бип и стоп

  1. #11
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    в си
    Это многое объясняет, спасибо.
    А верните само значение из функции, зачем плодить лишний код ?
    Смысл GetPointer()^.DoSomething() как раз в сокращении кода. Тип возврата функции компилятору известен.

    На мой взгляд в языке со строгой типизацией для критически важных объектов фокусы вроде попытки прочитать INT вместо BYTE должны пресекаться на ранних этапах.

  2. #12

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    На мой взгляд в языке со строгой типизацией для критически важных объектов фокусы вроде попытки прочитать INT вместо BYTE должны пресекаться на ранних этапах.
    хотите, чтоб кдс вам по рукам скалкой бил?)

  3. #13
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Хочу, чтобы спрашивал у меня и не выдумывал, если что-то непонятно.

  4. #14
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,277

    По умолчанию

    а ПЛК ничего и не выдумывал, ему сказали создать ссылку на 2-х байтовоую переменную, он создал. Запросили результат начиня с адреса однобайтовой переменной, он и выдал результат из памяти в размере 2-х байт. Всё сделал строго по инструкции, полученной от программиста.
    Поговорка про таких как Вы есть: "Не чего на зеркало пенять, коль ..."

  5. #15
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    а ПЛК ничего и не выдумывал
    А к ПЛК претензий и не было.

    Указатели типизированные. Где type mismatch при попытке присваивания без явного приведения?

  6. #16
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    На этой ноте стоит, наверное, закругляться. Тут уже вопросы к разработчикам кодесиса.

  7. #17
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,277

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    А к ПЛК претензий и не было.

    Указатели типизированные. Где type mismatch при попытке присваивания без явного приведения?
    То что Вы привели в начале, там везде явные типы, вот Валенок показал не явное.

  8. #18
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    type mismatch ? пжста

    p : pointer to int;

    P^ := 3.3;
    p^ это уже ссылка (разыменованный указатель), а не указатель. Вы делаете int := real. Указатель в указатель это вот так:

    pi: POINTER TO INT;
    pr: POINTER TO REAL;
    pi := pr; (* Компилятор молча компилирует *)
    Последний раз редактировалось Yegor; 15.02.2012 в 13:04.

  9. #19
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,277

    По умолчанию

    Вы до сих пор не "въехали" в концепцию программирования контроллеров. В этом примере не на что ругаться, указателю pi дали команду считать два байта с началом адресации указателя на реал. если pr:=ADR(value), где value = 25,5, то pi в Вашем случае будет равно нулю. Таким образом можно раскладывать числа REAL в регистры модбаса, этим ни кто не пользуется потому что есть более легкие и короткие способы. Так что ругатся тут компилятору не на что

    pi:POINTER TO INT;
    pr:POINTER TO REAL;
    ril:REAL:=36.6; (*25.5*)
    ine:INT;
    ine1:INT;
    //**********
    pr:=ADR(ril);
    pi:=pr;
    ine:=pi^;
    pi:=pi+2;
    ine1:=pi^;
    здесь pi:=pi+2; смещение указателя на два байта
    Последний раз редактировалось capzap; 15.02.2012 в 14:05.

  10. #20
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Даже в C++, где есть сотни способов выстрелить себе в ногу, компилятор не сделает за вас из указателя одного типа указатель другого, хоть этому ничто и не препятствует с технической точки зрения. При этом можете сделать reinterpret_cast, и тогда плюсовый компилятор всё съест подобно кодесисовскому. Отличие-то в том, что вы явно указываете своё намерение произвести такую манипуляцию.

    Молчание компилятора в этом случае опасно. Например, если у вас есть функция, которая возвращает указатель определённого типа, то вы можете изменить тип этого указателя в определении функции, но забыть учесть это изменение там, где функция вызывается. А компилятор ничего не скажет. Я против такого поведения.

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

  1. как логировать старт/стоп?
    от Ушаков Николай в разделе ПЛК1хх
    Ответов: 13
    Последнее сообщение: 18.01.2017, 11:42
  2. Ответов: 2
    Последнее сообщение: 13.01.2011, 15:47
  3. стоп плк
    от Дмитрий Прибытов в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 11.11.2010, 03:38
  4. бит через указатель
    от Freddy в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 20.07.2010, 09:08
  5. Ответов: 5
    Последнее сообщение: 02.04.2010, 10:05

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •