RTV forum PL | NewsGroups PL

Jak zmiany w win-avr-gcc wpływają na rozmiar generowanego kodu AVR?

Czy kolejne wersje win-avr-gcc generują coraz dłuższy kod?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zmiany w win-avr-gcc wpływają na rozmiar generowanego kodu AVR?

Goto page Previous  1, 2

Andrzej
Guest

Thu Mar 24, 2011 10:17 am   



Użytkownik "Andrzej" <dydelf02@op.pl> napisał w wiadomości
news:imcsdc$ujm$1@news.onet.pl...
Quote:
Zaczynam zabawę z AVR-ami.
Mam program skompilowany przez autora pod Win-avr-3.4.6 i zajmuje on ok.
2kB.
Ten sam program skompilowany ze źródła pod wersją 4.1.2 zajmuje ponad 4kB
(opcja -0s).
Podobno następne wersje generują coraz dłuższe kody, ale taka zmiana - to
chyba niemożliwe.
pozdrawiam,
Andrzej

No niestety.

Żadne pomysły nie zadziałały.
Stary gcc też generuje kod ok. 4kB.
Po prostu wezmę większy procesor. Będę miał możliwość większych modyfikacji
kodu, więc może więcej się nauczę. ATTiny poczeka w cieple na jakiś mniejszy
projekt. Dziękuję wszystkim za pomoc.
PS. Chciałem podziałać w C. Tyle się mówi o przenośności kodu. W asemblerze
już programowałem: 6800, 8080, 8068 (ach, te segmenty!), najwięcej Z-80.
Potem była długa przerwa.
pozdrawiam,
Andrzej

Tom
Guest

Thu Mar 24, 2011 10:56 am   



On 24/03/2011 7:17 PM, Andrzej wrote:
Quote:
Użytkownik "Andrzej"<dydelf02@op.pl> napisał w wiadomości
news:imcsdc$ujm$1@news.onet.pl...
Zaczynam zabawę z AVR-ami.
Mam program skompilowany przez autora pod Win-avr-3.4.6 i zajmuje on ok.
2kB.
Ten sam program skompilowany ze źródła pod wersją 4.1.2 zajmuje ponad 4kB
(opcja -0s).
Podobno następne wersje generują coraz dłuższe kody, ale taka zmiana - to
chyba niemożliwe.
pozdrawiam,
Andrzej

No niestety.
Żadne pomysły nie zadziałały.
Stary gcc też generuje kod ok. 4kB.
Po prostu wezmę większy procesor. Będę miał możliwość większych modyfikacji
kodu, więc może więcej się nauczę. ATTiny poczeka w cieple na jakiś mniejszy
projekt. Dziękuję wszystkim za pomoc.
PS. Chciałem podziałać w C. Tyle się mówi o przenośności kodu. W asemblerze
już programowałem: 6800, 8080, 8068 (ach, te segmenty!), najwięcej Z-80.
Potem była długa przerwa.
pozdrawiam,
Andrzej


Co to za kod, mozna go skads sciagnac? Moze ktos inny odkryje w czym problem.


Swoja droga wiekszy procesor na poczatek to niezly pomysl, poeksperymentujesz z C a nie bedziesz sie rozpraszal na uboczne problemy.

Tomek

Robbo
Guest

Thu Mar 24, 2011 11:48 am   



Używam starego WinAVR. Chciałem przesiąść się na nową wersję. Gdy
zobaczyłem, że binarka jest znacząco większa w nowym WinAVR, to szybciutko
wróciłem do starej wersji i tyle.

R.

Sebastian Biały
Guest

Thu Mar 24, 2011 6:40 pm   



On 2011-03-24 10:17, Andrzej wrote:
Quote:
Stary gcc te generuje kod ok. 4kB.

Więc pokaż źródła i makefile.

Quote:
Po prostu wezm wikszy procesor.

Nie. Po prostu zobaczymy dlaczego generuje duzo bo może generuje
*dobrze* a autor kodu sciemnia.

Andrzej
Guest

Thu Mar 24, 2011 10:23 pm   



