按位运算
此示例说明如何使用 Simulink® 模块、Stateflow® 图和 MATLAB® Function 模块实现按位运算。
Simulink Bitwise Operator 模块
要在模型中包含逻辑运算,请使用 Logic and Bit Operations 库中的 Bitwise Operator 模块。
1.打开示例模型 ex_bit_logic_SL
。
Logical Operator 模块在模型中执行 AND 运算。要更改运算,请双击该模块并将运算符字段设置为菜单中的任何运算。
2.双击该模块以打开“模块参数”对话框。
3.要使用位掩码执行按位运算,请选择使用位掩码。
如果另一个输入使用按位运算,请清除使用位掩码参数,并输入输入端口的个数。
4.在位掩码字段中,输入十进制数。使用 bin2dec
或 hex2dec
转换二进制或十六进制输入。在此示例中,输入 hex2dec('D9')
。
5.要编译模型并生成代码,请按 Ctrl+B。
实现按位运算符 AND 的代码在 ex_bit_logic_SL.c
的 ex_bit_logic_SL_step
函数中:
/* 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 语言位运算复选框。
4.要编译模型并生成代码,请按 Ctrl+B。
实现按位运算符 AND 的代码在 ex_bit_logic_SF.c
的 ex_bit_logic_SF_step
函数中:
/* 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 & (uint32_T)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.c
的 ex_bit_logic_ML_step
函数中:
/* 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); }