Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 kwi 2024, o 18:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 24 sty 2017, o 15:00 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

Witam,

mam problem natury kosmetycznej... chodzi o czas wykonywania się danej funkcji.

Napisałem funkcję zamieniającą podany ciąg znaków na tablicę n elementów typu int. Ciąg znaków przedzielony jest "separatorem" i ten stanowi granicę między elementami.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Poniżej dwie dodatkowe funkcje.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie zwróciłbym uwagi gdyby nie fakt zmiany kwarcu z 11MHz na 8MHz. Projekt wyczyszczony skompilowany pod 8MHz. Wysyłam dany ciąg znaków przez USART i na wyświetlacz LCD co 1s. Ciąg znaków jest to czas w postaci hh:mm:ss.
Dla 11MHz czas wyświetla się prawidłowo co 1s.
Dla 8MHz czas wyświetla się też prawidłowo ale co kilka sekund następuje wyświetlenie czasu przesuniętego +2s
przykład:
00:00:01
00:00:02
00:00:04
00:00:05
00:00:07
itd.

w kodzie asm, funkcja StringToInt2 zajmuje 134linijki. Jestem też świadomy, że problem może leżeć zupełnie gdzie inndziej, ale od czegoś trzeba zacząć.

Chyba, że ktoś zna ciekawy sposób na sprawdzenie czasu wykonywania poszczególnych funkcji.

Pozdrawiam,
Tomek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2017, o 18:47 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Tomek86 napisał(a):
Chyba, że ktoś zna ciekawy sposób na sprawdzenie czasu wykonywania poszczególnych funkcji.

Nie wiem, czy sposób jest ciekawy, ale taki znam: symulator w (kocim, jak mawia kolega Mirek :) ) Atmel Studio.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2017, o 20:27 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

andrews napisał(a):
Nie wiem, czy sposób jest ciekawy, ale taki znam: symulator w (kocim, jak mawia kolega Mirek :) ) Atmel Studio.


hmm, nigdy nie używałem Atmel Studio ..., czy projekt z Eclipse jest kompatybilny w Atmel Studio? Czy należy dokonać jakiś przeróbek? W sumie jak jest sporo zachodu i mam skorzystać tylko raz, to może ktoś zna jeszcze jakieś inne rozwiązanie? Zaznaczę tylko, że nie mam sprzętowego debugera.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2017, o 20:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 mar 2014
Posty: 356
Lokalizacja: Pruszków
Pomógł: 15

Jeśli chodzi o najprymitywniejszy sposób testowania czasu wykonywania jakiejś procedury to ja np. robię tak, że na samym początku zapalam diodę podłączoną do jakiegoś wolnego pinu a na końcu ją gaszę.
Od razu widzę co jest grane.
Dodatkowo kilka razy się złapałem na tym, że zbyt często wysyłałem dane do wyświetlacza na co mam sposób taki, że podłączam sobie diodę led do linii RS
I obserwuję co się dzieje.
W trybie bez sprawdzania flagi zajętości jest stałe opupuźnienie delay i jeśli wysyłamy bardzo często te dane to sam wyświetlacz nam powoduje spowolnienie.
Zazwyczaj na lcd nie wyświetlam nic częściej jak 10x sek są one wolne i słabo to wygląda.
Przed wysłaniem zmiennej na wyświetlacz wcześniej robię jej kopię i sprawdzam z aktualną wartością jeśli jest różna to wyświetlam.

Pozdrawiam Paweł.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2017, o 21:15 
Offline
Użytkownik

Dołączył(a): 02 cze 2014
Posty: 68
Pomógł: 4

Jeśli chodzi o Atmel Studio to utwórz nowy projekt i dodaj do niego pliki źródłowe które utworzyłeś w eclipse. Nic nie musisz zmieniać. Później odpal debug z symulatorem i zobacz ile taktów zajmuje wykonanie danej funkcji dla bufora, który możesz prędzej wypełnić danymi. Symulator fajna sprawa, tym bardziej że czas wykonywania funkcji nie jest tutaj raczej przyczyną(1s przy 8MHz to naprawdę dużo taktów)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2017, o 12:07 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

zainstalowałem Atmel Studio, chwilę się nim pobawiłem i jakoś czuję się nie swojo ;/

niby tryb symulacji działa, ale przy części zmiennych mam napis "Unknown location" i zbytnio niewiem jak przeprowadzić "test" bym dostał podsumowanie ile dana funkcja zajmuje taktów procesora.

w projekcie mam kilka warunków które oczekują na dane z magistrali TWI
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


jednak te dane "nie nadlatują" (i tryb debugowania działa w tle), czy można jakoś w symulacji zaznaczyć, że pewne rejestry mają już jakąś wartość?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO