Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Porównanie języków programowania
SP5FCS Offline
Adam
*****

Liczba postów: 1,072
Dołączył: 02-02-2009
Post: #5
RE: Porównanie języków programowania
Pierwsze wyniki TEST_1 wykonane w CodeVision są bardzo słabe !!
Cały kod dla procesora ATmega32 zajmuje 890 bajtów, czas wykonania 13752 cykle zegara co przy 16Mhz daje czas około 0,9ms. Czas nie jest krytyczny ale kod jest ogromny.
Niestety CodeVision nie ma typu zmiennej long long int dlatego obliczenia trzeba robić na zmiennych typu float co widać od razu na wielkości kodu i czasie wykonania. Podobny problem wystąpi w Bascomie bo tam chyba też jest max. 4 bajty. Lepiej wygląda to w WinAVR gdzie są dostępne zmienne na 8 bajtach.

Bardzo długi czas był związany z zerowaniem RAMu, po wyłączeniu zerowania oraz rezygnacji z wektorów przerwań zyskujemy na kodzie oraz bardzo dużo na czasie. Zaletą CodeVision jest możliwość ustawienia w konfiguracji ilości wektorów przerwań, u mnie jeden (reset).
Dodatkowy minus obliczeń na zmiennych float i konwersji na long int to wpływ zaokrągleń na wynik:

Powinniśmy uzyskać nastawę: 0x0CCCCCCC a w tej wersji otrzymałem 0x0CCCCCD0, czyli o 4 za dużo.

Obecne wyniki są już bardziej obiecujące:
Kod 786 bajtów, 1395 cykli co daje czas wykonania około 90us Big Grin.

Wersja demo CodeVision do 4kB

Kod:
// Test_1 - obliczanie nastawy dla AD9951
long unsigned int    f_clk=400000000;
long unsigned int    f_vfo=20000000;
long unsigned int    FTW;

void main(void)
{
FTW = (long unsigned int) ((float) 0x100000000*f_vfo/f_clk);
}

73 Adam
31-03-2012 0:26
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
RE: Porównanie języków programowania - SP5FCS - 31-03-2012 0:26

Skocz do:


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