Страница 168 из 1044 ПерваяПервая ... 68118158166167168169170178218268668 ... ПоследняяПоследняя
Показано с 1,671 по 1,680 из 10436

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    И если при записи в DWORD значения 32 мы получаем на выходе 1 и идем по кругу
    То логично предположить что и указав, что работаем с BYTE и записи на вход 8 тоже должны получить 1 на выходе

    В обоих случаях происходит переполнение ОПЕРАНДА (нет такой "буквы" по счету в данном "слове").
    Тут одно из двух, либо при работе с байтом и записи на входе 8 должна быть на выходе 1-ца, либо при работе с двойным словом и записи 32 на входе должен быть 0 на выходе.
    Для того чтоб по окончании разрядности типа данных увидеть снова единичку начиная с нулевого разряда существуют ROL/ROR-ы.И если уж Вы озаботились документацией на SHL, то что скажете про ADD, эффект то тот же (см. картинку). Правда я что то не вижу появляющуюся единицу, а вот единицу сместить на 32 в лево снова появилась

  2. #1672
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Тоже покопался.
    Хелп - в норме. Компилятор на выхлопе - под вопросом.
    Сформулирую так. Битовые сдвиги до занесения результата в память(переменную) реализуются через что-то типа внутреннего цикла c однократным сдвигом, но размер этого цикла перед операцией зачищается до модуля 32 (N <- N AND 31). Вот тут и порылось.
    На это косвенно указывает и результат
    2 <- SHL(1,33) или SHL(1,65). Т.е. SHL(1,1)
    Более правильно было бы еще сначала сравнить N c 31. Если больше - сразу 0 и выход. А дальше - как есть

    Немцам видимо не приходит в голову что русские будут за каким-то делать SHL более 31 раза для 32-битового регистра. На таком они и погорели. Тогда. Их парламентеры с Петровым И. переговоры ведут. Может сдадуцца. Всех с наступающим.

    PS
    А в атмеге нету типа SHL AX,CL ?

  3. #1673
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,669

    По умолчанию

    Валенок да вопрос то не в именно 32 на входе dword shl или 8 на входе byte shl а вообще в любом числе на входе.

    когда shl dword происходит расчет бита по циклу на одном операнде и на выходе есть значение, а когда shl byte или word при превышении числа на выходе тупо 0.
    функция одна, а работает на разных операндах по разному. вот разность и есть ошибка в логике. ИМХО.
    кстати не проверял еще математические функции, но на примере сименса там проверку делает система, если идет перепонение, то можно контроировать по регистру произошло переполнение или нет.
    а тут add считает по кругу а вот можно ли проверить или нет, не смотрел еще, может кто знает ?

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

    По умолчанию

    Да это симулятор такой кривой. На ПЛК с SHL всё ок.

  5. #1675
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,251

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Да это симулятор такой кривой. На ПЛК с SHL всё ок.
    Ну вот и разобрались.


    когда shl dword происходит расчет бита по циклу на одном операнде и на выходе есть значение, а когда shl byte или word при превышении числа на выходе тупо 0.
    А то тут shl(byte,32) - и опять получим себя

  6. #1676
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,669

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    А то тут shl(byte,32) - и опять получим себя
    именно так себя ведет с операндом dword

    Yegor, если в ПЛК ведет себя так же как с dword, то надо взять на заметку и не забыть об этом.

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

    По умолчанию

    А по поводу retain переменных что скажете ?, если я всю библиотеку туда запихну, она будет сохранять все свои внутренние переменные ?

  8. #1678

    По умолчанию

    А по поводу Retain в справке достаточно ясно написано:
    "Замечания. Если хотя бы одна переменная функционального блока объявлена как RETAIN, то все данные экземпляров целиком помещаются в энергонезависимый сегмент."

    А для функций: "Внимание: объявление в функции RETAIN локальной переменной не приведет к желаемому результату. Не пытайтесь создавать локальные энергонезависимые переменные в функциях"

    Вот как-то так...

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

    По умолчанию

    YuriBel с объявлениями переменных понятно.
    Я делаю FB без объявления переменных retain но сам FB объявляю как retain.
    При этом симулятор мне пишет, что память retain не задана.
    типа
    VAR RETAIN
    tr1: TRAB;
    END_VAR
    Внутри FB есть счетчики, арифметические выражения. Вот в таком варианте будут все данные FB попадать в Retain или все-таки необходимо заботиться о выносе переменных отдельно от FB ?

  10. #1680

    По умолчанию

    По идее должны все попадать.

Страница 168 из 1044 ПерваяПервая ... 68118158166167168169170178218268668 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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