keil 51 to avr gcc



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: ynio <grave_at_nospam_poczta.onet.pl>
Subject: keil 51 to avr gcc
Date: Sat, 04 Feb 2006 19:32:11 +0100


Witam
Mam pewien problem. jakis czas temu napisalem program do 89s52 w keil C.
Program zajmowal ok 6kB (bin). Teraz postanowilem to samo przepisac na
AVR atmege8. Jeszcze nie skonczylem a program juz zajmuje 6.5kB.
Kompilacja ustawiona jest na najlepsza optymalizacje (-Os). Czemu tak
jest ? Podejrzewam ze avr gcc laduje male funkcje jako inline, co
zwieksza rozmiar ale przyspiesza. Mi natomiast zalezy na jak mniejszej
wielkosc. Macie jakies porady ?
dzieki
ynio

Poprzedni Następny
Wiadomość
Spis treści
From: "swinio" <swiniaczek_at_nospam_buziaczek.pl>
Subject: Re: keil 51 to avr gcc
Date: Sat, 4 Feb 2006 19:54:56 +0100



Witam
Mam pewien problem. jakis czas temu napisalem program do 89s52 w keil C.
Program zajmowal ok 6kB (bin). Teraz postanowilem to samo przepisac na AVR
atmege8. Jeszcze nie skonczylem a program juz zajmuje 6.5kB. Kompilacja
ustawiona jest na najlepsza optymalizacje (-Os). Czemu tak jest ?
Podejrzewam ze avr gcc laduje male funkcje jako inline, co zwieksza
rozmiar ale przyspiesza. Mi natomiast zalezy na jak mniejszej wielkosc.
Macie jakies porady ?
dzieki


Cześć:
Może trzeba ATmega16 - ma 8k-słów pamięci flash, a ATmega8 4K-słów. Chociaż
zrobiłem na ATmega8 sterownik który ma parę funkcji:
obsługa klawiaturki, wyświetlacza LCD, pomiar temperatury, termostat, timer,
nastawy, generowanie częstotliwości, modulacja częstotliwości. I to zajmuje
ok. 2,5K-słów.
Spróbuj zmienić komilator na IAR-a lub CodeVision. IAR chyba jest
ograniczony czasowo, a ten drugi rozmiaroem kodu.
pozdro: swinio



Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: keil 51 to avr gcc
Date: Sat, 04 Feb 2006 22:59:51 +0100


ynio przemówił ludzkim głosem:

Kompilacja ustawiona jest na najlepsza optymalizacje (-Os). Czemu tak
jest ?

Powodów większego rozmiaru może być kilka:
1. każdy rozkaz w avr to minimum 2 bajty, w 51 minimum to jeden bajt.
2. keil potrafi automatycznie zrobić faktoryzację kodu, gcc nie.
3. w keilu można wyłączyć promocję do int, gcc jej z kolei nadużywa
4. gcc kiepsko radzi sobie z długimi liczbami (np 32-bitowymi)

Podejrzewam ze avr gcc laduje male funkcje jako inline, co
zwieksza rozmiar ale przyspiesza.

Raczej nie, chyba że sam zadeklarujesz funkcję jako inline, albo static.

Mi natomiast zalezy na jak mniejszej
wielkosc. Macie jakies porady ?

(skrócenie inta do 8 bitów), dzięki temu oszczędzisz trochę bajtów na
zbędnych promocjach do 16-bitowego inta.
krótkich
chyba nie ma co wspominać
używaj raczej unii niż sumy logicznej/arytmetycznej.
odwołanie do konkretnego bajtu liczby przez wskaźnik.
lepiej napisać własne krótkie funkcje do wyrzucania znaków, konwersji
liczb na ascii.....

Przy okazji, na grupie poświęconej avr-gcc jakiś czas temu (listopad
zeszłego roku) była mowa o możliwości optymalizacji kodu na etapie
linkowania (usuwanie nieużywanych funkcji, używanie skoków krótkich
zamiast długich itp.). Niestety w najnowszym winavr nic nie ma na ten
temat, więc wychodzi na to, że należałoby samemu nałożyć łaty.


Poprzedni Następny
Wiadomość
Spis treści
From: AK <arkkar_at_nospam_gazeta.pl>
Subject: Re: keil 51 to avr gcc
Date: Sun, 05 Feb 2006 15:23:58 +0100


ynio napisał(a):
Witam
Mam pewien problem. jakis czas temu napisalem program do 89s52 w keil C.
Program zajmowal ok 6kB (bin). Teraz postanowilem to samo przepisac na
AVR atmege8. Jeszcze nie skonczylem a program juz zajmuje 6.5kB.
Kompilacja ustawiona jest na najlepsza optymalizacje (-Os). Czemu tak
Sprobuj ustawic optymalizacje na -O2 - nie wiem jak w przypadku avr, ale
dla arm-a O2 daje mniejszy kod niz -Os.
Ewentualnie zmien procesor na ATmega168 - jest kompatybilny z ATmega8
pinowo, takze nie trzeba zmieniac plytki.

Pozdr
AK