Hmmm... nawet wyjalem po raz pierwszy Mege 2560 z pudelka i podlaczylem do komputera.
Musze przyznac, iz jestem zadziwiony wynikiem. Ciekawe jak to jest w rzeczywistosci optymalizowane, ze wyniki sa takie jakie sa.
Daje na wyjsciu spojne czasy:
Zdeycdowanie co innego pamietam z nauki C
Jak widac ominalem niepotrzebne opoznienia na komunikacji z portem szeregowym i kazalem prockowi troche policzyc zeby miec pewnosc prawidlowosci pomiaru.
BTW: czy da sie podpiac pod to IDE jakis normalny edytor? (czytaj: vim)
pz
Musze przyznac, iz jestem zadziwiony wynikiem. Ciekawe jak to jest w rzeczywistosci optymalizowane, ze wyniki sa takie jakie sa.
Kod:
//kilka zmiennych
unsigned long time_start = 0;
unsigned long time_stop = 0;
unsigned long if_execution_time = 0;
unsigned long switch_execution_time = 0;
int test_zmienna = 0;
int test_val = 1;
int wyjscie;
//setup odpalamy port szeregowy
void setup(){
Serial.begin(9600);
delay(3000);
}
//pętla główna
void loop(){
//sprawdzamy ile czasu wykonuje sie if
time_start = micros();
for (int i=0; i<1000; i++) {
for (int j=0; j<1000; j++) {
if (test_zmienna == 0) wyjscie=test_zmienna; else wyjscie=test_zmienna;
}
}
time_stop = micros();
if_execution_time = time_stop - time_start;
//sprawdzamy ile czasu wykona się switch
time_start = micros();
for (int i=0; i<1000; i++) {
for (int j=0; j<1000; j++) {
switch(test_zmienna) {
case 0:
wyjscie=test_zmienna;
break;
case 1:
wyjscie=test_zmienna;
break;
}
}
}
time_stop = micros();
switch_execution_time = time_stop - time_start;
//wyświetlamy wyniki
Serial.print("test 1 czas wykonania instrukcji IF: ");
Serial.print(if_execution_time);
Serial.println("uS");
Serial.print("test 2 czas wykonania instrukcji SWITCH: ");
Serial.print(switch_execution_time);
Serial.println("uS");
delay(10000);
if(test_zmienna == 0){
test_zmienna = 1;
}else{
test_zmienna = 0;
}
}Daje na wyjsciu spojne czasy:
Kod:
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 629160uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 629160uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 880692uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 629156uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 880696uS
test 1 czas wykonania instrukcji IF: 251856uS
test 2 czas wykonania instrukcji SWITCH: 629156uS
test 1 czas wykonania instrukcji IF: 251852uSZdeycdowanie co innego pamietam z nauki C

Jak widac ominalem niepotrzebne opoznienia na komunikacji z portem szeregowym i kazalem prockowi troche policzyc zeby miec pewnosc prawidlowosci pomiaru.
BTW: czy da sie podpiac pod to IDE jakis normalny edytor? (czytaj: vim)

pz

