主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

按位运算

此示例说明如何使用 Simulink® 模块、Stateflow® 图和 MATLAB® Function 模块实现按位运算。

Simulink Bitwise Operator 模块

要在模型中包含逻辑运算,请使用 Logic and Bit Operations 库中的 Bitwise Operator 模块。

1.打开示例模型 ex_bit_logic_SL

Logical Operator 模块在模型中执行 AND 运算。要更改运算,请双击该模块并将运算符字段设置为菜单中的任何运算。

2.双击该模块以打开“模块参数”对话框。

3.要使用位掩码执行按位运算,请选择使用位掩码

如果另一个输入使用按位运算,请清除使用位掩码参数,并输入输入端口的个数。

4.在位掩码字段中,输入十进制数。使用 bin2dechex2dec 转换二进制或十六进制输入。在此示例中,输入 hex2dec('D9')

5.要编译模型并生成代码,请按 Ctrl+B

实现按位运算符 AND 的代码在 ex_bit_logic_SL.cex_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.cex_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.cex_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);
}

另请参阅