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 w 2025? 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 21 kwi 2025, o 06:56


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 9 maja 2020, o 12:54 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Witajcie,
    W chwili obecnej pracuję nad projektem który wykorzystuje SPI oraz UART. Haczyk polega na tym że biblioteka do SPI z której korzystam wykorzystuje przerwania od SPI. Problem polega na tym że osobno te dwie rzeczy działają idealnie a w momencie gdy chcę połączyć je tj. odczytać coś z SPI i wysłać tą odczytaną wartość na UART to na terminalu dostaje jakieś śmieci - łańcuchy tekstowe które wysyłam na uart dostaję w terminalu w niekompletnej postaci (np. zamiast słowa Status dostaje samo St bez żadnego znaku nowej linit itp.). Na moje oko wygląda to tak jakby przerwania od UARTa gryzły się z przerwaniem od SPI przy czym jak przeglądałem kod z BB z Projektem Wielozdaniowym to tam co prawda nie ma przerwań od SPI ale są przerwania zewnętrzne od INT (RTC), ICP (do podczerwieni) i obsługa UARTa itd. i tam takich problemów nie ma więc pewnie ja coś namotałem i nie wiem jak to ugryźć teraz.
    Poniżej jest schemat płytki testowej którą wykorzystuje (tak jest tam arduino nano ale to dlatego że jest małe i dość poręczne) do testów.

    Obrazek

    Poniżej znajduje się kod pliku main.c, spi.c, spi.h, timeout.c i timeout.h

    main.c
    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.

    spi.c
    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.


    spi.h
    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.


    timeout.c
    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.

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


    Kodów źródłowych do uarta nie będę publikował bo jest to przerobiona wersja z bb (dostosowane rejestry do ATmegi328p, zmieniona konwencja nazewnictwa zmiennych, wycięta obsługa RS485 i dodany odbiór łańcuchów tekstowych) - chyba że Mirek się zgodzi to wtedy źródła do uarta udostępnię.
    Z góry dziękuję za każda pomoc w namierzeniu problemu :).

    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 maja 2020, o 14:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2019
    Posty: 145
    Pomógł: 37

    MichalXY napisał(a):
    volatile uint8_t tx_head;
    volatile uint8_t tx_tail;
    volatile uint8_t rx_head;
    volatile uint8_t rx_tail;

    Jeśli lib UART ma tak samo nazwane zmienne z widocznością zewnętrzną to następuje ich wzajemne nadpisywanie.


    Autor postu otrzymał pochwałę

    _________________
    Think for yourself and question authority.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 maja 2020, o 14:25 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    fofex - zmiana nazw zmiennych które wymieniłeś dała pozytywny rezultat. Wszystko działa jak należy. Za długo w C++ pod arduino pisałem i teraz niektóre rzeczy z C muszę odrdzewić najwyraźniej. Dzięki za pomoc!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 maja 2020, o 14:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2019
    Posty: 145
    Pomógł: 37

    Nazwy mogłeś zostawić, za to nadać zmiennym wiązanie wewnętrzne. Wtedy było by zgodnie ze sztuką:

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

    _________________
    Think for yourself and question authority.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 maja 2020, o 15:48 
    Offline
    Użytkownik

    Dołączył(a): 15 lut 2012
    Posty: 344
    Lokalizacja: Bydgoszcz
    Pomógł: 11

    Przed chwilą sobie doczytałem rozdział o dzieleniu projektu na pliki w BB i tam jest napisane to co Ty piszesz żeby dołożyć static aby uniewidocznić zmienną. Tak to jest jak się przez 3 lata programuje w C++ pod arduino i wraca do C (chociaż nie powiem że jest zdziwiony że jeśli zmienne są nie zadeklarowane w pliku nagłówkowym tylko w pliku źródłowym to i tak są widoczne ale skoro tak jest to nie ma co z tym dyskutować). Jeszcze raz dzięki za pomoc!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 maja 2020, o 16:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 lis 2019
    Posty: 145
    Pomógł: 37

    MichalXY napisał(a):
    chociaż nie powiem że jest zdziwiony że jeśli zmienne są nie zadeklarowane w pliku nagłówkowym tylko w pliku źródłowym to i tak są widoczne a


    No to może zdziwię Cię jeszcze bardziej jak Ci powiem, że gdybyś te zmienne przeniósł z plików .c do .h to efekt byłby dokładnie taki sam. Dla kompilatora jest obojętne czy to plik nagłówkowy czy źródłowy.

    _________________
    Think for yourself and question authority.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 maja 2020, o 19:25 
    Offline
    Moderator
    Avatar użytkownika

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

    fofex napisał(a):
    że gdybyś te zmienne przeniósł z plików .c do .h

    Dlatego w języku C nie umieszcza się definicji zmiennych w plikach *.h ... tylko same deklaracje zmiennych

    _________________
    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  
    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 15 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