В этом примере показано, как реализовать битовые операции при помощи блоков Simulink, диаграмм Stateflow и блоков MATLAB function.
Чтобы включать логическую операцию в вашу модель, используйте блок 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); }
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 для реализации поразрядной логики в сгенерированный код, используют поразрядный 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); }