Pokrewne
menu      Proste, krótkie pytanie - jak zapisać float do Eprom'u w avr gcc?
menu      avr-gcc zajetosc ram/data - dziwne zachowanie
menu      [avr-gcc] Skanowanie klawiatury - jednak nie dziala
menu      float format zapisu w pamięci - avr gcc
menu      [avr-gcc] zmienne "ciurkiem" w ramie?
menu      AVR GCC mnozenie wielkich liczb
menu      dziwny problem z avr-gcc (win)
menu      [avr-gcc] zby długie skoki
menu      avr-gcc port jako parametr
menu      [AVR-GCC] Przekazywanie przez referencje ...
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • legator.pev.pl
  • 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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • konstruktor.keep.pl
  • Design by flankerds.com