RTV forum PL | NewsGroups PL

Jak skutecznie zmniejszyć rozmiar pliku hex w GCC dla LPC2106 z garbage collection?

GCC pod arm'a (LPC2106) linkowanie mniejszego kodu

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skutecznie zmniejszyć rozmiar pliku hex w GCC dla LPC2106 z garbage collection?

tp.net.pl
Guest

Thu May 10, 2007 3:22 pm   



Witam
uzywam arm-elf-gcc oraz arm-elf-ld (wersja 3.4.3 oraz 2.15). Procek armowy
LPC2106 Philis'a.

Daze do zmniejszenia ilosci kodu chcac wyrzucic z pliku wynikowego (elf albo
hex) funkcje ktore pomimo ze zdefiniowano w plikach *.c nie sa uzywane w
programie.

Projekt sklada sie z 3 plikow main.c a.c b.c.
Kompliluje z opcja "-ffunction-sections" aby kompilator w plikach *.o
umiescil informacje o uzyciu poszczegolnych funkcji tzw garbage collection:

arm-elf-gcc $(DIRS)
O2 -ffunction-sections -mcpu=arm7tdmi -Wall -c -fmessage-length=0 -o$@ $<

Linkuje z opcja linkera "--gc-sections" (garbage collection sections) aby
zebral infomracje ktore funkcje sa nieuzywane:

arm-elf-ld $(DIRS) --gc-sections -Tlpc2106.ld -o $(UTPUTS) $(LINK_OBJS)
$(LIBS)

Jeszcze zamieniam elf'a na hex'a :

arm-elf-objcopy -O ihex $(ELFOUTPUT) $(HEXOUTPUT) >> $(STROUTPUT)

Jednak wielkosc pliku hex wynosi 13 bajtow! pomimo ze powinno byc duzo
wiecej - fukcja main wywoluje inne funckje i uzywam przerwan....

PS znalazlem informacje na:
http://www.cygwin.com/ml/ecos-discuss/2000-08/msg00103.html ale nie pomaga:(

Ktos moze pomoc? szukalem na google bez skutku.
Dziekuje

Paweł Więcek
Guest

Thu May 10, 2007 7:47 pm   



Thus wrote tp.net.pl <wytnijto_cubah@tlen.pl>:
Quote:
Daze do zmniejszenia ilosci kodu chcac wyrzucic z pliku wynikowego (elf albo
hex) funkcje ktore pomimo ze zdefiniowano w plikach *.c nie sa uzywane w
programie.

Zamiast tak cudować:
- umieść każdą funkcję w osobnym pliku *.c
- zrób z nich bibliotekę (*.a)
- przy linkowaniu biblioteki włączane są tylko używane moduły

Paweł

--
(___) | Pawel Wiecek ----------------- Coven / Svart --------------------- |
< o o > | http://www.coven.vmh.net/ <coven@vmh.net> GSM: +48603240006 |
\ ^ / | GPG/PGP info in message headers * [ Debian GNU/Linux developer ] |
(") | Deep in the dark everything is clear, clearer than daylight. -- MF |

AK
Guest

Thu May 10, 2007 10:07 pm   



Quote:

Jednak wielkosc pliku hex wynosi 13 bajtow! pomimo ze powinno byc duzo
wiecej - fukcja main wywoluje inne funckje i uzywam przerwan....

dodaj do pliku linkera:

KEEP(startup)

startup zamien na nazwe sekcji, w ktorej masz kod startowy

Jesli nie pomoze, to podeslij plik konfiguracyjny linkera.

Pozdr
AK

tp.net.pl
Guest

Fri May 11, 2007 7:11 am   



Użytkownik "Paweł Więcek" <coven@vmh.net> napisał w wiadomości
news:au5ch4-fo6.ln1@lilith.rlyeh.org...
Quote:
Thus wrote tp.net.pl <wytnijto_cubah@tlen.pl>:
Daze do zmniejszenia ilosci kodu chcac wyrzucic z pliku wynikowego (elf
albo
hex) funkcje ktore pomimo ze zdefiniowano w plikach *.c nie sa uzywane w
programie.

Zamiast tak cudować:
- umieść każdą funkcję w osobnym pliku *.c
- zrób z nich bibliotekę (*.a)
- przy linkowaniu biblioteki włączane są tylko używane moduły
Dzieki Pawel ale o tym wiem rozbieranie moich modulow na pojedyncze pliki to

"mordega":)

Quote:

Paweł

