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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 15 lip 2025, o 15:23


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 10 lip 2018, o 19:19 
    Offline
    Użytkownik

    Dołączył(a): 08 wrz 2012
    Posty: 505
    Pomógł: 6

    Witam
    Mam zamiar użyć liczby 32 bitowej w przerwaniu INT_0 tak jak poniżej

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


    Moje obawy dotyczą użycia tak dużej (w moim mniemaniu) liczby w przerwaniu a następnie różnych operacji na tej liczbie w programie. W pętli while zabezpieczę liczbę atomowym dostępem choć nie do końca jestem pewien czy to konieczne, ponieważ specyfika programu i odczytu czujników powoduje, że nic się nie stanie jeśli wdanym obiegu pętli nie wszystkie czujniki zostaną odczytane jako aktywne. Po prostu przy następnym obiegu wartość zostanie zaktualizowana, no i też nie będzie się zmieniać za często, ale to inna historia, nie w tym sedno pytania. Mnie zastanawia czy nie popełniam jakiegoś błędu wpychając sporą liczbę w przerwanie. Można tak robić? Wydaje mi się, że nie jest to skucha, dobrze mi się wydaje?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 lip 2018, o 19:49 
    Offline
    Użytkownik

    Dołączył(a): 20 sty 2014
    Posty: 56
    Pomógł: 4

    Nie widzę problemu, używaj śmiało:D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lip 2018, o 07:05 
    Offline
    Użytkownik

    Dołączył(a): 08 wrz 2012
    Posty: 505
    Pomógł: 6

    To jeszcze dopytam.
    Czyli tak, nieważne jaka zmienna jest w przerwaniu bo jeśli nie zrobię tego specjalnie to przerwania nie przerwie mi inne przerwanie i cała nawet 32 bitowa zmienna zostanie "obrobiona" w całości. Dopiero po zakończeniu obsługi przerwania może nastąpić inne które np. zmodyfikuje mi w/w 32 bitową zmienną, ale też w całości. Dopiero dostęp do tej zmiennej np w pętli głównej może zostać przerwany (przerwaniem) bo odbywa się na raty po 8 bitów i tu mogą wystąpić przekłamania, problemy? Po to stosuje się dostęp atomowy?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lip 2018, o 07:08 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    Tom277 napisał(a):
    To jeszcze dopytam.
    Czyli tak, nieważne jaka zmienna jest w przerwaniu bo jeśli nie zrobię tego specjalnie to przerwania nie przerwie mi inne przerwanie i cała nawet 32 bitowa zmienna zostanie "obrobiona" w całości. Dopiero po zakończeniu obsługi przerwania może nastąpić inne które np. zmodyfikuje mi w/w 32 bitową zmienną, ale też w całości. Dopiero dostęp do tej zmiennej np w pętli głównej może zostać przerwany (przerwaniem) bo odbywa się na raty po 8 bitów i tu mogą wystąpić przekłamania, problemy? Po to stosuje się dostęp atomowy?


    DOKŁADNIE co do joty tak jest jak piszesz.

    Ja jedynie bym podpowiedział, żeby nie robić niepotrzebnych skoków do funkcji z wewnątrz przerwania - w twoim kodzie wydaje się to być całkowicie niepotrzebne. Ciało tej funkcji spokojnie można umieścić w przerwaniu, a tak to wykonujesz jeden niepotrzebny skok i powrót a co gorsze podwójne odkładanie i pobieranie rejestrów na stosie. Raz w przerwaniu a raz w samej funkcji.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lip 2018, o 08:00 
    Offline
    Użytkownik

    Dołączył(a): 08 wrz 2012
    Posty: 505
    Pomógł: 6

    Ok rozumiem, masz rację z tą niepotrzebną funkcją. Skok dotyczy obsługi funkcji i zapis stanu "programu" na stosie, ale czy mógłbyś mi wskazać gdzie jest "podwójne odkładanie i pobieranie rejestrów na stosie" ? Tego nie wiem, nie widzę.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lip 2018, o 08:21 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27416
    Lokalizacja: Szczecin
    Pomógł: 1043

    Tom277 napisał(a):
    ale czy mógłbyś mi wskazać gdzie jest "podwójne odkładanie i pobieranie rejestrów na stosie" ?

    Tzn pewnie wiesz, że każde przerwanie czy tego chcesz ma swój prolog i epilog - czyli MUSI odłożyć na stosie używane rejestry wewnątrz przerwania a w prologu czyli przed wyjściem z przerwania musi je zdjąć ze stosu.

    Jak myślisz ? jak działają funkcje ? W końcu procedura obsługi przerwania to też pewien rodzaj funkcji ;) ... a więc takie same zasady ... przecież wchodząc w funkcję gdy kompilator musi użyć rejestrów, które mogłyby być wykorzystywane przed jej wywołaniem - MUSI zrobić dokładnie to samo ... tzn oczywiście jest pewna różnica w stosunku do przerwania bo w przypadku funkcji działa mocno optymalizator, który może oczywiście przy niewielkim programie użyć innych (wcześniej nie używanych) rejestrów i nic nie będzie odkładał na stosie. W przypadku o którym tu mowa trzeba byłoby zajrzeć do pliku *.lss czyli kodu asemblerowego tego co napisałeś i sam byś się szybko przekonał czy zostały odłożone czy nie - istnieje taka możliwość, że z powodu optymalizacji ta twoja funkcja może w ogóle zniknąć i jej ciało pojawi się po prostu w przerwaniu ... no ale trzeba mieć na uwadze, że optymalizacja może się zmieniać po każdej często nawet drobnej modyfikacji programu. Wziąwszy wszystko pod uwagę - oczywiście to że dwa razy odkładają się rejestry na stosie jak mówię może być na wyrost w tym wypadku ale warto wiedzieć jak to działa na przyszłość.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 lip 2018, o 08:30 
    Offline
    Użytkownik

    Dołączył(a): 08 wrz 2012
    Posty: 505
    Pomógł: 6

    Czasem rzeczy są znane i nie są tajemnicą, ale wystarczy wskazać palcem i stają się oczywiste.
    Dziękuję za pomoc.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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