GCC pod arm'a (LPC2106) linkowanie mniejszego kodu
tp.net.pl - 10-05-2007 16:45
GCC pod arm'a (LPC2106) linkowanie mniejszego kodu 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-discus.../msg00103.html ale nie pomaga:(
Ktos moze pomoc? szukalem na google bez skutku.
Dziekuje
=?ISO-8859-2?Q?Pawe=B3_Wi=EAcek?= - 10-05-2007 21:45
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
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 - 10-05-2007 23:45
>
> 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 - 11-05-2007 08:45
Użytkownik "Paweł Więcek" <coven@vmh.net> napisał w wiadomości
news:au5ch4-fo6.ln1@lilith.rlyeh.org...
> 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":)
>
> 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 - 11-05-2007 08:45
Użytkownik "AK" <arkkar@gazeta.pl> napisał w wiadomości
news:f201hv$7r5$1@inews.gazeta.pl...
>>
>> 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.
>
> startup zamien na nazwe sekcji, w ktorej masz kod startowy
Tego do konca nie rozumiem ale skoro juz mi dziala...
>
> Jesli nie pomoze, to podeslij plik konfiguracyjny linkera.
>
> Pozdr
> AK
>
tp.net.pl - 11-05-2007 09:45
Użytkownik "Paweł Więcek" <coven@vmh.net> napisał w wiadomości
news:au5ch4-fo6.ln1@lilith.rlyeh.org...
> 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...
> 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 - 11-05-2007 09:45
Użytkownik "AK" <arkkar@gazeta.pl> napisał w wiadomości
news:f201hv$7r5$1@inews.gazeta.pl...
>>
>> 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.
> Pozdr
> AK
>
Artur M. Piwko - 11-05-2007 11:46
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.
--
[ 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 - 11-05-2007 14:45
Użytkownik "Artur M. Piwko" <pipene-news@pu.kielce.pl> napisał w wiadomości
news:slrnf48e09.61a.pipene-news@beast.tu.kielce.pl...
> 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...
>
> --
> [ 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
=?ISO-8859-2?Q?Pawe=B3_Wi=EAcek?= - 11-05-2007 21:45
Thus wrote Artur M. Piwko <pipene-news@pu.kielce.pl>:
> 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 |
=?ISO-8859-2?Q?Pawe=B3_Wi=EAcek?= - 11-05-2007 21:45
Thus wrote tp.net.pl <wytnijto_cubah@tlen.pl>:
> z bilioteki statycznej wyciagane sa funckje o ile sie orientuje...:)
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 - 11-05-2007 22:45
buke napisał(a):
>> 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.
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl