To forum używa plików cookies
To forum wykorzystuje pliki cookies do przechowywania informacji o Twoim logowaniu, jeśli jesteś zarejestrowany, oraz informacji o Twojej ostatniej wizycie, jeśli nie jesteś zalogowany. Pliki cookies to niewielkie pliki tekstowe zapisywane na Twoim komputerze; cookies ustawiane przez to forum mogą być używane wyłącznie na tej stronie i nie stanowią zagrożenia dla bezpieczeństwa. Cookies na tym forum śledzą również, które tematy zostały przez Ciebie przeczytane oraz kiedy miało to miejsce. Prosimy o potwierdzenie, czy akceptujesz, czy odrzucasz zapisywanie tych plików cookies.

Niezależnie od wyboru w Twojej przeglądarce zostanie zapisany plik cookie, aby zapobiec ponownemu zadawaniu tego pytania. W każdej chwili będziesz mógł zmienić ustawienia cookies, korzystając z linku w stopce strony.

Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Porównanie języków programowania
#5
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
Cytuj


Wiadomości w tym wątku
Porównanie języków programowania - przez SP5FCS - 29-03-2012, 23:19

Skocz do:


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