シグナルデータの取り扱い
はじめに
- 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まで格納できる
-8 1000 -7 1001 -6 1010 -5 1011 -4 1100 -3 1101 -2 1110 -1 1111 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111
- 受信側で符号拡張して取り出される
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
- 浮動小数点は部分的なビットでは意味がないため,
ComBitSize
は32か64である必要がある - R4.1では,FLOAT32/FLOAT64の場合,
ComBitSize
は無視されると書かれている
I-PDUへのパッキング
以下のデータを例にエンディアン毎のパッキング方法を図示する
- ComSignalType: UINT32
- ComBitSize: 12
- ComBitPosition: 13
ComBitPosition
は,リトルエンディアンではLSBを,ビッグエンディアンではMSBを示すので注意が必要- AUTOSAR_TPS_SystemTemplate.pdf(Figure 5.6)参照
- 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
19 months ago
Last modified on Dec 8, 2022, 10:19:02 AM
Note:
See TracWiki
for help on using the wiki.