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



Teraz jest 27 lip 2024, o 13:58


Strefa czasowa: UTC + 1





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

Dołączył(a): 10 sty 2023
Posty: 3
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: 16 sty 2023, o 17:50 
Offline
Nowy

Dołączył(a): 10 sty 2023
Posty: 3
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: 2 ] 

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