Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ビット演算

この例では、Simulink® ブロック、Stateflow® チャート、および MATLAB® Function ブロックを使用してビット演算を実装する方法を示します。

Simulink Bitwise Operator ブロック

モデルに論理演算を含めるには、"Logic and Bit Operations" ライブラリの Bitwise Operator ブロックを使用します。

1. モデル例 ex_bit_logic_SL を開きます。

Logical Operator ブロックは、モデルで AND 演算を実行します。演算を変更するには、ブロックをダブルクリックし、[演算子] フィールドをメニューのいずれかの演算に設定します。

2. ブロックをダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開きます。

3. ビットマスクを使用してビット演算を実行するには、[ビット マスクの使用] をオンにします。

別の入力でビット演算を使用する場合は、[ビット マスクの使用] パラメーターをオフにして入力端子の数を入力します。

4. [ビット マスク] フィールドに 10 進数を入力します。bin2dec または hex2dec を使用して、入力を 2 進数または 16 進数から変換します。この例では、「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 言語のビット演算が可能] チェック ボックスがオンになっていることを確認します。詳細については、C 言語のビット演算が可能 (Stateflow)を参照してください。

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

参考