Skocz do zawartości

FreeRTOS na ESP32...prośba o pomoc w zrozumieniu kilku rzeczy/funkcji


farmaceuta

Pomocna odpowiedź

Witam państwa😉 jako że jestem stanowczym człowiekiem i jeszcze trzy dni temu obiecywałem sobie że nie będę się uczył nowych rzeczy, lub takich których nie będę używał w najblizszej przyszlosci jak np. freeRTOS, tak że ten......no od dwóch dni piłuję temat freeRTOS'a😜 i mam w związku z tym kilka pytań, pierwsze..

Tworząc zadania, zadania te uruchomią się automatycznie czy potrzebuje jeszcze wywołać 

vTaskStartScheduler

Bo znalazłem wiele przykładów gdzie ta funkcja jest wywoływana lub nie jest i działa...też wyczytałem różne opinie że jest potrzebna ta funkcja, lub że nie jest potrzebna bo utworzone zadanie startuje automatycznie..jak to jest z tym?

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)
2 minuty temu, ethanak napisał:

A tu patrzyłeś? https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/freertos.html

Akurat masz tam odpowiedź na swoje pytanie (i kilka następnych)

Pewnie że patrzyłem...ale sytuacja jest taka jak ze wszytko nowym którego się uczymy, czyli nie wszystko jest oczywiste i zrozumiałe od "strzała"😉

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

2 minuty temu, ethanak napisał:

A więc nie musisz.

Bardzo dziękuję za odpowiedź, bo mi to dużo nerwów oszczędza😜 (a ich akurat nie potrzebuje w większej dawce😅

Drugie pytanie.. 

Usuwam zadanie za pomocą 

vtaskDelete()

czy to z innego zadania, czy to bieżące zadanie, i kury strasznie pieją żeby zwalniać pamięć bo alokacja dynamiczna nie śledzi czy coś zostało usunięte (zadanie). I sytuacja podobna do powyższej...jedni "twardo" piszą że pamięć zostanie automatycznie zwolniona przez zadanie bezczynne (nie rozumiem co to za zadanie🤔?), a inni że trzeba samemu tego pilnować i zwalniać "ręcznie"...to jak to z tym jest?

Link do komentarza
Share on other sites

Pamięć jest taka jaką przydzielisz. Przy okazji - idle task to nie jest "task bezczynny". Przeczytaj sobie może to, co jest pod linkiem który podałem, tam jest wspomniane co to "idle task".

Ogólnie: jak nie robisz jakichś jaj z taskami automatycznie uruchomionymi przez system to nie musisz się przejmować.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

14 minut temu, ethanak napisał:

 Przy okazji - idle task to nie jest "task bezczynny". 

No tak mi translator angielskie strony tłumaczył . 😉 

 

15 minut temu, ethanak napisał:

Przeczytaj sobie może to, co jest pod linkiem który podałem, tam jest wspomniane co to "idle task".

Ok poczytam bardziej uważnie 😉 

 

16 minut temu, ethanak napisał:

Ogólnie: jak nie robisz jakichś jaj z taskami automatycznie uruchomionymi przez system to nie musisz się przejmować.

Ok dzięki 👍 a tak dopytać jeszcze muszę...a jak sprawa wygląda z taskami które tworzę/usuwam podczas trwania programu (dynamicznie) te też same zwolnia pamięć?

Link do komentarza
Share on other sites

Przed chwilą, ethanak napisał:

A czytanie dokumentacji technicznej translatorem to baaaaaaaardzo zły pomysł.

Wiem o tym, ale jest to jedyna słuszna droga jeśli siezna angielski na pół gwizdka 😜 wiem już jak jedno przekręcone słowo potrafi zmienić znaczenie całego długiego zdania😅 

Trzecie pytanie(chyba ostatnie) 

mam sobie jakiś kod,zmienna krytyczną, która zostaje zmieniana w przerwaniu, ale też może być zmieniana w innym przerwaniu i jeśli to przerwanie ma wyższy priorytet to może dojść do "uszkodzenia" tej zmiennej..więc używam czegoś takiego 

  portENTER_CRITICAL_ISR(&timerMux3);
  //kod...
  portEXIT_CRITICAL_ISR(&timerMux3);

te critical_isr to taki odpowiednik atomic_block dla AVR (robią to samo tak?)

Link do komentarza
Share on other sites

Nie.

portEnterCritical (czy jak to tam, bez isr) blokuje przerwania. Ten z isr wywołuje się z przerwania (w sumie nie wiem po co bo nigdy się tym nie interesowałem).

A znanie na pół gwizdka może dawać lepsze wyniki niż translator.

Co Twoim zdaniem może znaczyć "Przedsiębiorstwo do Spock" (autentyk z translatora)?

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.