ビット演算
この例では、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 言語のビット演算が可能] チェック ボックスがオンになっていることを確認します。
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);
}