Rozmiar kodu AVR-GCC kontra 51-KEIL



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Pawel Sklarow <p_sklarow_at_nospam_poczta.onet.pl>
Subject: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Thu, 10 Jul 2003 12:41:59 +0200


Witam wszystkich.
Mam pytanie do praktyków tworzących oprogramowanie na
AVR'a (GCC) i '51 (KEIL).
Jak sie zgrubsza przekłada rozmiar kodu wynikowego
programu napisanego w C na AVR'a w porownaniu do '51?

Na przykład mam program w C, który kompiluje się na 96kB (bankowany)
w '51, jaki będzie rozmiar kodu wynikowego tego samego
programu skompilowanego na AVR'a?

Mam obawy przed zastosowaniem AVR'a w projekcie -- czy sie zmieszczę
w ATMEGA128.

Na '51 piszę w Keil'u, na AVR'a chciałbym użyć GCC

--
pozdrawiam, Paweł Sklarow


========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.astercity.net!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows_at_nospam_amwaw.edu.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 01:22:55 +0200


Pawel Sklarow wrote:

Jak sie zgrubsza przekłada rozmiar kodu wynikowego
programu napisanego w C na AVR'a w porownaniu do '51?

Jest wiele podstaw aby sądzić, iż binaria AVR'a wyjdą mniejsze. Jeżeli
masz w programie dużo obliczeń to '51 ciągle wszystko musi przepychać
przez akumulator (załaduj zmienną, dodaj liczbę, zapisz wynik) a AVR
może wiele operacji wykonywać na rejestrach, ściągając je z pamięci dużo
rzadziej. Do tego dochodzi przekazywanie argumentów funkcji - gcc dla
AVR może przekazać do 8 bajtów w rejestrach. Dla porównania '51
argumenty funkcji musi najpierw wepchnąć na stos, a stamtąd funkcja musi
je pobrać. I pomimo że zwykły NOP zajmuje w AVR'ach 2x więcej miejsca w
kodzie niż w '51 to i tak szala przechyla się na korzyść AVRa.

BTW: Nie pisząc już nic o wydajności - takiego NOP'a AVR wykonuje w
czasie 12x krótszym niż '51 o tym samym zegarze. :-)

--

Adam Dybkowski
adybkows_at_nospam_amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows


========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "tomzor" <tzurek_at_nospam_poczta.onet.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 06:59:13 +0200





Jest wiele podstaw aby sądzić, iż binaria AVR'a wyjdą mniejsze.

Ja mam inne zdanie na ten temat
przerobilem program napisany na 51 na AVR z zastosowaniem WINAVR, na 51 w
keilu wynikowy byl wielkości ok 15k
a wynikowy zrobiony dla AVR jest już ponad 20k. Być może żle ustawiam jakąś
optymalizacje itp (ale i tak to niewiele daje), ale (chyba) główny powód to
może jeszcze kiepskie biblioteko do PRINTF z zastosowanie obliczeń
zmiennoprzecinkowych



========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 07:40:06 +0200


Adam Dybkowski napisal(a):

Jak sie zgrubsza przekłada rozmiar kodu wynikowego
programu napisanego w C na AVR'a w porownaniu do '51?

Jest wiele podstaw aby sądzić, iż binaria AVR'a wyjdą mniejsze.

Niekoniecznie. Zauwaz, ze 8051 wiele instrukcji mialo dlugosc 1 bajt,
a tu najkrotsze instrukcje maja dlugosc 2 bajtow. Najdluzsze pod 51 to
3 bajty, a pod AVR 4 bajty. Tak czy siak ja zrobilem pewne porownanie,
ale tylko pod Codevision i w dodatku program jest, niestety, bardzo
krotki. Rzeczony program napisany pod Keil mial 932 bajty, a po
przerobieniu na Codevision 1400 bajtow. Program wykorzystywal I2C i
EEPROM. Aha,do obslugi I2C wykorzystalem gotowce z Codevision. Pod 51
mialem wlasne procedury.

