Hallo,
ich habe das Problem, dass auch nicht verwendete Funktionen im Build
enthalten sind und somit das HEX-File aufblächen.
Beispiel:
Ich lege eine Testfunktion an, welche ich niemals aufrufe:
1 | #if 1 //0
|
2 | void test_fkt(void);
|
3 | void test_fkt(void)
|
4 | {
|
5 | }
|
6 | #endif
|
Anschließend compile ich mein Projekt einmal mit aktiver Testfunktion
(#if 1) und einmal mit abgeschalteter Testfunktion (#if 0).
Die Consolenausgabe gibt unterschiedliche Programmgrößen für mit und
ohne Testfunktion an:
1 | Mit Testfunktion: ... Program: 1056 bytes (3.2% Full) (.text + .data + .bootloader) ...
|
2 | Ohne Testfunktion: ... Program: 1054 bytes (3.2% Full) (.text + .data + .bootloader) ...
|
Es sind zwar nur 2 Byte, aber es handelt sich ja auch um eine leere
Testfunktion.
Dabei ist es egal welche Optimierungsstufe ich wähle (-o0, -o1, -o2,
-o3, -os), es gibt immer einen Programmgrößenunterschied zwischen mit
und ohne Testfunktion.
Die Dateigröße vom hex-File ändert sich auch.
Des Weiteren taucht die Testfunktion auch im map-File auf:
1 | ...
|
2 | 0x00000094 testfkt1
|
3 | 0x0000009a test_fkt_damit_mehr_speicher
|
4 | 0x0000009c test_fkt2
|
5 | ...
|
Somit spricht meines erachtens alles dafür, dass die Funktion wirklich
im hex-File enthalten ist.
Meinem Verständnis nach sollte der Linker nicht benötigte Funktionen
jedoch entfernen. Ich habe nämlich das Problem, dass mein Projekt nicht
mehr in den µC passt, weil nicht benötigte Funktionen Platz "wegnehmen".
(Ich möchte nicht alle möglichen Funktionen in meinen Dateien und
Bibliotheken auskommen.)
Ich hoffe, ihr könnt mir weiterhelfen.
Ich verwende ATmega32, winAVR, Eclipse, Win7 64Bit.
Gruß
Ben