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



Teraz jest 14 lut 2025, o 23:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 8 lut 2017, o 22:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Witam. Mam pytanie dotyczące użycia wstawki assemblera w kodzie C. Program dla STM32L1 z Cortex M3. Chcę napisać funkcję opóźniającą delay_us(). Nie mam zbytnio doświadczenia z ASM, więc podpatrzyłem sobie takie rozwiązanie:

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

Czy użycie takiej makrodefinicji jako funkcji opóźniającej, jest poprawne? Mam wątpliwość związaną z wpisywaniem wartości do rejestru R0. Czy przed wykonaniem się wstawki rejestr R0 będzie zwolniony? (Czy w ten sposób nie nadpiszę jakiejś informacji umieszczonej wcześniej w R0?) A jeżeli jest to niepoprawne to czy zapakowanie wstawki do funkcji jak poniżej, wykluczy ten problem?

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


Następne moje pytanie związane jest mechanizmem odmierzania 1 us. Procesor jest taktowany 32 MHz, to znaczy że dla 1 us trzeba wykonać 32 cykle zegara. Skonfigurowałem procedurę wstawki asm tak aby odmierzała właściwy czas. Poprawność wprowadzanego opóźnienia zweryfikowałem za pomocą timera, w następujący sposób:

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

Najmniejsza odmierzona wartość: 1000, największa 1002.
Funkcja zdaje się odmierzać czas poprawnie. Instrukcje NOP, NOP, SUB, CMP trwają łącznie 4 cykle. Z przeprowadzonego doświadczenia wynika, że instrukcja BNE trwa aż 4 cykle, ale nie mogę znaleźć dla niej opisu w dokumentacji. W jaki sposób działa ta instrukcja? Nie rozumiem też zapisów związanych z nazwą "loops".


Przepraszam za może zbytnie wchodzenie w szczegóły, ale tak mnie naszło żeby popytać conieco, na tym zacnym forum. :)



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: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO