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



Teraz jest 5 sty 2025, o 12:53


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 18 lip 2015, o 22:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Witam!

Planuję zrobić całkiem spory projekt na STM32, a będzie to min odtwarzacz wav, zegarek, komunikacja z telefonem, obsługa panelu dotykowego, licznik rowerowy itp... I nie wiem czy warto pisać samemu taką maszynę stanów tzn. zrobić jakieś menu na callbackach, czy brać się za coś takiego jak FreeRTOS ? Jak najlepiej to zrobić ?

pozdrawiam,
Piotrek



Ostatnio edytowano 22 lip 2015, o 21:02 przez klonyyy, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2015, o 12:44 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 123
Pomógł: 4

Trochę za mało danych ;).

Jaki procesor chcesz wykorzystać, 429i ma chromeART, są do tego biblioteki STwin, bardzo by ci to ułatwiło pracę.

Sam zabieram się teraz za kupienie zestawu STM32F7-disco

Gdzie za 180zł ok (farnell) lub 260 w kamami, masz w zasadzie wypasiony zestaw, z TFT 4.3' z dotykiem. LAN, microSD na pokładzie, Host USB itd. Oraz zgodność z shieldem arduino.
Do tego masz mnóstwo gotowych przykładów na grafikach i w zasadzie zostaje tylko zrobić obudowę ;).

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2015, o 15:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Mikrokontroler to stm32f103VCT6, poczytam trochę o zestawie o któym wspominasz, a raczej o jego procku.
To właśnie f4 ma wsparcie dla tft i grafik oraz animacji 2d ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2015, o 16:45 
Offline
Użytkownik

Dołączył(a): 25 cze 2015
Posty: 123
Pomógł: 4

Tak, w zasadzie tak, zobacz sobie np. jeszcze STM32F429i disco, jak chcesz coś tańszego.

F103 do zaawansowanej grafiki tj. jakieś fajne menu, animowane ikonki itd. trochę się umęczysz, chyba że lubisz na nowo odkrywać amerykę ;).

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2015, o 18:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

OK ale co do samego OS'a - warto się w to pakować ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2015, o 19:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

A więc po krótce przedstawię mój projekt. Ma być to zegarek, pełniący także funkcję licznika rowerowego. Coś w stylu dzisiejszych smartwatchy, tylko taka wersja hobbystyczna. Chodzi mi o to żeby jak najwięcej się nauczyć przy jego budowie, oraz żeby efekt końcowy można było bez wstydu komuś pokazać. Urządzenie ma posiadać min. bluetootha 4.0, panel dotykowy(nokia c3), wyświetlacz 320x240 (nokia n82), slot na kartę microsd, czyjniki (akcelerometr , magnetometr) oraz kilka innych wewnętrznych - że tak to nazwę - urządzeń. Wydaje mi się, że opanowałem przynajmniej w stopniu dostatecznym przerwania, dma i inne peryferia kontrolera, ale przecież nie mogę tego sam obiektywnie ocenić. Uruchomiłem już playerek plików *.wav, wyświetlanie obrazków z karty sd po SDIO ( 20FPS'ów :) ).
Fotki projektu nowego zegarka:

Obrazek

Obrazek

Obrazek

Robiłem już podobny projekt ( fotki ponieżej) w tamtym roku na wakacjach - był to zegarek-licznik oparty na GPS'ie, ale prociem była Atmega32, więc dużo z niego wycisnąć nie mogłem ( chodzi o grafikę itp). Wlaśnie on opierał się o menu, maszynę stanów i wiem, że jest z tym sporo roboty, a efekt nie jest zawsze idealny. I chyba chciałbym iść do przodu i poznać możliwości płynące z wykorzystania OS'ów do systemów wbudwanych, ale nie wiem czy da to lepszy efekt w takim projekcie, niż zwykłe menu.

Obrazek

Obrazek

Obrazek

pozdrawiam,
Piotrek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2015, o 16:15 
Offline
Użytkownik

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

Witam.

Trochę z innej dziedziny, ale ktoś mądry powiedział jakoś tak: "Jeśli zastanawiasz się, czy czegoś tam użyć, to z pewnością nie jest Ci to potrzebne ;-)". Powiem tak: FREERTOS jest OK, i niektóre rzeczy upraszcza i można sobie pozwolić sobie na pewną "nonszalancję" w programowaniu ( np. nie przejmować się funkcjami "blokującymi" w wątkach o niższym priorytecie ) , ale za to generuje problemy, których by nie było, gdyby nie RTOS ( które tak naprawdę sprowadzają się do "pamięciożerności", dokładniej "RAMożerności" ;-) ). Ja osobiście lubię ten system ( FREERTOS ), choćby za jego prostotę i, według mnie, przystępną dokumentację. Jeśli miałbym użyć w Twoim projekcie "smoka" w rodzaju "STM32F429, czy tym bardziej coś z 32F7xx to nawet bym się nie zastanawiał, tylko korzystałbym z RTOS-a, natomiast w przypadku STM32F103 i projektu, który chcesz zrealizować, to może być ciężko z RAM-em właśnie. Choć w sumie, jeśli będziesz oszczędnie "mnożył" wątki, to może okazać się, że z RAM-em nie ma tragedii. W sumie to przecież nic ( poza czasem ;-)) nie ryzykujesz, możesz spróbować z RTOS-em - choćby w celach "dydaktycznych", a jeśli będą problemy, to zawsze możesz zrealizować projekt "na piechotę". Jeszcze jedno, co do "mnożenia" wątków - jeśli wątki maja być fragmentami kodu zależnymi od siebie - czyli np. jeden wątek to np. obsługa panelu dotykowego, a drugi to wyświetlanie czegoś tam na wyświetlaczu, w zależności od danych z pierwszego wątku - to, mimo pozornej "elegancji", zyskasz niewiele, w stosunku do softu bez RTOS-a ( a pamięci RAM stracisz sporo ), natomiast jeśli wątki będą w jakimś tam stopniu niezależne od siebie ( np. odbieranie danych przez BT, a drugi ich interpretacja i wyświetlanie ) , to takie użycie osobnych wątków według mnie ma sens. I jeszcze jedno: priorytety wątków baaardzo ułatwiają życie. Tak naprawdę, to kilka wątków o takim samym priorytecie rzadko ma sens ( mam tu na myśli uC w rodzaju 32F103 czy coś z F0 ). Mam nadzieję, że to moje "ględzenie" w jakimś stopniu Ci pomogło w podjęciu decyzji.