--
(___) | Pawel Wiecek ----------------- Coven /
Svart --------------------- |
o o > | http://www.coven.vmh.net/ <coven@vmh.net> GSM:
+48603240006 |
\ ^ / | GPG/PGP info in message headers * [ Debian GNU/Linux
developer ] |
(") | Deep in the dark everything is clear, clearer than daylight. --
MF |


tp.net.pl
Guest

Fri May 11, 2007 7:24 am   



Użytkownik "AK" <arkkar@gazeta.pl> napisał w wiadomości
news:f201hv$7r5$1@inews.gazeta.pl...
Quote:

Jednak wielkosc pliku hex wynosi 13 bajtow! pomimo ze powinno byc duzo
wiecej - fukcja main wywoluje inne funckje i uzywam przerwan....

dodaj do pliku linkera:
KEEP(startup)

Wlasnie tego mi brakowalo tylko nie wiedzialem jak w gcc to zrobic...
Grejt to dziala!

PS.
Dziekuje AK kod sie zmniejszyl o polowe:) Jeszcze sprawdze czy program
pracuje jak nalezy. Swoja droga do tej pory uzywalem IAR i tam wymuszalem
linkowanie modulu startowego startup.s linia SEGMENT.
Quote:

startup zamien na nazwe sekcji, w ktorej masz kod startowy

Tego do konca nie rozumiem ale skoro juz mi dziala...
Quote:

Jesli nie pomoze, to podeslij plik konfiguracyjny linkera.

Pozdr
AK


tp.net.pl
Guest

Fri May 11, 2007 7:52 am   



Użytkownik "AK" <arkkar@gazeta.pl> napisał w wiadomości
news:f201hv$7r5$1@inews.gazeta.pl...
Quote:

Jednak wielkosc pliku hex wynosi 13 bajtow! pomimo ze powinno byc duzo
wiecej - fukcja main wywoluje inne funckje i uzywam przerwan....

dodaj do pliku linkera:
KEEP(startup)

startup zamien na nazwe sekcji, w ktorej masz kod startowy

Jesli nie pomoze, to podeslij plik konfiguracyjny linkera.

Aha jeszce jedno - program zminimalizowalem do funkcji main() z funkcja z

biblioteki A.a:
main()
{
a();
}

w linkerze linkuje biblioteke A.a wynikowy hex ma wielkosc rowna bibliotece
32kB (w pliku *.map widze ze jakby zlinkowal cala bilioteke!).

Jesli w main(){} nie wywoluje nic jest ok -> hex ma ok 4KB.

Quote:
Pozdr
AK


tp.net.pl
Guest

Fri May 11, 2007 7:59 am   



Użytkownik "Paweł Więcek" <coven@vmh.net> napisał w wiadomości
news:au5ch4-fo6.ln1@lilith.rlyeh.org...
Quote:
Thus wrote tp.net.pl <wytnijto_cubah@tlen.pl>:
Daze do zmniejszenia ilosci kodu chcac wyrzucic z pliku wynikowego (elf
albo
hex) funkcje ktore pomimo ze zdefiniowano w plikach *.c nie sa uzywane w
programie.

Zamiast tak cudować:
- umieść każdą funkcję w osobnym pliku *.c
- zrób z nich bibliotekę (*.a)
- przy linkowaniu biblioteki włączane są tylko używane moduły

I to mnie wlasnie mierzi w tym GCC a nie powinno byc tak jak w VisualC? Tzn
z bilioteki statycznej wyciagane sa funckje o ile sie orientuje...:)

Przykladowo dodaje biblioteke do prostego programu ktory wazy 1KB , uzywam w
programie jednej fukcji bibliotecznej ktora nie odwoluje sie juz do innych w
tej bibliotece a tu kod rosnie do 32KB+1KB poniewaz biblioteka miala 32KB...

Quote:
Paweł

--
(___) | Pawel Wiecek ----------------- Coven /
Svart --------------------- |
o o > | http://www.coven.vmh.net/ <coven@vmh.net> GSM:
+48603240006 |
\ ^ / | GPG/PGP info in message headers * [ Debian GNU/Linux
developer ] |
(") | Deep in the dark everything is clear, clearer than daylight. --
MF |


Artur M. Piwko
Guest

Fri May 11, 2007 10:42 am   



In the darkest hour on Fri, 11 May 2007 08:59:30 +0200,
tp.net.pl <wytnijto_cubah@tlen.pl> screamed:
Quote:
Daze do zmniejszenia ilosci kodu chcac wyrzucic z pliku wynikowego (elf
albo
hex) funkcje ktore pomimo ze zdefiniowano w plikach *.c nie sa uzywane w
programie.

Zamiast tak cudować:
- umieść każdą funkcję w osobnym pliku *.c
- zrób z nich bibliotekę (*.a)
- przy linkowaniu biblioteki włączane są tylko używane moduły

I to mnie wlasnie mierzi w tym GCC a nie powinno byc tak jak w VisualC? Tzn
z bilioteki statycznej wyciagane sa funckje o ile sie orientuje...:)