Użytkownik "Sebastian Biały" <heby@poczta.onet.pl> napisał w wiadomości
news:imfvme$ran$1@news.onet.pl...
Quote:
On 2011-03-24 10:17, Andrzej wrote:
Stary gcc te? generuje kod ok. 4kB.

Więc pokaż źródła i makefile.

Po prostu wezme wiekszy procesor.

Nie. Po prostu zobaczymy dlaczego generuje duzo bo może generuje *dobrze*
a autor kodu sciemnia.
Będę bardzo wdzięczny.

Ten kod stąd:
http://www.cappels.org/dproj/nlglcm/Pretty%20Good%20LC%20Meter%20Project.html
Jest to miernik LC. Autor zrobił wyświetlanie wyniku na drugim procesorze
AtTiny 2313.
Ja uprościłem trochę jego źródło i dopisałem obsługę LCD na tym samym
procesorze. Myślałem, że może się zmieści, albo tylko trochę przekroczy
pojemność, a tu masz - prawie 5kB.
Więc skompilowałem jego źródło - tylko nieco mniej.
Policzyłem wielkość pliku hex (znam format) - poniżej 2kB
Zmieniłem gcc, na taką wersję jak on podaje - niewielka różnica w wielkości
kodu.
W makefile nic nie grzebałem, włączyłem tylko optymalizację -os uzyskane po
wyklikaniu w AvrStudio.
Myslałem, że pójdzie lekko, łatwo i przyjemnie, a tu przyjdzie się uczyć
tych wszystkich opcji z makefile...

Marcin Wasilewski
Guest

Thu Mar 24, 2011 10:38 pm   



Użytkownik "Robbo" <yyy@mmm.com> napisał w wiadomości
news:4d8b2170$0$2506$65785112@news.neostrada.pl...
Quote:
Używam starego WinAVR. Chciałem przesiąść się na nową wersję. Gdy
zobaczyłem, że binarka jest znacząco większa w nowym WinAVR, to
szybciutko wróciłem do starej wersji i tyle.
R.

Starą czyli jaką? Jakiś numerek możesz podać?

shg
Guest

Fri Mar 25, 2011 1:41 am   



On Mar 24, 10:23 pm, "Andrzej" <dydel...@op.pl> wrote:
Quote:

B d bardzo wdzi czny.
Ten kod st d:http://www.cappels.org/dproj/nlglcm/Pretty%20Good%20LC%20Meter%20Proj...
Jest to miernik LC. Autor zrobi wy wietlanie wyniku na drugim procesorze
AtTiny 2313.
Ja upro ci em troch jego r d o i dopisa em obs ug LCD na tym samym
procesorze. My la em, e mo e si zmie ci, albo tylko troch przekroczy
pojemno , a tu masz - prawie 5kB.
Wi c skompilowa em jego r d o - tylko nieco mniej.
Policzy em wielko pliku hex (znam format) - poni ej 2kB
Zmieni em gcc, na tak wersj jak on podaje - niewielka r nica w wielko ci
kodu.
W makefile nic nie grzeba em, w czy em tylko optymalizacj -os uzyskane po
wyklikaniu w AvrStudio.
Mysla em, e p jdzie lekko, atwo i przyjemnie, a tu przyjdzie si uczy
tych wszystkich opcji z makefile...

Zmieniłeś też wersję avr-libc?
Widzę tam operacje na float (double, ale to i tak float), od którejś
wersji avr-libc te procedury bardzo "spuchły". Dowolna operacja na
float to chyba 3 kB kodu na dzień dobry. We wcześniejszej wersji było
dużo mniej, około 1 kB.

JDX
Guest

Fri Mar 25, 2011 8:22 am   



On 2011-03-24 22:23, Andrzej wrote:
[.....]
Quote:
Ten kod stąd:
http://www.cappels.org/dproj/nlglcm/Pretty%20Good%20LC%20Meter%20Project.html
Na początku zaznaczę, że AVR-y to dla mnie nowość. Ale mikrokontrolery

tak ogólnie i gcc to już nie... W każdym bądź razie ściągnąłem plik
2313LCmeter_070217A_project.zip, rozpakowałem i odpaliłem serię komend:

