私はツールチェーン(Yagartoとcodesourcery)サイズユーティリティを使用したときに得られる結果で少し混乱します。私はデータセクションで0バイトを使用していることを報告しています。私は、直接私が見るリンク取得されたオブジェクトファイルの一部をサイズツールを通過したときに私のコードは、興味深いことに0arm-none-eabi-sizeは、初期化されたRAMを使用していても.dataセクションが0になるのはなぜですか?
以外の値にスタティックRAM変数を使用して初期化している知っている
$ 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
下記参照
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セクションときmはオブジェクトファイルのELFファイルレポート0になります.dataセクションは
例を報告していますそれはゼロ以外の値を報告していますか? FYI
私はAT91SAM7x256マイクロ
編集用組込みソフトウェアに取り組んでいます:私たちははっきりと見ることができるオブジェクトのダンプから :CFLAGSとLDFLAGS
CFLAGS += -O -DRUN_AS_SYSTEM -DROM_RUN -ffunction-sections
LDFLAGS += -L $(CPU_DIRECTORY) -T $(LINKERSCRIPT) -nostartfiles -Wl,-Map,$(TARGET).map
編集#2を追加する
.dataセクションにデータが割り当てられていますが、何らかの理由でsizeユーティリティがデータを取得していないことを確認してください。 objdump link
私が探しているのは、自分のRAMの正確な使い方です。自分の変数のうちどれかが最適化されているかどうかを判断しようとしていません。
編集3:サイズのユーティリティは.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
マップファイルもチェックして、メモリの.data領域に割り当てられたデータを表示します。 – maguirre
私の最初の推測は、セクションが最適化されていることです。 '--gc-sections'や' --function-sections'でコンパイル/リンクしていますか? –
私は可視性を高めるために元の投稿を編集しましたが、私は--function-sectionsを使用しています。しかし、それを削除しても何も変わらない – maguirre