WinAVR optymalizuje kod wynikowy za pomoca przelacznika -00,01,02,0s jak zrobiæ aby dany kawa³ek programu ¼ród³owego (w C) nie by³ optymalizowany np (to tylko przyk³ad)
optimize The optimize attribute is used to specify that a function is to be compiled with different optimization options than specified on the command line. Arguments can either be numbers or strings. Numbers are assumed to be an optimization level. Strings that begin with O are assumed to be an optimization option, while other options are assumed to be used with a -f prefix. You can also use the `#pragma GCC optimize' pragma to set the optimization options that affect more than one function. See Function Specific Option Pragmas, for details about the `#pragma GCC optimize' pragma.
Ja bym zaczął od znalezienia błędu w programie.
T
TomZor
Dziêki za informacje
Program dziala poprawnie przy optymalizacji -00,01 dla pozosta³ych co¶ wycina albo robi po swojemu, prawdopodobnie kompilator wycina mi delay'e,
Ale dziêki
Tomek
Postaram siê "......ESET NOD32 Antivirus....." co¶ z tym zrobiæ
U¿ytkownik "Zbych" snipped-for-privacy@onet.pl napisa³ w wiadomo¶ci news:4c18bbc8$0$17086$ snipped-for-privacy@news.neostrada.pl...
__________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow 5193 (20100613) __________
Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.
formatting link
lub
formatting link
Z
Zbych
TomZor pisze:
To oznacza, że źle te delaye napisałeś. Skorzystaj z tych wbudowanych w bibliotekę:
formatting link
S
Sebastian Biały
Pokaż kod delay_hp().
Ale ... niech zgadnę ....
masz tam:
int i = 0; for( ; i < 100 ; i ++ )
jesli tak to zmien int i na:
volatile int i.
Nie, to nie jest dobre rozwiązanie, ale będziesz wiedział czemu Ci wycina.
T
T.M.F.
Wszystko pieknie, zapomniales tylko napisac, ze tego atrybutu nie ma w gcc 4.3.x, ktory jest w WinAVR. A jesli Os cos knoci to znaczy, ze program jest do bani, a co jest do bani to juz napisales.
Chodi o to ze program do obslugi i2c przy optymalizacji -00, 01 poprawnie kompiluje siê, nie ma ¿adnych problemów z dzia³aniem i2c. Natomiast przy pozosta³ych optymalizacjach juz odczyt zegarka po i2c a dok³adnie DS1307 nie dzia³a, wiêc mo¿e i mam ¼le co¶ napisane, ale skoro dzia³a przy - 00 i 01 to tak do koñca nie jest spaprane. ".....optimize("......." nie dzia³a w WinAVR, szkoda, ale zobacze co jeszcze co kompilator wywala przzy ró¿nych opcjach otymalizacji, bo mo¿e to nie wina procedur i2c ale gdzie¶ indziej...zobaczymy.
U¿ytkownik "T.M.F." snipped-for-privacy@nospam.mp.pl> napisa³ w wiadomo¶ci news:4c1c8b00$0$17099$ snipped-for-privacy@news.neostrada.pl...
__________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow 5210 (20100619) __________
Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.
formatting link
lub
formatting link
__________ Informacja programu ESET NOD32 Antivirus, wersja bazy sygnatur wirusow 5217 (20100622) __________
Wiadomosc zostala sprawdzona przez program ESET NOD32 Antivirus.
formatting link
lub
formatting link
M
Michoo
TomZor pisze:
#define F_CPU 8000000 #include <delay.h>
void delay_hp(void) { _delay_us(5); }
void delay_qp(void) { _delay_us(2.5); }
Kompilować z optymalizacją. Przynajmniej te funkcje.
A to co napisałeś to przykład jak NIE pisać - kompilator zmieni sposób generowania kodu i się wszystko posypie.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.