- posted
13 years ago
Optymalizacja w WinAVR i kod programu
- Vote on answer
- posted
13 years ago
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.
- Vote on answer
- posted
13 years ago
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.
- Vote on answer
- posted
13 years ago
- Vote on answer
- posted
13 years ago
TomZor pisze:
To oznacza, że źle te delaye napisałeś. Skorzystaj z tych wbudowanych w bibliotekę:
- Vote on answer
- posted
13 years ago
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.
- Vote on answer
- posted
13 years ago
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.
- Vote on answer
- posted
13 years ago
- Vote on answer
- posted
13 years ago
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.