Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

SETFIELD - замена группы бит в целом числе


Назначение.
Функциональный блок SETFIELD применяется для замены группы бит в переменной целого типа. Значения остальных бит переменной не изменяются.
 
Состав структурной переменной.
Переменная со структурным типом SETFIELD будет добавлена в локальный словарь автоматически при добавлении блока в редактор.
Описание алгоритма.
  • На вход INP передается 32-битное целое число, группу бит которого требуется заменить. Границы группы бит определяются параметрами LSM (индекс младшего бита из группы) и MSB (индекс старшего бита из группы).
  • Вычисляется количество заменяемых бит Q = MSB - LSB + 1.
  • Из 32-битного целого числа VAL копируется группа младших бит в количестве Q (индексы от 0 до Q - 1).
  • В числе INP группа бит с индексами от LSB до MSB заменяется группой скопированных младших бит из числа VAL.
  • Результат преобразования передается на выход OUT в виде 32-битного целого числа.  
    Например, для числа INP=2024 требуется заменить с 5 (LSB) по 8 (MSB) биты. В качестве источника заменяемых бит передается целое число VAL = 589. В процессе преобразования значения четырех бит с индексами 5, 6, 7 и 8 в числе INP будут заменены на значения четырех бит с индексами 0, 1, 2 и 3 из числа VAL. Итоговая битовая маска соответствует целочисленному значению 1960, которое передается на выход OUT.
    Процесс преобразования по рассмотренному примеру представлен на следующем изображении.
     
    При отрицательных значениях параметров LSB и MSB, выход OUT = INP.
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.SETFIELD(2024, 5, 8, 589);
//чтение выходного параметра
OUT := Block.OUT; //OUT = 1960