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 14 lip 2025, o 12:57


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
    Autor Wiadomość
    PostNapisane: 27 wrz 2015, o 10:37 
    Offline
    Użytkownik

    Dołączył(a): 06 lis 2013
    Posty: 44
    Pomógł: 0

    Witam,

    mam pewien problem którego nie potrafię zrozumieć i rozwiązać, dokładnie taki sam wątek jest poruszony tutaj ale bez odpowiedzi

    https://my.st.com/public/STe2ecommunities/mcu/Lists/STM32Discovery/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fSTM32Discovery%2fADC%20with%20DMA%20in%20FreeRTOS&FolderCTID=0x01200200770978C69A1141439FE559EB459D75800084C20D8867EAD444A5987D47BE638E0F&currentviews=954.

    Mam wygenerowany kod wprost z CubeMx który podłącza freertos-a , inicjalizuje ADC3, DMA, LCD, TouchScreen i inne. ADC korzysta z 2 kanałów, pomiar ciągły a DMA ładuje pomiary do tablicy dwuelementowej odzwierciedlającej te kanały. Bez FREERTOSA kod działa bez zarzutów. Natomiast przy systemie procesor wchodzi tylko raz w przerwanie DMA ładując wartości tylko z pierwszego pomiaru i dalej ich nie odświeża, pozostałe peryferia działają bez problemu. Po powyższym artykule mniemam że nie tylko ja spotkałem się z tym problemem, może ktoś z Was wie o co chodzi. Podejrzewam że FREERTOS coś optymalizuje i DMA nie działa poprawnie.

    Mój kod:

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 wrz 2015, o 15:24 
    Offline
    Użytkownik

    Dołączył(a): 29 lip 2014
    Posty: 195
    Pomógł: 44

    Witam.
    Trochę za mało danych, aby Ci pomóc. Nie generowałem co prawda FrreRTOS-a za pomocą CubeMX, ale mam w projekcie ADC przez DMA z FreeRTOS-em ( co prawda na SPL a nie HAL, ale to w sumie nieistotne) i wszystko działa ok. Pokaż przynajmniej funkcję obsługi przerwania do DMA i plik RTOSConfig.h ( czy jakoś tak - główny plik konfiguracyjny FreeRTOS-a ), albo umieść tu spakowany projekt.
    Pozdrawiam, QuadMan.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 wrz 2015, o 21:03 
    Offline
    Użytkownik

    Dołączył(a): 06 lis 2013
    Posty: 44
    Pomógł: 0

    Najnowszy rtos, procedura przerwania DMA nie edytowana - wygenerowana z mx:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    oraz freertosconfig.h, którego również nie edytowałem:

    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.


    zauważyłem że gdy wyłączę część taksów systemowych to dma działa poprawnie, nie wiem może coś trzeba ustawić w pliku konfiguracyjnym



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 wrz 2015, o 22:27 
    Offline
    Użytkownik

    Dołączył(a): 29 lip 2014
    Posty: 195
    Pomógł: 44

    Witam ponownie.

    Wygląda na to, że to nie jest problem z przerwaniami od DMA. Myślałem, ze może używasz tam jakichś funkcji API RTOS-a. Teraz dopiero zauważyłem, że używasz:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    , a to dość "pamięciożerna" funkcja, więc z dużym prawdopodobieństwem Twojemu taskowi:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    brakuje stosu. Masz:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    , daj dla niego stos na próbę co najmniej 1024, zresztą w F429 masz RAMU od groma, możesz na początek dać większe stosy dla wszystkich tasków ( ważne: wyrównane do 8 !!!). W pliku freertosconfig.h masz
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    , możesz zwiększyć wielkość sterty ( wyrównaj do 8 na wszelki wypadek !!! ). Zainteresuj się funkcją
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    , możesz na próbę stworzyć task-a, w którym będziesz testował stos dla wszystkich zadań i go wyświetlał, albo choć pomrugaj LED-em w poszczególnych taskach, by widzieć, czy każdy się wykonuje poprawnie. Choć tak naprawdę, gorąco polecam tego "watermarka" - przy bardziej złożonych projektach nie wyobrażam sobie ustawiania stosów dla zadań "na czuja".

    P.S. Kolesie do FreeRTOS-a kombinują z tymi makrami jak "koń pod góre", w pierwszej chwili w ogóle nie mogłem załapać co to jest np. osThreadDef(...) ;-).
    P.S. 2 ;-). Ostatnie zdanie z z Twojego drugiego posta upewnia mnie w przekonaniu, że to problemy ze stosem(ami).

    Pozdrawiam, QuadMan.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 wrz 2015, o 08:44 
    Offline
    Użytkownik

    Dołączył(a): 06 lis 2013
    Posty: 44
    Pomógł: 0

    Natychmiast po pracy zaraz to wszystko sprawdzę ;) Bardzo dziękuję za zainteresowanie się tematem... No tak poprostu tworząc taski kopiowałem defaultowy i podpinałem inną funkcję żeby tylko sprawdzić jak to działa, nie myślałem o stosie. Dam znać jak poszło.

    Z tym że nie jest tak że ten task który konwertował bufor do tablicy char

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


    nie działał bo pod nim obsługuje dotyk oraz wysyłam po uarcie akurat teraz pusty znak ale jak bym zainicjalizował tą tablicę jakimś tekstem to wysyłanie odbywało się poprawnie. Będę sprawdzał ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 wrz 2015, o 18:12 
    Offline
    Użytkownik

    Dołączył(a): 06 lis 2013
    Posty: 44
    Pomógł: 0

    Niestety jednak to nie takie proste, zwiększyłem stos dla tasków do 4096 dla każdego i niestety nadal nic. Buforowi dałem atrybut volatile też nie pomogło...

    Zauważyłem że po inicjalizacji wyswietlacza DMA przestaje działać a widzę to po tym że procek nie wchodzi w przerwanie DMA.
    Kiedy odczytuję wartości w poolingu jest to samo. Pierwsza wartość jest zapisywana następnie bufor nie jest odświeżany

    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

    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