按位运算
此示例说明如何使用 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);
}