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



Teraz jest 4 lut 2023, o 00:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 11 sty 2023, o 06:39 
Offline
Nowy

Dołączył(a): 10 sty 2023
Posty: 2
Pomógł: 0

Witam wszystkich

Niedawno zacząłem przygodę z wstawkami asemblerowymi do kodu w C. Chciałbym, aby port w którym chcę ustawić jakiś pin na 1 był przekazywany jako argument funkcji. O ile wiele problemów rozwiązałem sam, tak nie wiem w jaki sposób przekazać port do wstawki asm. Kombinowałem z przekazywaniem go jako "r", zmianą typu argumentu w funkcji C itp., niestety nie uzyskałem poprawnego rezultatu(brak kompilacji lub niepoprawne działanie programu). Proszę o pomoc (mam nadzieję, że jestem w dobrym dziale). Pozdrawiam
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2023, o 11:34 
Offline
Nowy

Dołączył(a): 25 lut 2022
Posty: 16
Pomógł: 2

Z taką sygnaturą funkcji przekazywana jest zawartość a nie adres portu. Powinno być tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Jednak ten kod mimo wszystko nie zadziała ponieważ argumentami instrukcji SBI nie mogą być zmienne. Kod który funkcjonalnie robi to co SBI na dynamicznie wskazanym porcie i pinie widać tutaj:
https://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2023, o 17:50 
Offline
Nowy

Dołączył(a): 10 sty 2023
Posty: 2
Pomógł: 0

Dziękuje za odpowiedź. Port przekazałem jako wartość stałą za pomocą dyrektywy #define. Wykonuję warstwę fizyczną programowego UARTA wg. noty AVR305. Funkcję do nadawania znaków już wykonałem i działa mi można powiedzieć rewelacyjnie. Natomiast mam problem z funkcją odbierania znaków. Nie ukrywam, że już dobry tydzień się z tym męczę.
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.

Powyższa funkcja wywoływana jest w przerwaniu PCINT4 (od dowolnego zbocza); uznałem, że nie ma sensu wywoływania jej w pętli głównej ze względu na ważne zależności czasowe. Prześledziłem funkcję wiele razy niestety jest z nią jakiś problem (baudrate 9600, kwarc 7.3728 MHz). Mianowicie odczytuje mi ona zbyt wiele bitów (przynajmniej tak wynika z analizatora):
Obrazek
Nie jestem w stanie zweryfikować dlaczego tak się dzieje. Jeżeli usunę testowe ustawianie i czyszczenie bitu i zastąpie je domyślnym ustawianiem i czyszczeniem znacznika przepełnienia zmienna "data" zawsze wychodzi 0. Proszę o pomoc, pewnie błąd jest prosty natomiast jestem początkującym w asemblerze.Pozdrawiam.

------------------------ [ Dodano po: 49 minutach ]

Edit: Powyższe szpilki powstają ze względu na drugie zbocze (narastające) po już zakończonej funkcji; do funkcji dodałem opóźnienie tak żeby przerwanie nie powtórzyło się. Natomiast dalej wartość "data":
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
po wykonaniu funkcji jest równa '\0'.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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