RTV forum PL | NewsGroups PL

Jak skonfigurować AVRgcc, aby uzyskać dane o rozmiarze i liczbie cykli funkcji obsługi przerwań?

[AVRgcc] Opcje kompilatora

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skonfigurować AVRgcc, aby uzyskać dane o rozmiarze i liczbie cykli funkcji obsługi przerwań?

roxy
Guest

Wed Nov 12, 2008 7:50 pm   



Czy sa jakies opcje kompilatora ktorych ustawienie generowaly by mi
informacje o rozmiarze i liczbie cykli konkretnej funkcji? Dokladnie chodzi
mi o funkcje obsl. przerwanin.

roxy
Guest

Wed Nov 12, 2008 8:22 pm   



Quote:
Tak, są. To znaczy pośrednio. Samemu trzeba sobie będzie rozmiar
przeliczyć i policzyć cykle.

--


No to "na piechote" dużo roboty. Czyli nie ma takich opcji Sad

Artur M. Piwko
Guest

Wed Nov 12, 2008 8:46 pm   



In the darkest hour on Wed, 12 Nov 2008 19:50:16 +0100,
roxy <kicak@o2.pl> screamed:
Quote:
Czy sa jakies opcje kompilatora ktorych ustawienie generowaly by mi
informacje o rozmiarze i liczbie cykli konkretnej funkcji? Dokladnie chodzi
mi o funkcje obsl. przerwanin.

Tak, są. To znaczy pośrednio. Samemu trzeba sobie będzie rozmiar
przeliczyć i policzyć cykle.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:232B ]
[ 20:04:53 user up 11889 days, 7:59, 1 user, load average: 0.24, 0.18, 0.99 ]

Money is just the poor man's credit card. -- Marshall McLuhan

Artur M. Piwko
Guest

Wed Nov 12, 2008 8:46 pm   



In the darkest hour on Wed, 12 Nov 2008 19:50:16 +0100,
roxy <kicak@o2.pl> screamed:
Quote:
Czy sa jakies opcje kompilatora ktorych ustawienie generowaly by mi
informacje o rozmiarze i liczbie cykli konkretnej funkcji? Dokladnie chodzi
mi o funkcje obsl. przerwanin.

Tak, są.

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:232B ]
[ 20:04:53 user up 11889 days, 7:59, 1 user, load average: 0.24, 0.18, 0.99 ]

Money is just the poor man's credit card. -- Marshall McLuhan

Dykus
Guest

Wed Nov 12, 2008 8:49 pm   



Witam,

Dnia 12.11.08 (środa), 'Artur M. Piwko' napisał(a):

Quote:
Tak, są. To znaczy pośrednio. Samemu trzeba sobie będzie rozmiar
przeliczyć i policzyć cykle.

Można jeszcze skorzystać z dobrodziejstw symulatora... :)

Poza tym, nietrudno sobie wyobrazić taką sytuację, w której kompilator nie
byłby w stanie policzyć ilości cykli... :)


--
Pozdrawiam,
Dykus.

Artur M. Piwko
Guest

Wed Nov 12, 2008 9:46 pm   



In the darkest hour on Wed, 12 Nov 2008 20:49:12 +0100,
Dykus <dykus.grupy@spam.wp.pl> screamed:
Quote:
Tak, są. To znaczy pośrednio. Samemu trzeba sobie będzie rozmiar
przeliczyć i policzyć cykle.

Można jeszcze skorzystać z dobrodziejstw symulatora... Smile

Zakładając, że umieścimy jedną funkcję w jednym pliku to rozmiar funkcji
sprawdzi się całkiem prosto.

Quote:
Poza tym, nietrudno sobie wyobrazić taką sytuację, w której kompilator nie
byłby w stanie policzyć ilości cykli... Smile

W przypadku funkcji wywoływanej w przerwaniach raczej myślałem o czymś
liniowym... ;)

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:239B ]
[ 20:53:40 user up 11889 days, 8:48, 1 user, load average: 0.24, 0.18, 0.99 ]

The only way you can beat the lawyers is to die with nothing. -- Will Rogers

T.M.F.
Guest

Wed Nov 12, 2008 10:57 pm   



roxy wrote:
Quote:
Czy sa jakies opcje kompilatora ktorych ustawienie generowaly by mi
informacje o rozmiarze i liczbie cykli konkretnej funkcji? Dokladnie chodzi
mi o funkcje obsl. przerwanin.

Jesli to tak krytyczna czasowo funkcja, ze musisz znac dokladnie przez
ile cykli sie wykonuje to napisz ja w assemblerze i wlacz do programu w C.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.

tomny
Guest

Thu Nov 13, 2008 4:57 pm   



Quote:
Zakładając, że umieścimy jedną funkcję w jednym pliku to rozmiar funkcji
sprawdzi się całkiem prosto.

Poza tym, nietrudno sobie wyobrazić taką sytuację, w której kompilator
nie
byłby w stanie policzyć ilości cykli... :)

W przypadku funkcji wywoływanej w przerwaniach raczej myślałem o czymś
liniowym... Wink

Dla AVRów chyba jest to możliwe - tak każda instrukcja trwa określoną ilość
cykli. Ale przy ARMach sprawa się komplikuje. W ARM9 NOP może trwać jeden
cykl maszynowy, a może zero jeżeli na przykład będzie za poleceniem LDR.
Jest to związane z tzw. interlockami:
http://www.arm.com/pdfs/comparison-arm7-arm9-v1.pdf
Nie pamiętam jak to jest przy ARM7, ale ARM9 może mieć pamieć cache programu
i danych TCMs, tak więc obliczenie czasu wykonywania nawet prostej funkcji
może być niemożliwe, bo nigdy nie wiesz co on do tej pamięci załaduje.

