メインコンテンツ

Byte Pack

入力信号を 8、16、または 32 ビットのベクトルに変換する

  • Byte Pack block

ライブラリ:
Simulink Support Package for Arduino Hardware / Utilities
Embedded Coder / Embedded Targets / Host Communication
Embedded Coder Support Package for Infineon AURIX TC4x Microcontrollers / Utilities
Embedded Coder Support Package for Infineon AURIX TC3x Microcontrollers / Utilities
STM32 Microcontroller Blockset / Utilities

説明

Byte Pack ブロックは、ユーザーが選択可能なデータ型の 1 つ以上の信号を単一の uint8uint16、または uint32 ベクトル出力に変換します。このブロックのパラメーターを使用して、入力データ型と、出力ベクトル内のデータの配置を指定します。このブロックの出力は、SPI TransmitSCI TransmitUDP Send などの送信ブロックの入力端子に接続されます。送信ブロックは、SPI、SCI、UDP、I2C などのさまざまな通信ネットワークを介して信号を送信します。

端子

入力

すべて展開する

[入力ポートのデータ型 (cell 配列)] パラメーターで cell 配列として指定された入力端子の数と型。ブロックには、1 から N 個の入力端子を含めることができます。N は、cell 配列で指定された入力データ型の数です。

データ型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean

出力

すべて展開する

パックされたデータのベクトルを送信します。

データ型: uint8 | uint16 | uint32

パラメーター

すべて展開する

出力端子におけるパックされた出力信号のデータ型。

入力信号 (アンパック) のデータ型。cell 配列として指定します。ブロックは、cell 配列で指定された入力データ型の順序で入力端子を作成します。たとえば、cell 配列の最初のデータ型は最上位の端子に対応し、最後のデータ型は最下位の端子に対応します。

たとえば、データ型が singleuint8、および uint8 の場合、ブロックは 3 つの入力端子を作成します。入力端子のデータ型の順序は、cell 配列で指定されたデータ型と同じです。

入力信号リスト内の各要素は、ベクトルの先頭から指定されたバイト アライメント値の倍数で始まります。バイト アライメント値がバイト単位のデータ型のサイズより大きい場合、割り当てられたスペースを埋めるために入力値がゼロでパディングされます。

たとえば、バイト アライメント値が 4 の場合、uint32 はパディングされず、uint16 は 2 バイト分パディングされ、uint8 は 3 バイト分パディングされます。

ヒント

モデルがデータ項目に頻繁にアクセスする場合は、アクセスする最大のデータ型に等しいバイト アライメント値を選択することを検討してください。モデルがデータ項目をグループとして頻繁に転送する場合は、データを可能な限り小さいスペースにパックするバイト アライメント値 [1] を選択することを検討してください。

4 つの信号を uint8 または uint16 データ型のベクトルにパックし、信号に次の属性が含まれているとします。

次元サイズ
ベクトル3int8
ベクトル2int16
スカラー1uint8
スカラー1uint32

