wiki:tips/signal_data
シグナルデータの取り扱い


はじめに

  • RTEから送信されるシグナルデータが,Comモジュール内でどのように使用されるかを説明する
  • AUTOSARのComモジュールは,OSEK/COM]仕様をベースにしており,一部の機能では仕様理解のためにOSEK/COM仕様書を参照する必要がある
    • OSEK/VDXのWebサイト閉鎖に伴い,OSEK/COM仕様書は既に公開されていないが「osekcom303.pdf」で検索するとヒットすることがある

データ内で使用されるビット

UINT8

  • ComSignalType: UINT8
  • ComBitSize: 3
  • データ: 7(0x07)
         | (byte 0)        |
    bit  | 7 6 5 4 3 2 1 0 |
    data | 0 0 0 0 0 1 1 1 |
    pack |           * * * |
    
  • 受信でIPDUから取り出す場合,0で符号拡張(0)される

UINT16

  • ComSignalType:UINT16
  • ComBitSize:13
  • データ: 4369(0x1111)
         | (byte 1)                (byte 0)                |
    bit  | 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0 |
    data |  0  0  0  1  0  0  0  1  0  0  0  1  0  0  0  1 |
    pack |           *  *  *  *  *  *  *  *  *  *  *  *  * |
    
  • 受信時処理は,UINT8と同様

SINT8

  • ComSignalType: SINT8
  • ComBitSize: 4
  • データ: -4(0xFFFC)
         | (byte 0)        |
    bit  | 7 6 5 4 3 2 1 0 |
    data | 1 1 1 1 1 1 0 0 |
    pack |         * * * * |
    
  • 符号有り整数(2の補数)において,ビットサイズ4ということは,-8~7まで格納できる
-81000
-71001
-61010
-51011
-41100
-31101
-21110
-11111
00000
10001
20010
30011
40100
50101
60110
70111

UINT8_N

  • ComSignalType: UINT8_N(uint8[n])
  • ComSignalLength: 3
  • データ: {1,2,3}
         | (byte 2)        | (byte 1)        | (byte 0)        |
    bit  | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 | 7 6 5 4 3 2 1 0 |
    data | 0 0 0 0 0 0 1 1 | 0 0 0 0 0 0 1 0 | 0 0 0 0 0 0 0 1 |
    pack | * * * * * * * * | * * * * * * * * | * * * * * * * * |
    
  • UINT8_Nの場合,シグナルサイズが必ず8の倍数とするため,ComBitSizeでなくComSignalLengthで大きさを指定する

FLOAT32/FLOAT64


I-PDUへのパッキング

以下のデータを例にエンディアン毎のパッキング方法を図示する

  • ComSignalType: UINT32
  • ComBitSize: 12
  • ComBitPosition: 13
  • PduLength: 4
  • データ: "101010101010"

リトルエンディアン

     | (byte 3)                | (byte 2)                | (byte 1)                | (byte 0)                |
bit  | 31 30 29 28 27 26 25 24 | 23 22 21 20 19 18 17 16 | 15 14 13 12 11 10  9  8 |  7  6  5  4  3  2  1  0 |
data |  0  0  0  0  0  0  0  1 |  0  1  0  1  0  1  0  1 |  0  1  0  0  0  0  0  0 |  0  0  0  0  0  0  0  0 |
pack |                       <------------------------------------*                                          |
  • osekcom303.pdf(2.4.2, Figure 2-9)参照

ビッグエンディアン

     | (byte 0)                | (byte 1)                | (byte 2)                | (byte 3)                |
bit  |  7  6  5  4  3  2  1  0 | 15 14 13 12 11 10  9  8 | 23 22 21 20 19 18 17 16 | 31 30 29 28 27 26 25 24 |
data |  0  0  0  0  0  0  0  0 |  0  0  1  0  1  0  1  0 |  1  0  1  0  1  0  0  0 |  0  1  0  1  0  0  0  0 |
pack |                                  *<----------------------------------                                 |
  • osekcom303.pdf(2.4.3, Figure 2-10)参照

オペーク

  • エンディアン変換がオペークに設定されている場合,(I-PDUに詰め込む)最初のバイトのビット0をComBitPositionとする
    • つまり,ComBitPositionには,ビットの先頭となる8の倍数しか指定してはいけない
  • 参考仕様
  • 以下のデータを例にオペークのパッキング方法を図示する
    • ComSignalType: UINT8_N
    • ComSignalLength: 2
    • ComBitPosition: 8
    • PduLength: 3
    • データ: {1,3}
           | (byte 2)                | (byte 1)                | (byte 0)                |
      bit  | 23 22 21 20 19 18 17 16 | 15 14 13 12 11 10  9  8 |  7  6  5  4  3  2  1  0 |
      data |  0  0  0  0  0  0  1  1 |  0  0  0  0  0  0  0  1 |  0  0  0  0  0  0  0  0 |
      pack |  <----------------------------------------------*                           |
      
Last modified 7 months ago Last modified on 31/01/19 22:27:34