pozdrawiam
tn

Adam Dybkowski
Guest

Thu Nov 13, 2008 11:04 pm   



tomny pisze:

Quote:
Dla AVRów chyba jest to możliwe - tak każda instrukcja trwa określoną ilość
cykli. Ale przy ARMach sprawa się komplikuje. W ARM9 NOP może trwać jeden

[ciach]

Patrz temat wątku.

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

Adam Dybkowski
Guest

Thu Nov 13, 2008 11:07 pm   



roxy pisze:

Quote:
Czy sa jakies opcje kompilatora ktorych ustawienie generowaly by mi
informacje o rozmiarze i liczbie cykli konkretnej funkcji? Dokladnie chodzi
mi o funkcje obsl. przerwanin.

Rozmiar każdej funkcji można łatwo sprawdzić w pliku .map - wystarczy
odjąć adres żądanej funkcji od adresu kolejnej funkcji w sekcji .text.

Liczba cykli przecież zależy od spełnienia warunków wyznaczanych dopiero
w czasie wykonania - np. skoki warunkowe, pętle itd. Użyj AVRStudio w
trybie symulacji.

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

Adam Dybkowski
Guest

Thu Nov 13, 2008 11:11 pm   



T.M.F. pisze:

Quote:
Czy sa jakies opcje kompilatora ktorych ustawienie generowaly by mi
informacje o rozmiarze i liczbie cykli konkretnej funkcji? Dokladnie
chodzi mi o funkcje obsl. przerwanin.

Jesli to tak krytyczna czasowo funkcja, ze musisz znac dokladnie przez
ile cykli sie wykonuje to napisz ja w assemblerze i wlacz do programu w C.

Z asemblerem to ściema. Bardzo często da się funkcję napisać w czystym C
dosyć optymalnie i przy tym niewiele gorzej niż w 100% asm. A ewentualne
przenosiny w przyszłości na inny procesor pozwolą docenić implementację w C.

BTW: W firmie wiele kawałków kodu przenosiliśmy już w kierunku DSP->ARM
lub DSP->AVR. Gdyby nie były w C, roboty byłoby 10x więcej. A i tak
pisząc coś od razu warto myśleć, na jakich procesorach ma chodzić (na
Texasowe DSP'ki 16-bitowe pisze się dość specyficznie - wiedząc, że nie
ma mniejszych kawałków danych niż 16 bitów i nawet sizeof(int) wynosi 1).

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

T.M.F.
Guest

Fri Nov 14, 2008 9:47 am   



Quote:
Jesli to tak krytyczna czasowo funkcja, ze musisz znac dokladnie przez
ile cykli sie wykonuje to napisz ja w assemblerze i wlacz do programu
w C.

Z asemblerem to ściema. Bardzo często da się funkcję napisać w czystym C
dosyć optymalnie i przy tym niewiele gorzej niż w 100% asm. A ewentualne
przenosiny w przyszłości na inny procesor pozwolą docenić implementację
w C.

Masz racje. Ale sugerowalem sie tym, ze jesli ktos potrzebuje wiedziec
ile dokladnie cykli zajmuje procedura to jest to jakas krytyczna czasowo
sekcja. W tym momencie trudno mowic o przenosnosci kodu, bo po
skompilowaniu na inny procek wszystkie timingi szlag trafia. Druga
sprawa to fakt, ze kompilator C praktycznie nie daje kontroli nad czasem
wykonania procedury - rozne optymalizacje, rozne kompilatory generuja
rozny kod. Wiec tym bardziej pytanie o cykle nie ma sensu.

--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz do projektu.

Adam Dybkowski
Guest

Sun Nov 16, 2008 10:57 pm   



T.M.F. pisze:

Quote:
Z asemblerem to ściema. Bardzo często da się funkcję napisać w czystym
C dosyć optymalnie i przy tym niewiele gorzej niż w 100% asm. A
ewentualne przenosiny w przyszłości na inny procesor pozwolą docenić
implementację w C.

Masz racje. Ale sugerowalem sie tym, ze jesli ktos potrzebuje wiedziec
ile dokladnie cykli zajmuje procedura to jest to jakas krytyczna czasowo
sekcja. W tym momencie trudno mowic o przenosnosci kodu, bo po
skompilowaniu na inny procek wszystkie timingi szlag trafia. Druga
sprawa to fakt, ze kompilator C praktycznie nie daje kontroli nad czasem
wykonania procedury - rozne optymalizacje, rozne kompilatory generuja
rozny kod. Wiec tym bardziej pytanie o cykle nie ma sensu.

To prawda. Dlatego po sprawdzeniu, co z programu napisanego w C wyszło w
asemblerze można albo skorzystać z symulatora (AVR Studio), albo z listy
rozkazów i ich czasów wykonania. Akurat w przypadku AVRów jest to proste
i nie ma zależności czasu wykonania instrukcji od stopnia napełnienia
pipeline'a, sposobu działania i bieżącej zawartości pamięci cache, czasu
dostępu do zewn. pamięci SDRAM, rodzaju pamięci z kodem programu i
danymi czy innych czynników skutecznie utrudniających takie ręczne
obliczenia w przypadku większych procesorów (ARM, x86, PowerPC).

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

elektroda NewsGroups Forum Index - Elektronika Polska - Jak skonfigurować AVRgcc, aby uzyskać dane o rozmiarze i liczbie cykli funkcji obsługi przerwań?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map