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

Mar 23, 2011 13 Replies

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

W dniu 2011-03-23 14:26, Andrzej pisze:

pewnie ten sam kod napisany poprostu w assemblerze zajalby kilkaset bajtow.

W dniu 2011-03-23 14:26 Andrzej napisał(a):

Możliwe i właśnie tak jest. Niestety dodanie wsparcia nowych/dużych procków spowodowało pogorszenie kodu wynikowego nawet w małych prockach. Wróć do starego gcc i już.

Użytkownik "Andrzej" snipped-for-privacy@op.pl napisał w wiadomości news:imcsdc$ujm$ snipped-for-privacy@news.onet.pl...

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

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.

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

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:

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

Użytkownik "Robbo" snipped-for-privacy@mmm.com napisał w wiadomości news:4d8b2170$0$2506$ snipped-for-privacy@news.neostrada.pl...

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

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.

On 2011-03-24 22:23, Andrzej wrote: [.....]

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.

U¿ytkownik "shg" snipped-for-privacy@gmail.com napisa³ w wiadomo¶ci news: snipped-for-privacy@d16g2000yqd.googlegroups.com... [ciach]

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.

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.

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required