Optymalizacja w WinAVR i kod programu

Loading thread data ...

TomZor pisze:

A dlaczego? Jeżeli optymalizacja coś psuje to jest raczej problem z błędnym kodem.

Każdy plik jest kompilowany osobno - w Makefile ustawiasz odpowiednie opcje dla tego pliku i już.

Skonfiguruj sobie to świństwo, żeby nie śmieciło na grupach.

Reply to
Michoo

TomZor pisze:

Trzeba dodać atrybut optimize do funkcji, która ma mieć inny poziom optymalizacji.

void my_function(void) __attribute__((optimize("O1"))) { [...] }

Z manuala do gcc:

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.

Reply to
Zbych

TomZor pisze:

To oznacza, że źle te delaye napisałeś. Skorzystaj z tych wbudowanych w bibliotekę:

formatting link

Reply to
Zbych

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.

Reply to
Sebastian Biały

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.

Reply to
T.M.F.

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.

Reply to
Michoo

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.