D:\Temp\LCMeter>make clean

-------- begin --------

Cleaning project:
rm -f 2313LCmeter.hex
rm -f 2313LCmeter.eep
rm -f 2313LCmeter.cof
rm -f 2313LCmeter.elf
rm -f 2313LCmeter.map
rm -f 2313LCmeter.sym
rm -f 2313LCmeter.lss
rm -f 2313LCmeter.o
rm -f 2313LCmeter.lst
rm -f 2313LCmeter.s
rm -f 2313LCmeter.d
rm -f .dep/*
-------- end --------


D:\Temp\LCMeter>make

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling: 2313LCmeter.c
avr-gcc -c -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os
-funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-
adhlns=2313LCmeter.lst -std=gnu99 -MD -MP -MF .dep/2313LCmeter.o.d
2313LCmeter.
c -o 2313LCmeter.o

Linking: 2313LCmeter.elf
avr-gcc -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os
-funsigned-char -fu
nsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-adh
lns=2313LCmeter.o -std=gnu99 -MD -MP -MF .dep/2313LCmeter.elf.d
2313LCmeter.o -
-output 2313LCmeter.elf -Wl,-Map=2313LCmeter.map,--cref -lm

Creating load file for Flash: 2313LCmeter.hex
avr-objcopy -O ihex -R .eeprom 2313LCmeter.elf 2313LCmeter.hex

Creating load file for EEPROM: 2313LCmeter.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O ihex 2313LCmeter.elf
2313LCmeter.eep
c:\Tools\WinAVR\bin\avr-objcopy.exe: --change-section-lma
..eeprom=0x00000000 nev
er used

Creating Extended Listing: 2313LCmeter.lss
avr-objdump -h -S 2313LCmeter.elf > 2313LCmeter.lss

Creating Symbol Table: 2313LCmeter.sym
avr-nm -n 2313LCmeter.elf > 2313LCmeter.sym

Size after:
2313LCmeter.elf :
section size addr
..text 2158 0
..data 54 8388704
..bss 12 8388758
..debug_aranges 32 0
..debug_pubnames 292 0
..debug_info 872 0
..debug_abbrev 399 0
..debug_line 922 0
..debug_frame 208 0
..debug_str 343 0
..debug_loc 106 0
Total 5398



-------- end --------


D:\Temp\LCMeter>avr-size 2313LCmeter.elf
text data bss dec hex filename
2158 54 12 2224 8b0 2313LCmeter.elf

I jak widać w powyższej linii, wychodzi mi, że program zajmuje ~2,2kB.

Andrzej
Guest

Fri Mar 25, 2011 8:41 am   



Użytkownik "shg" <shogoonn@gmail.com> napisał w wiadomości news:1500ebc6-1112-4010-b151-719c5533c532@d16g2000yqd.googlegroups.com...
[ciach]
Quote:
Zmieniłeś też wersję avr-libc

Wyciąłem z komputera WinAvr i zainstalowałem wersję z gcc 3.4.6 ze wszystkimi bibliotekami.
Jak mówiłem do tej wersji gcc przyznaje się autor.

Quote:
Widzę tam operacje na float (double, ale to i tak float), od którejś
wersji avr-libc te procedury bardzo "spuchły". Dowolna operacja na
float to chyba 3 kB kodu na dzień dobry. We wcześniejszej wersji było
dużo mniej, około 1 kB.

A nie pamiętasz czym się chwalili, jak powstała ta nowa wersja. Musiała czymś się różnić skoro "spuchła".
Tak na razie nie wiem, której wersji szukać.

shg
Guest

Fri Mar 25, 2011 10:44 am   



On Mar 25, 8:41 am, "Andrzej" <dydel...@op.pl> wrote:
Quote:
A nie pamiętasz czym się chwalili, jak powstała ta nowa wersja. Musiała czymś się różnić skoro "spuchła".
Tak na razie nie wiem, której wersji szukać.

Różni się pierdołami, które przydają się od święta. Obsługa NaN-ów,
liczb zdenormalizowanych itp. Jest też chyba kilka razy szybsza.

Andrzej
Guest

Fri Mar 25, 2011 1:01 pm   



Użytkownik "JDX" <jdx@onet.pl> napisał w wiadomości news:imhfr8$ecc$1@news.onet.pl...
Quote:
On 2011-03-24 22:23, Andrzej wrote:
[.....]
Ten kod stąd:
http://www.cappels.org/dproj/nlglcm/Pretty%20Good%20LC%20Meter%20Project.html
Na początku zaznaczę, że AVR-y to dla mnie nowość. Ale mikrokontrolery
tak ogólnie i gcc to już nie... W każdym bądź razie ściągnąłem plik
2313LCmeter_070217A_project.zip, rozpakowałem i odpaliłem serię komend:

D:\Temp\LCMeter>make clean

-------- begin --------

Cleaning project:
rm -f 2313LCmeter.hex
rm -f 2313LCmeter.eep
rm -f 2313LCmeter.cof
rm -f 2313LCmeter.elf
rm -f 2313LCmeter.map
rm -f 2313LCmeter.sym
rm -f 2313LCmeter.lss
rm -f 2313LCmeter.o
rm -f 2313LCmeter.lst
rm -f 2313LCmeter.s
rm -f 2313LCmeter.d
rm -f .dep/*
-------- end --------


D:\Temp\LCMeter>make

-------- begin --------
avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Compiling: 2313LCmeter.c
avr-gcc -c -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os
-funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-
adhlns=2313LCmeter.lst -std=gnu99 -MD -MP -MF ..dep/2313LCmeter.o.d
2313LCmeter.
c -o 2313LCmeter.o

Linking: 2313LCmeter.elf
avr-gcc -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=4000000UL -Os
-funsigned-char -fu
nsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-adh
lns=2313LCmeter.o -std=gnu99 -MD -MP -MF .dep/2313LCmeter.elf.d
2313LCmeter.o -
-output 2313LCmeter.elf -Wl,-Map=2313LCmeter.map,--cref -lm

Creating load file for Flash: 2313LCmeter.hex
avr-objcopy -O ihex -R .eeprom 2313LCmeter.elf 2313LCmeter.hex

Creating load file for EEPROM: 2313LCmeter.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O ihex 2313LCmeter.elf
2313LCmeter.eep
c:\Tools\WinAVR\bin\avr-objcopy.exe: --change-section-lma
.eeprom=0x00000000 nev
er used

Creating Extended Listing: 2313LCmeter.lss
avr-objdump -h -S 2313LCmeter.elf > 2313LCmeter.lss

Creating Symbol Table: 2313LCmeter.sym
avr-nm -n 2313LCmeter.elf > 2313LCmeter.sym

Size after:
2313LCmeter.elf :
section size addr
.text 2158 0
.data 54 8388704
.bss 12 8388758
.debug_aranges 32 0
.debug_pubnames 292 0
.debug_info 872 0
.debug_abbrev 399 0
.debug_line 922 0
.debug_frame 208 0
.debug_str 343 0
.debug_loc 106 0
Total 5398



-------- end --------


D:\Temp\LCMeter>avr-size 2313LCmeter.elf
text data bss dec hex filename
2158 54 12 2224 8b0 2313LCmeter.elf

I jak widać w powyższej linii, wychodzi mi, że program zajmuje ~2,2kB.

Dzięki. Czyli nie nowa wersja AVR-gcc. Mój błąd. Ponieważ zmieniałem kod, wygenerowałem makefile klikając w Avr-studio. Potem, gdy mi pokazało rozmiar ponad 4 kB, wgrałem źródło autora, ale używałem swojego makefile.
Teraz prze weekend spokojnie porównam oba makefile i znajdę (mam nadzieję przyczynę.
Jeszcze raz dziekuję i pozdrawiam,
Andrzej

Goto page Previous  1, 2

elektroda NewsGroups Forum Index - Elektronika Polska - Jak zmiany w win-avr-gcc wpływają na rozmiar generowanego kodu AVR?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map