Pliki .a to właśnie "biblioteki statyczne". I tak właśnie jest.
A tworzenie ich to nie mordęga tylko dodanie dwóch prostych poleceń:
ar i ranlib.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:234B ]
[ 11:30:57 user up 11338 days, 23:25, 1 user, load average: 0.06, 0.06, 0.06 ]

Those who can, do, those who can't, teach. -- George Bernard Shaw

buke
Guest

Fri May 11, 2007 1:09 pm   



Użytkownik "Artur M. Piwko" <pipene-news@pu.kielce.pl> napisał w wiadomości
news:slrnf48e09.61a.pipene-news@beast.tu.kielce.pl...
Quote:
In the darkest hour on Fri, 11 May 2007 08:59:30 +0200,
tp.net.pl <wytnijto_cubah@tlen.pl> screamed:
Daze do zmniejszenia ilosci kodu chcac wyrzucic z pliku wynikowego (elf
albo
hex) funkcje ktore pomimo ze zdefiniowano w plikach *.c nie sa uzywane
w
programie.

Zamiast tak cudować:
- umieść każdą funkcję w osobnym pliku *.c
- zrób z nich bibliotekę (*.a)
- przy linkowaniu biblioteki włączane są tylko używane moduły

I to mnie wlasnie mierzi w tym GCC a nie powinno byc tak jak w VisualC?
Tzn
z bilioteki statycznej wyciagane sa funckje o ile sie orientuje...:)


Pliki .a to właśnie "biblioteki statyczne". I tak właśnie jest.
A tworzenie ich to nie mordęga tylko dodanie dwóch prostych poleceń:
ar i ranlib.

Dzieki ale chodzilo mi nie o tworzenie biblioteki *.a czyli archiwum , tylko
podzielenie pliku *.c na pojedyncze pliki kazdy z jedna funkcja...

Quote:

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! :
SIG:234B ]
[ 11:30:57 user up 11338 days, 23:25, 1 user, load average: 0.06, 0.06,
0.06 ]

Those who can, do, those who can't, teach. -- George Bernard Shaw


Paweł Więcek
Guest

Fri May 11, 2007 7:07 pm   



Thus wrote Artur M. Piwko <pipene-news@pu.kielce.pl>:
Quote:
A tworzenie ich to nie mordęga tylko dodanie dwóch prostych poleceń:
ar i ranlib.

Jednego... Ranlib zbędny jest.

Paweł

--
(___) | Pawel Wiecek ----------------- Coven / Svart --------------------- |
< o o > | http://www.coven.vmh.net/ <coven@vmh.net> GSM: +48603240006 |
\ ^ / | GPG/PGP info in message headers * [ Debian GNU/Linux developer ] |
(") | You can never be too careful when it comes to networking. -- BOFH |

Paweł Więcek
Guest

Fri May 11, 2007 7:08 pm   



Thus wrote tp.net.pl <wytnijto_cubah@tlen.pl>:
Quote:
z bilioteki statycznej wyciagane sa funckje o ile sie orientuje...Smile

Obawiam się, że się źle orientujesz.
A na pewno źle cytujesz.

Paweł

--
(___) | Pawel Wiecek ----------------- Coven / Svart --------------------- |
< o o > | http://www.coven.vmh.net/ <coven@vmh.net> GSM: +48603240006 |
\ ^ / | GPG/PGP info in message headers * [ Debian GNU/Linux developer ] |
(") | * If you have to ask, you're not entitled to know. -- Abbot |

Adam Dybkowski
Guest

Fri May 11, 2007 9:00 pm   



buke napisał(a):

Quote:
Pliki .a to właśnie "biblioteki statyczne". I tak właśnie jest.
A tworzenie ich to nie mordęga tylko dodanie dwóch prostych poleceń:
ar i ranlib.

Dzieki ale chodzilo mi nie o tworzenie biblioteki *.a czyli archiwum , tylko
podzielenie pliku *.c na pojedyncze pliki kazdy z jedna funkcja...

Przecież to da się zautomatyzować. Jeżeli wszystkie funkcje nie są
statyczne (czyli mają być dostępne z zewnątrz) i już posprzątałeś
używanie zmiennych statycznych i deklarację globalnych, to bardzo ładnie
automatycznie można wygenerować n plików, z których każdy zawiera
początek pliku oryginalnego aż do pierwszej funkcji (komentarze, includy
itp) oraz n-tą funkcję i ew. końcówkę pliku po ostatniej funkcji
(komentarze).

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skutecznie zmniejszyć rozmiar pliku hex w GCC dla LPC2106 z garbage collection?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map