.mapファイル中の' N/A (alignment) 'は何ですか?
テクニカル・ノート 35041
アーキテクチャ:
8051, AVR, AVR32, Coldfire, CR16C, H8, HCS12, M16C, M32C, MAXQ, MSP430, R32C, R8C, S08, SAM8, V850, 78K
コンポーネント:
linker
更新日:
2021/10/28 4:30
はじめに
このテクニカルノートは、IAR XLINK Linker™ がマップファイルに「N / A(アライメント)」エントリを生成する理由を解説します。
解説
'N / A(alignment)'エントリは、セグメントのアライメントに関する制約のために失われたバイトを示します。
例
IAR XLINK Linker の配置コマンドの例:
-Z(DATA)A,B,C=0-FFFF
前提条件
- Segment A は、サイズが0x1Fバイトで、アライメントは0です(1バイトでアライメント)
- Segment B は、サイズが0xAバイトで、アライメントは1です(2バイトでアライメント)
- Segment Cは、サイズが0x40バイトで、アライメントは2です(4バイトでアライメント)
結果
- Segment A は、
0x00-0x1E
に配置されます - Segment B は、
0x20-0x29
に配置されます (アライメントによって 0x1F にある1バイトが失われます) - Segment C は、
0x2C-0x6B
に配置されます (アライメントによって 2 bytes, 0x2A と 0x2B にある2バイトが失われます)
この場合、モジュールサマリには3バイトがN/A (alignment)としてリストされます。
提案
配置コマンドの 'A,B,C'
の順序を 'A,B,C'
のように逆にしてください。 アライメントの降順でセグメントを割り当てた場合、「あふれる」バイトは生成されません。
降順のアライメント順では、結果は以下のようになります:
- Segment C は、
0x00-0x3F
に配置されます - Segment B は、
0x40-0x49
に配置されます - Segment A は、
0x4A-0x68
に配置されます
まとめ
he N/A (alignment) エントリを見ることで、アライメントの制限のためにバイトが失われたかどうかをすばやく確認できます。
全ての製品名は、それぞれの所有者の商標または登録商標です