3

Keil uVision (Keil ARM Compiler を使用) から CooCox CoIDE (GCC ARM Embedded コンパイラを使用) に STM32 マイクロコントローラー プロジェクトを移植しました。

問題は、GCC を使用して CoIDE でコンパイルすると、コード サイズが Keil uVision の 2 倍になることです。

どうすればいいの?私に何ができる?

Keil のコード サイズ: 54632b (.text) CoIDE のコード サイズ: 100844b (.text)

GCC コンパイラ フラグ:

arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -g2 -Wl,-Map=project.map -Os 
-Wl,--gc-sections -Wl,-TC:\arm-gcc-link.ld -g -o project.elf -L -lm

私は CoIDE と GCC がプロジェクトに存在する多くの関数とファイルをコンパイルするのではないかと疑っていますが、(まだ) 使用されていません。そこにある20個の関数のうち1個しか使用しない場合でも、ファイル全体をコンパイルすることは可能ですか? (私は-Oを持っていますが)..

4

2 に答える 2

1

あなたが提供した情報から、どのファイルが最終的なバイナリで実際にコンパイル/リンクされているかを言うのは難しい. コンパイルするファイルを明示的に指定していない場合、または独自の Makefile を使用していない場合は、プロジェクトで見つかったすべての C ファイルが必要になると思います。

しかし、指定したコンパイラ オプションから、次のコンパイラ フラグがない場合、リンカ フラグ--gc-sectionsはあまり役に立ちません-ffunction-sections -fdata-sections。これらのオプションを追加して、リンク時に未使用の関数とデータをすべて削除してみてください。

于 2015-09-08T12:56:09.213 に答える