Битовые операции

Этот пример показывает, как реализовать битовые операции при помощи блоков Simulink, диаграмм Stateflow и блоков MATLAB function.

Блок побитового оператора Simulink

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

1. Открытая модель ex_bit_logic_SL в качестве примера.

Блоки Логического оператора выполняют операцию И в модели. Чтобы изменить операцию, дважды кликните блок и установите поле Operator на любую из операций в меню.

2. Дважды кликните блок, чтобы открыть диалоговое окно Block Parameters.

3. Чтобы выполнить битовые операции с битовой маской, выберите битовую маску Use.

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

4. В поле Bit Mask введите десятичный номер. Используйте 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);
}

Диаграмма Stateflow

1. Открытая модель ex_bit_logic_SF в качестве примера.

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

3. Проверьте, что Разрешение флажка операций C-bit выбрано. Для получения дополнительной информации смотрите, Включают Операции C-Bit (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 function

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

1. Открытая модель ex_bit_logic_ML в качестве примера.

2. Блок MATLAB function содержит эту функцию:

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);
}

Смотрите также