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



Teraz jest 23 sty 2025, o 13:13


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