Odpowiedz 
 
Ocena wątku:
  • 6 Głosów - 4 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
SP2IPT Offline
Jakub
***

Liczba postów: 233
Dołączył: 01-03-2012
Post: #136
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
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.

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: 251852uS

Zdeycdowanie co innego pamietam z nauki C Big Grin

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) Wink

pz
(Ten post był ostatnio modyfikowany: 04-11-2014 21:42 przez SP2IPT.)
04-11-2014 21:42
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO - SP2IPT - 04-11-2014 21:42

Skocz do:


Użytkownicy przeglądający ten wątek: 23 gości