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...
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.