--
Pozdrowienia, Marcin E. Hamerla

"Płoń, płoń, płoń parlamencie, spali Cię ogień na historii zakręcie."

=======

Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 08:44:36 +0200


Użytkownik "Marcin E. Hamerla" <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
napisał w wiadomości news:ljhsgvg5138ssqrfl4emeq2dvfe38jkqot_at_nospam_4ax.com
Tak czy siak ja zrobilem pewne porownanie,
ale tylko pod Codevision i w dodatku program jest, niestety, bardzo
krotki. Rzeczony program napisany pod Keil mial 932 bajty, a po
przerobieniu na Codevision 1400 bajtow.

Moje doświadczenie z AVR jest niewielkie. Ot.. parę kawałków kodu na 2313.
Ale subiektywnie stwierdzam, że w 2313 znacznie częściej oglądałem się na
znikający obszar pamięci programu. (CV i gcc)


--
Marek Dzwonnik mdz_at_nospam_message.pl
GG: #2061027 (zwykle jako 'dostępny-niewidoczny')


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 08:59:20 +0200


Marek Dzwonnik napisal(a):

Tak czy siak ja zrobilem pewne porownanie,
ale tylko pod Codevision i w dodatku program jest, niestety, bardzo
krotki. Rzeczony program napisany pod Keil mial 932 bajty, a po
przerobieniu na Codevision 1400 bajtow.

Moje doświadczenie z AVR jest niewielkie. Ot.. parę kawałków kodu na 2313.
Ale subiektywnie stwierdzam, że w 2313 znacznie częściej oglądałem się na
znikający obszar pamięci programu. (CV i gcc)

Jeszcze dopisze, bo poprzednio zapomnialem. W porownaniu do kodu
generowanego przez Keila kod z Codevision nie wyglada zbyt ciekawie.
Znaczy, kod generowany Keila jest elegancki i mozna z latwoscia
przesledzic bieg programu. Nawet jesli jakas instrukcja jest zbedna,
to wiadomo dlaczego ona tam jest. W przypadku CV jest inaczej - logika
dzialania kompilatora jest taka, ze program sledzic jest trudno, a
zbednych instrukcji jest sporo. No i dziwne wywolania procedur o
ramptem dwoch liniach kodu....

Reasumujac powiedzialym, ze jesli nawet kod dla AVR moglby byc taki
sam czy krotszy, to jakosc narzedzi moze byc znacznie nizsza niz
dopracowany kompilator Keila i dlatego kod wynikowy bedzie dluzszy.

--
Pozdrowienia, Marcin E. Hamerla

"Płoń, płoń, płoń parlamencie, spali Cię ogień na historii zakręcie."

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Pawel Sklarow <p_sklarow_at_nospam_poczta.onet.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 09:31:52 +0200


Adam Dybkowski wrote:
>
AVR może przekazać do 8 bajtów w rejestrach. Dla porównania '51
argumenty funkcji musi najpierw wepchnąć na stos, a stamtąd funkcja musi
Hmmm... Właściwie wszystkie kompilatory C na '51 których używałem
przekazywaly argumenty funkcji przez rejestry...

--
pozdrawiam, Paweł Sklarow


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 09:55:25 +0200


Pawel Sklarow napisal(a):

Adam Dybkowski wrote:

AVR może przekazać do 8 bajtów w rejestrach. Dla porównania '51
argumenty funkcji musi najpierw wepchnąć na stos, a stamtąd funkcja musi
Hmmm... Właściwie wszystkie kompilatory C na '51 których używałem
przekazywaly argumenty funkcji przez rejestry...

Wszystkie parametry? I we wszystkich trybach? ;--)