Pozdrawiam, QuadMan.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2015, o 21:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Dzięki za odpowiedź!

Zdecydowałem się na FreeRTOSa. Siedziałem wczoraj sporo czasu żeby go uruchomić, ale ostatecznie się udało i dzisiaj już się nim bawię. Ale jak to początkujący mam wiele pytań. Nie chcę zakładać nowego wątku lub zaśmiecać tego, więc po prostu zmienię jego temat.

Ogólnie sporo sobie czytałem o FreeRTOS'ie, wiem na czym polegają semafory, mutexy itp. Mimo to mam kilka pytań na które odpowiedzi nie znalazłem:

1. Rozumumiem, że wątki daje się w pętli nieskończonej. Znalazłem wiele przykładów, że usunięcie "taska" znajduje się zaraz po zakończeniu pętli nieskończonej. Co to oznacza ? Czy wątek wykona się raz i się usunie, czy może wogóle się nie usunie ? Chodzi mi o coś takiego :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


2. Jeśli mam funkcję wyświetlającą czas na wyśiwetlaczu i wygląda ona tak :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jednak chciałbym dać ją w nowym wątku, by była aktualizowana. Jej argumenty muszą być wypełnione przez inną funkcję (wątek). Powieniem wtedy użyć kolejki ? Czy może wogóle robić z niej nowego zadania ?

3. Usuwanie wątków. Rozumiem, że jak usunę dany watek, pamięć RAM dla niego przeznaczona zostaje zwolniona ?

4. Zasady pisania przy uzyciu FreeRTOSA. Jakie funkcje powinno się uruchamiac jako wątki ? Te wyższego rzedu tzn wav_player(), lcd_bmp(), czy nawet te sprzętowe np spi_send() ? Wiem, że pewnie jest to głupie pytanie i sam powinienem znać na nie odpowiedź pisząc swój kod, ale może przynajmniej napiszcie co Wy uruchamiacie w wątkach.

pozdrawiam,
Piotrek

EDIT: Wczoraj także zorientowałem się i wybrałem najlepszy według mnie mikrokontroler do tego zadania, a mianowicie STM32f407VGT6.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2015, o 23:34 
Offline
Użytkownik

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

Witam.

klonyyy napisał(a):
....Mimo to mam kilka pytań na które odpowiedzi nie znalazłem:

1. Rozumumiem, że wątki daje się w pętli nieskończonej. Znalazłem wiele przykładów, że usunięcie "taska" znajduje się zaraz po zakończeniu pętli nieskończonej. Co to oznacza ? Czy wątek wykona się raz i się usunie, czy może wogóle się nie usunie ? Chodzi mi o coś takiego :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Raz się wykona i sam się usunie. Czyli takie "One Touch" ;-). Czyli, aby go znowu użyć, trzeba znów xTaskCreate (....).

klonyyy napisał(a):

