exponenta event banner

Побитовые операции

В этом примере показано, как реализовать побитовые операции с использованием блоков Simulink, диаграмм Stateflow и функциональных блоков MATLAB.

Блок оператора Simulink Bitwise

Чтобы включить логическую операцию в модель, используйте блок Bitwise Operator из библиотеки Logic and Bit Operations.

1. Открыть пример модели ex_bit_logic_SL.

Блоки логического оператора выполняют операцию AND в модели. Чтобы изменить операцию, дважды щелкните блок и установите в поле «Оператор» любую из операций в меню.

2. Дважды щелкните блок, чтобы открыть диалоговое окно «Параметры блока».

3. Для выполнения побитовых операций с битовой маской выберите Использовать битовую маску.

Если другой вход использует побитовые операции, снимите флажок Use bit mask и введите количество входных портов.

4. В поле Битовая маска введите десятичное число. Использовать bin2dec или hex2dec для преобразования входных данных из двоичных или шестнадцатеричных. В этом примере введите hex2dec('D9').

5. Чтобы построить модель и создать код, нажмите клавиши Ctrl + B.

Код, реализующий побитовый оператор AND, находится в ex_bit_logic_SL_step функция в ex_bit_logic_SL.c:

/* Exported block signals */
uint8_T u1;                            /* '<Root>/u1' */
uint8_T y1;                            /* '<Root>/Bitwise Operator' */

/* Model step function */
void ex_bit_logic_SL_step(void)
{
  /* S-Function (sfix_bitop): '<Root>/Bitwise Operator' incorporates:
   *  Inport: '<Root>/u1'
   */
  y1 = (uint8_T)(u1 & 217);
}

Диаграмма статофлоу

1. Открыть пример модели ex_bit_logic_SF.

2. Щелкните правой кнопкой мыши диаграмму Stateflow, чтобы открыть ее свойства.

3. Убедитесь, что установлен флажок Включить операции C-bit. Дополнительные сведения см. в разделе Включение C-разрядных операций (Stateflow).

4. Чтобы построить модель и создать код, нажмите клавиши Ctrl + B.

Код, реализующий побитовый оператор AND, находится в ex_bit_logic_SF_step функция в ex_bit_logic_SF.c:

/* Exported block signals */
uint8_T u1;                            /* '<Root>/u1' */
uint8_T y1;                            /* '<Root>/Bit_Logic' */

/* Model step function */
void ex_bit_logic_SF_step(void)
{
  /* Chart: '<Root>/Bit_Logic' incorporates:
   *  Inport: '<Root>/u1'
   */
  y1 = (uint8_T)(u1 & 0xD9);
}

Функциональный блок MATLAB

В этом примере, чтобы показать метод функционального блока MATLAB для реализации побитовой логики в сгенерированном коде, используйте побитовый OR, '|'.

1. Открыть пример модели ex_bit_logic_ML.

2. Функциональный блок MATLAB содержит следующую функцию:

function y1 = fcn(u1, u2)
%#eml

y1 = bitor(u1, u2);
end

3. Чтобы построить модель и создать код, нажмите клавиши Ctrl + B.

Код, реализующий побитовый оператор OR, находится в ex_bit_logic_ML_step функция в ex_bit_logic_ML.c:

/* Exported block signals */
uint8_T u1;                            /* '<Root>/u1' */
uint8_T u2;                            /* '<Root>/u2' */
uint8_T y1;                            /* '<Root>/Bitwise OR' */

/* Model step function */
void ex_bit_logic_ML_step(void)
{
  /* MATLAB Function: '<Root>/Bitwise OR' incorporates:
   *  Inport: '<Root>/u1'
   *  Inport: '<Root>/u2'
   */
  y1 = (uint8_T)(u1 | u2);
}

См. также