Ale oczywiscie masz racje - uwaga kolegi Dybkowskiego jest zupelnie
bez sensu, na co nie zwrocilem w ogole uwagi. To wlasnie AVR jest
predystynowany do przekazywania parametrow przez stos, a nie przez
rejestry. Motanie z przekazywaniem parametrow w 8051 jest spowodowane
niedostosowaniem kostrukcji tego procesora do jezyka C.

--
Pozdrowienia, Marcin E. Hamerla

"Płoń, płoń, płoń parlamencie, spali Cię ogień na historii zakręcie."

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Pawel Sklarow <p_sklarow_at_nospam_poczta.onet.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 10:05:32 +0200


Marcin E. Hamerla wrote:
Pawel Sklarow napisal(a):


Adam Dybkowski wrote:

AVR może przekazać do 8 bajtów w rejestrach. Dla porównania '51
argumenty funkcji musi najpierw wepchnąć na stos, a stamtąd funkcja musi

Hmmm... Właściwie wszystkie kompilatory C na '51 których używałem
przekazywaly argumenty funkcji przez rejestry...


Wszystkie parametry? I we wszystkich trybach? ;--)
Może wypowiem się na temat Keil'a - bo go najlepiej znam.

Przy funkcjach z parametrami, które moga sie zmieszczą w
rejestrach standartowo keil przekazuje je właśnie przez rejestry.
Jeśli parametry nie mieszczą się w rejestrach - przekazywane
są przez pamięć, wygląda to mniej więcej tak, jakby przekazywać
parametr przez zmienną globalną (kompilator obsługuje też
nakładkowanie tych zmiennych).
Jeśli włączymy parametr NOREGPARMS parametry nigdy nie będą przekazywane
przez rejetry - tylko przez pamięć.
Jeśli może zajść rekurencja jest na to specjalny switch kompilatora.



--
pozdrawiam, Paweł Sklarow


========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 10:12:10 +0200


Pawel Sklarow napisal(a):

Hmmm... Właściwie wszystkie kompilatory C na '51 których używałem
przekazywaly argumenty funkcji przez rejestry...

Wszystkie parametry? I we wszystkich trybach? ;--)
Może wypowiem się na temat Keil'a - bo go najlepiej znam.

Zauwaz, ze to byly pytania retoryczne - na koncu mojej wypowiedzi byl
smajlej.

Przy funkcjach z parametrami, które moga sie zmieszczą w
rejestrach standartowo keil przekazuje je właśnie przez rejestry.
Jeśli parametry nie mieszczą się w rejestrach - przekazywane
są przez pamięć, wygląda to mniej więcej tak, jakby przekazywać
parametr przez zmienną globalną (kompilator obsługuje też
nakładkowanie tych zmiennych).
Jeśli włączymy parametr NOREGPARMS parametry nigdy nie będą przekazywane
przez rejetry - tylko przez pamięć.
Jeśli może zajść rekurencja jest na to specjalny switch kompilatora.

Dodam, ze w IAR w jednym z trbow (LARGE chyba czy jakos tak) procesor
tworzyl stos softwarowy w XDATA i przez niego wlasnie przekazywal
parametry. Dzieki temu mozna bylo uruchamiac funkcje reentrant.

--
Pozdrowienia, Marcin E. Hamerla

"Płoń, płoń, płoń parlamencie, spali Cię ogień na historii zakręcie."

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Pawel Sklarow <p_sklarow_at_nospam_poczta.onet.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 10:44:28 +0200


Marcin E. Hamerla wrote:
(...)
Dodam, ze w IAR w jednym z trbow (LARGE chyba czy jakos tak) procesor
tworzyl stos softwarowy w XDATA i przez niego wlasnie przekazywal
parametry. Dzieki temu mozna bylo uruchamiac funkcje reentrant.

Właśnie dlatego obraziłem się na '51 - proste rzeczy wymagają
młócenia kodem. Wiem, że '51 nie był projektowany do języków
wyższego poziomu, ale...
Żeby chociaż miał adresowanie pośrednie z przesunięciem...

