ツールチェーン (Yagarto および codesourcery) のサイズ ユーティリティを使用したときに得られる結果に少し混乱しています。データ セクションで 0 バイトを使用していると報告されています。下記参照
$ arm-none-eabi-size.exe rest-server-example.crazy-horse.elf
text data bss dec hex filename
79364 0 34288 113652 1bbf4 rest-server-example.crazy-horse.elf
コードでスタティック RAM 変数を使用し、0 以外の値に初期化していることはわかっています。
興味深いことに、リンクされているオブジェクト ファイルの一部にサイズ ツールを直接渡すと、.data セクションが報告されていることがわかります。
例:
text data bss dec hex filename
1648 0 20 1668 684 obj_crazy-horse/uip-nd6.o
200 12 2652 2864 b30 obj_crazy-horse/uip-packetqueue.o
12 0 0 12 c obj_crazy-horse/uip-split.o
1816 24 48 1888 760 obj_crazy-horse/usb-core.o
284 0 0 284 11c obj_crazy-horse/usb-interrupt.o
2064 20 188 2272 8e0 obj_crazy-horse/xmac.o
.data セクションを作成するオブジェクト ファイルがゼロ以外の値を報告しているのに、elf ファイルが .data セクションに対して 0 を報告するのはなぜですか?
参考までに、私は AT91SAM7x256 Micro の組み込みソフトウェアに取り組んでいます
編集:
CFLAGS と LDFLAGS を追加する
CFLAGS += -O -DRUN_AS_SYSTEM -DROM_RUN -ffunction-sections
LDFLAGS += -L $(CPU_DIRECTORY) -T $(LINKERSCRIPT) -nostartfiles -Wl,-Map,$(TARGET).map
編集#2:オブジェクトダンプから、.dataセクションにデータが割り当てられていることがはっきりとわかりますが、サイズユーティリティは何らかの理由でそれを取得していません objdump link
私が探しているのは、変数の1つが最適化されたかどうかを把握しようとしていないRAMの正確な使用量を取得することだけです。
編集 3: size ユーティリティが .data セクションに何かを見ていることを示す詳細情報
$ arm-none-eabi-size.exe -A -t -x rest-server-example.crazy-horse.elf
rest-server-example.crazy-horse.elf :
section size addr
.vectrom 0x34 0x100000
.text 0x10fc8 0x100038
.rodata 0x149c 0x111000
.ARM.extab 0x30 0x11249c
.ARM.exidx 0xe0 0x1124cc
.data 0x1028 0x200000
.bss 0x7bec 0x201028
.stack 0xa08 0x20f5f8
.ARM.attributes 0x32 0x0
.comment 0x11 0x0
.debug_aranges 0xc68 0x0
.debug_info 0x2b87e 0x0
.debug_abbrev 0x960b 0x0
.debug_line 0x9bcb 0x0
.debug_frame 0x4918 0x0
.debug_str 0x831d 0x0
.debug_loc 0x13fad 0x0
.debug_ranges 0x620 0x0
Total 0x7c4c5