信号をパックするには、次のようにします。

  1. [出力ポート (パック) のデータ型] を設定します。この例では、uint8uint16 を比較します。

  2. [入力ポートのデータ型 (cell 配列)] を次のように設定します。

    {'int8’, ‘int16’, ‘uint8’, ‘uint32’}

    ブロックは、cell 配列で指定された入力信号データ型の順序に一致する 4 つの入力端子を作成します。

  3. 必要なバイト アライメント値を設定します。バイト アライメント値は、前の境界から新しいバイトが始まるまでのバイト数を指定します。

    出力のサイズは、パックされたベクトルのサイズ、バイト アライメント値、およびプロセッサの最小メモリ セル サイズに基づきます。バイト アライメント値に応じて、次の信号がパックされる前に入力値がゼロでパディングされます。アドレス指定可能な最小メモリ セルは、プロセッサの char または uint8 データ型によって占有されるビット数を示し、パケットの構造を決定します。

  4. 入力信号を Byte Pack ブロックの入力端子に接続します。

1 char あたり 8 ビットのアドレス指定可能な最小メモリ セルを備えたプロセッサの場合、入力信号に次の値を考慮してください。

アンパックされた信号
次元サイズデータ型10 進数値16 進数値
ベクトル3int83523
404
–3FD
ベクトル2int1621800DA
–12FFF4
スカラー1uint811270
スカラー1uint32500000001388

パックされた出力ベクトル データ型 uint8 は次のとおりです。

赤いゼロはパディングされた空のメモリ セルを表します。

uint8 データ型およびバイト アライメント値 2 のパックされた出力ベクトルの場合、int8 データ値 (23 04 FD) が最初の 3 つのメモリ セルを占有し、各セルは 8 ビットを占有します。3 はバイト アライメント値 2 の倍数ではないため、次の入力信号 (int16 データ値 (00DA FFF4)) には次の 4 つのセル (5 番目から 8 番目) が割り当てられ、4 番目のセルは空のままになります。ブロックにより、空のセルがゼロで埋められます。残りの入力信号も同様の方法でパックされます。

すべての入力信号をパックした後、Byte Pack ブロックは割り当てられたパケットの合計を計算し、サイズが 4 + 4 + 2 + 4 = 14 の uint8 ベクトルを出力します。ここで、int8 信号は最初の 4 つのセルを占有し、int16 信号は 2 番目の 4 つのセルを占有し、uint16 信号は 3 番目の 2 つのセルを占有し、uint32 信号は 4 番目の 4 つのセルを占有します。

uint16 データ型のパックされた出力ベクトルは次のとおりです。

Texas Instruments® C2000™ など、1 char あたり 16 ビットのアドレス指定可能な最小メモリ セルを備えたプロセッサの場合、入力信号に次の値を考慮してください。int8 および uint8 のデータ値は、16 進数値で示されているように 16 ビットを占有します。

アンパックされた信号
次元サイズデータ型10 進数値16 進数値
ベクトル3int8350023
40004
–3FFFD
ベクトル2int1621800DA
–12FFF4
スカラー1uint81120070
スカラー1uint32500000001388

uint8 データ型のパックされた出力ベクトルの場合、パケットが表すデータ値は 8 ビットですが、出力パケットは 16 ビットを占有します。バイト アライメント値は、16 ビットのアドレス指定可能なメモリを基準に計算されます。

uint8 データ型およびバイト アライメント値 2 のパックされた出力ベクトルの場合、int8 データ値 (0023 0004 00FD) が最初の 3 つのメモリ セルを占有し、各セルは 16 ビットを占有します。3 はバイト アライメント値 2 の倍数ではないため、int16 データ型の次の信号 (00DA 0000 00F4 00FF) には次の 4 つのセル (5 番目から 8 番目) が割り当てられ、4 番目のセルは空のままになります。ブロックにより、空のセルがゼロで埋められます。残りの入力信号も同様の方法でパックされます。すべての入力信号をパックした後、Byte Pack ブロックは割り当てられたパケットの合計を計算し、サイズが 4 + 4 + 2 + 4 = 14 の uint8 ベクトルを出力します。

uint16 データ型のパックされた出力ベクトルの場合、出力パケットは 16 ビットを占有し、パケットが表すデータ値も 16 ビットになります。パケット サイズが 16 以上の場合、バイト アライメントは、データ値がパックされるバイト数を基準に計算されます。したがって、この場合、1 バイトのアライメントは許可されません。

uint16 データ型およびバイト アライメント値 2 のパックされた出力の場合、3 つの int8 データ値 (0423 FD) が最初の 2 つのメモリ セルに 2 語としてパックされます。2 番目のメモリ セルの 4 番目のバイトは空であり、ゼロで埋められます。int16 データ値 (00DA FFF4) は、次の 2 つのメモリ セル (3 番目と 4 番目) に割り当てられます。残りの入力信号も同様の方法でパックされます。すべての信号をパックした後、Byte Pack ブロックは割り当てられたパケットの合計を計算し、サイズが 2 + 2 + 1 + 2 = 7 の uint16 ベクトルを出力します。

バージョン履歴

R2016b で導入