--
pozdrawiam, Paweł Sklarow


========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 17:35:23 +0200



Pawel Sklarow wrote:

Hmmm... Właściwie wszystkie kompilatory C na '51 których używałem
przekazywaly argumenty funkcji przez rejestry...

Ale chyba dopiero jak mu pozwolisz jakas dyrektywa __fastcall,
regparm, czy jak to sie nazywa w danym kompilatorze. Bez tego
powinien przekazywac w konwencji cdecl, czyli przez stos, sciaga
wolajacy.

Pozdrawiam
Piotr Wyderski


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 17:50:07 +0200


Piotr Wyderski napisal(a):

Hmmm... Właściwie wszystkie kompilatory C na '51 których używałem
przekazywaly argumenty funkcji przez rejestry...

Ale chyba dopiero jak mu pozwolisz jakas dyrektywa __fastcall,
regparm, czy jak to sie nazywa w danym kompilatorze. Bez tego
powinien przekazywac w konwencji cdecl, czyli przez stos, sciaga
wolajacy.

Przez stos? Na 8051???????

--
Pozdrowienia, Marcin E. Hamerla

"Płoń, płoń, płoń parlamencie, spali Cię ogień na historii zakręcie."

========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 18:26:09 +0200


Marcin E. Hamerla wrote:

Przez stos? Na 8051???????

Scislej, przez rekord aktywacji umieszczony w pamieci operacyjnej.
A ze sie przez stos nie da, do juz standardu nie obchodzi. :-)

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "jerry1111" <No_this_fucking_spam_jerry1111_at_nospam_wp.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Sat, 12 Jul 2003 10:43:06 +0200


Ale chyba dopiero jak mu pozwolisz jakas dyrektywa __fastcall,

To jest roznie na rozne procki - generalnie sposob przekazywania parametrow
nie jest AFAIK objety standardem, tylko implemenctacja na dany procesor.
Np: Kompilator IAR-C na Toshibe (bardzo mocno zgodny z ANSI-C) przekazuje
pierwszy parametr w XWA, a reszte na stosie.
Kompilator gcc dla Niosa przekazuje pierwsze 16 parametrow w rejestrach.


--
jerry

"The day Microsoft makes something that doesn't suck is probably
the day they start making vacuum cleaners." - Ernst Jan Plugge


========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "jp" <jacek.pozniak_at_nospam_klienci.pkobp.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Fri, 11 Jul 2003 09:05:16 +0200



Użytkownik "Pawel Sklarow" <p_sklarow_at_nospam_poczta.onet.pl> napisał w wiadomości
news:bejg4u$glb$1_at_nospam_atlantis.news.tpi.pl...
Witam wszystkich.
Mam pytanie do praktyków tworzących oprogramowanie na
AVR'a (GCC) i '51 (KEIL).

Witam
Robiłem dość dużo w Keil'51
Muszę przyznać, że jest bardzo dobry.
Kiedyś coś próbowałem na kompilatorze opartym na gcc; jakiś sdcc czy coś
takiego.
Optymalizacja nie była tak dobra jak w Keil; chyba, że jest coś o czym nie
wiedziałem
Pozdrawiam
Jacek Poźniak


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!mimuw.edu.pl!news.mimuw.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Pawel Sklarow <p_sklarow_at_nospam_poczta.onet.pl>
Subject: Re: Rozmiar kodu AVR-GCC kontra 51-KEIL
Date: Mon, 14 Jul 2003 10:53:41 +0200


Zrobiłem teścik - kod na '51 zajmujący ~50kB
po skompilowaniu na AVR'a zajął niecałe 30kB.
Jako, że to jest mój kod docelowy - pięknie użyję AVR'a,
czego się troszkę bałem.
Dziękuje wszystkim za zainteresowanie.

--
pozdrawiam, Paweł Sklarow


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!news.ipartners.pl!not-for-mai