winavr problemik

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Mam duĹźo "swich" -Ăłw lub
if
elsif
elsif
..

tak po kilkadziesiąt.

Co tu zrobić żeby winavr używał indirect jumpów zamiast zamieniał swich na
if wlsif.

To bez sensu żeby robić
cpi stała
cpi stał

i tak 60 razy.

Mam małe procedurki, a indirecty by mi przyspieszyły kod.


Re: winavr problemik
Quoted text here. Click to load it

Tablice skokF3%w sB1% tworzone chyba tylko z blokF3%w switch.
Do tego wartoB6%ci przy case muszB1% speB3%niaE6% odpowiednie warunki, tzn.
musi byE6% ich dostatecznie duBF%o i muszB1% byE6% uB3%oBF%one po kolei (wa=
rtoB6%ci
jako zbiF3%r, w kodzie juBF% kolejnoB6%E6 wystEA%powania jest dowolna).
Jest gdzieB6% do tego jakaB6% reguB3%a, ale nie jestem w stanie jej znale=
BC%E6.
O ile pamiEA%tam (ale to mogB3%o byE6% akurat w innym kompilatorze) to
dopuszczalne sB1% niewielkie dziury w wartoB6%ciach, byB3%a na to jakaB6%
matematyczna formuB3%ka, typu iloB6%E6 wartoB6%ci w jednym ciB1%gu / szero=
koB6%E6
zakresu > jakaB6% staB3%a, do tego jeszcze musiaB3%a byE6% odpowiednio du=
BF%a
iloB6%E6 przypadkF3%w, ale to akurat u Ciebie nie jest problemem, to byB3%
o
raczej w okolicy 5. JeBF%eli siEA% zgadzaB3%o to switch byB3% zamieniany na
tablicEA% skokF3%w.
CoB6% znalazB3%em, moBF%e siEA% przyda, nie za bardzo mam czas BF%eby
przeczytaE6%: http://ivoras.sharanet.org/papers/switch-complexity.pdf

Re: winavr problemik


Quoted text here. Click to load it

Dzięki za odpowiedź :-)

Wyczytałem, że muszę używać -O3 , a ja używam -O2 bo mi sie przestał mieścić
kod w procku :-)
W jaki sposób wymusić na winavr żeby używał -O3 dla danego fragmentu kodu
lub dla danej funkcji?

Zaraz to poćwiczę.


Re: winavr problemik
newxmega pisze:

Quoted text here. Click to load it
wlsif.

Jak ilość kodu w blokach warunkowych nie jest za mała, to możesz sobie
zrobić ręcznie tablicę z adresami funkcji.

Quoted text here. Click to load it

a próbowałeś -Os?

Quoted text here. Click to load it

dodaj atrybut optimize.

Re: winavr problemik


Quoted text here. Click to load it

ale jaki jest syntax ?

__attribute__((optimize("O3")))  nie kompiluje się.

char dupa(char) __attribute__((optimize("O3"))) {

}

?


Re: winavr problemik

No dobra już wiem :-)

__attribute__ ma być przed funkcją, a nie za :-)
No teraz pięknie :-) działa i kompiluje jak należy :-)




Re: winavr problemik


O zobacz.

18:      switch(SELECTXY)
+0000184A:   3087        CPI       R24,0x07       Compare with immediate
+0000184B:   F1C1        BREQ      PC+0x39        Branch if equal
+0000184C:   3088        CPI       R24,0x08       Compare with immediate
+0000184D:   F470        BRCC      PC+0x0F        Branch if carry cleared
+0000184E:   3083        CPI       R24,0x03       Compare with immediate
+0000184F:   F141        BREQ      PC+0x29        Branch if equal
+00001850:   3084        CPI       R24,0x04       Compare with immediate
+00001851:   F428        BRCC      PC+0x06        Branch if carry cleared
+00001852:   3081        CPI       R24,0x01       Compare with immediate
+00001853:   F0F1        BREQ      PC+0x1F        Branch if equal
+00001854:   3082        CPI       R24,0x02       Compare with immediate
+00001855:   F4F8        BRCC      PC+0x20        Branch if carry cleared
+00001856:   C018        RJMP      PC+0x0019      Relative jump
+00001857:   3085        CPI       R24,0x05       Compare with immediate
+00001858:   F129        BREQ      PC+0x26        Branch if equal
+00001859:   3086        CPI       R24,0x06       Compare with immediate
+0000185A:   F530        BRCC      PC+0x27        Branch if carry cleared
+0000185B:   C01F        RJMP      PC+0x0020      Relative jump
+0000185C:   308B        CPI       R24,0x0B       Compare with immediate
+0000185D:   F1B9        BREQ      PC+0x38        Branch if equal
+0000185E:   308C        CPI       R24,0x0C       Compare with immediate
+0000185F:   F428        BRCC      PC+0x06        Branch if carry cleared
+00001860:   3089        CPI       R24,0x09       Compare with immediate
+00001861:   F141        BREQ      PC+0x29        Branch if equal
+00001862:   308A        CPI       R24,0x0A       Compare with immediate
+00001863:   F560        BRCC      PC+0x2D        Branch if carry cleared
+00001864:   C022        RJMP      PC+0x0023      Relative jump
+00001865:   308D        CPI       R24,0x0D       Compare with immediate
+00001866:   F1C9        BREQ      PC+0x3A        Branch if equal
+00001867:   308D        CPI       R24,0x0D       Compare with immediate
+00001868:   F1A0        BRCS      PC+0x35        Branch if carry set
+00001869:   308E        CPI       R24,0x0E       Compare with immediate
+0000186A:   F1D1        BREQ      PC+0x3B        Branch if equal
+0000186B:   308F        CPI       R24,0x0F       Compare with immediate
+0000186C:   F1E9        BREQ      PC+0x3E        Branch if equal

i tak dalej bez końca.


Site Timeline