.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) エントリを見ることで、アライメントの制限のためにバイトが失われたかどうかをすばやく確認できます。

 

全ての製品名は、それぞれの所有者の商標または登録商標です

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。