2. Jeśli mam funkcję wyświetlającą czas na wyśiwetlaczu i wygląda ona tak :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jednak chciałbym dać ją w nowym wątku, by była aktualizowana. Jej argumenty muszą być wypełnione przez inną funkcję (wątek). Powieniem wtedy użyć kolejki ? Czy może wogóle robić z niej nowego zadania ?



Najlepiej, by wątki wymieniały się danymi jedynie poprzez kolejki. Można to zrobić na przykład poprzez przekazywanie wskaźnika na strukturę danych z wątku, który ją "wypełnia" ( zadeklarowaną jako static bądź dynamicznie przez pvPortMalloc(... ) ). Czyli stosujemy np taki mechanizm: wątek A coś tam liczy , a wątek B ( wyświetlacz ) nie robi nic ( jest w stanie suspend ), dopóki nie nadejdzie kolejka z wątku A. Istnieje co prawda możliwość przekazywania danych między wątkami powołując zmienne globalne, ale warto tego unikać za wszelką cenę. Choć ja osobiście nieraz z tego korzystam w celach testowych i tylko testowych !!!

klonyyy napisał(a):
3. Usuwanie wątków. Rozumiem, że jak usunę dany watek, pamięć RAM dla niego przeznaczona zostaje zwolniona ?

To zależy od modułu zarządzania pamięcią. W heap_1.c na pewno nie. Dla heap_2.c i heap_4.c usunięcie wątku powoduje zwolnienie pamięci, o szczegółach musisz doczytać. Z tego co pamiętam, heap_2.c po usunięciu taska pozostawia na stercie wolny obszar pamięci, ale jeśli stworzysz nowego taska, który potrzebuje więcej pamięci niż ta "dziura", to system z miej nie skorzysta, tylko poszuka większego wolnego bloku.

klonyyy napisał(a):
4. Zasady pisania przy uzyciu FreeRTOSA. Jakie funkcje powinno się uruchamiac jako wątki ? Te wyższego rzedu tzn wav_player(), lcd_bmp(), czy nawet te sprzętowe np spi_send() ? Wiem, że pewnie jest to głupie pytanie i sam powinienem znać na nie odpowiedź pisząc swój kod, ale może przynajmniej napiszcie co Wy uruchamiacie w wątkach.

Tak jak Ci pisałem powyżej, najlepiej zbytnio nie "rozdrabniać" programu, ze względu na wydajność systemu oraz wykorzystania pamięci ze sterty ( choć jeśli będziesz usuwał nieużywane wątki, to ten argument odpada ). W projekcie na STM32F072 mam takie wątki: 1.menu konfiguracyjne, 2.menu podręczne, 3.FATFS, 4.główny algorytm urządzenia, 5.pomiary OneWire, 6.display_refresh ( ale ten z vTaskDelay jako "podstawa czasu" do odświeżania - tak było po prostu najwygodniej ), 7. Klawiatura TSC i IR_Rec, 8.komunikacja przez 2 UARTY. To i tak w tej chwili wydaje mi się za dużo, nie wiem, czy jeszcze tego nie przebuduję. U mnie menu jest tak podzielone, bo mam baaardzo wolny wyświetlacz. U siebie wątków nie usuwam, bo samo ich tworzenie też trochę trwa.

klonyyy napisał(a):
EDIT: Wczoraj także zorientowałem się i wybrałem najlepszy według mnie mikrokontroler do tego zadania, a mianowicie STM32f407VGT6.


Mając do dyspozycji tyle RAM-u, co ma ten procek, możesz poszaleć, choć z drugiej strony dożo zależy od tego, jak będziesz obsługiwał wyświetlacz. I jeszcze taka jedna uwaga: ze względu na to, że przed przełączaniem tasków, musi nastąpić odłożenie wszystkich aktualnych zmiennych danego wątku na stercie, nie warto przesadzać z "zagłębieniami" jeśli chodzi o wywoływanie funkcji - tu to "kosztuje" duuużo więcej niż przy programowaniu "na piechotę". A... i jeszcze mi się coś przypomniało: jeśli deklarujesz stosy na poszczególne taski, wyrównuj ich rozmiary modulo 8, bo możesz się zdziwić ;-).

Pozdrawiam, QuadMan.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2015, o 15:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sie 2012
Posty: 159
Pomógł: 1

Dzięki bardzo za odpowiedź ! Póki co rozwiałeś moje wątpliwości. Na razie zajmę się płytką z nowym mikrokontrolerem, bo jak poczytałem o możliwościach chrom-ART to odechciało mi się robić wszystko ręcznie na stm32f103. Wtedy zacznę pisać porządne menu z FreeRTOS'em, a narazie popiszę sobie obsługę czujników/ panelu dotykowego do czasu aż dojdzie do mnie stm32f407.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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