ATNEL tech-forum
https://forum.atnel.pl/

Przekazywanie portu jako argumentu funkcji C z wstawką ASM
https://forum.atnel.pl/topic24384.html
Strona 1 z 1

Autor:  Mik20 [ 11 sty 2023, o 06:39 ]
Tytuł:  Przekazywanie portu jako argumentu funkcji C z wstawką ASM

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.

Autor:  Mik20 [ 16 sty 2023, o 17:50 ]
Tytuł:  Re: Przekazywanie portu jako argumentu funkcji C z wstawką A

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'.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/