Skocz do zawartości

Ile czasu trwa start RTOS / dyskusja wydzielona


Gość es2

Pomocna odpowiedź

25 minut temu, FlyingDutch napisał:

Cześć es2,

jeśli są na tym forum osoby, które znają RTOS'a to Elvis na pewno do nich należy.

Skoro tak,to niech napisze ile RTOS na ESP będzie stratował. Skoro jest ekspertem w tej dziedzinie to z pewnością to wie. Ja napisałem ile stratuje mi STM32F1xx z stanby, dla eksperta od RTOS chyba nie problem aby napisać ile to trwa? Chyba, ze jednak ekspertem nie jest, coś tam liznął i teraz się mądrzy a odpowiedź na proste pytanie jest ponad jego miarę!

Nie będę studiował nic o RTOS bo jest mi na razie niepotrzebny! Jak RTOS startuje na STM32F1xx 12MHz w 500us to może się nim zainteresuję. Jak startuje 500ms to nie potrzebuje takie chłamu, bo jak już 500ms to i pewnie 30sekund można poczekać i na Raspberry sobie zrobię. Od LInuxa to akurat ekspertów mam.

 

Edytowano przez es2
Link do komentarza
Share on other sites

To nawet intrygujące jak pisanie głupot może wciągać - ale chociaż może nowy kurs stm32 będzie miał dzięki tej dyskusji odcinek o FreeRTOS 😉

W każdym razie na STM32F030 start systemu, konfiguracja PLL na 48MHz i zapalenie diody zajmuje 0,42ms. FreeRTOS z jednym taskiem to samo osiąga po 2,87 ms. Różnica to najprawdopodobniej alokacja buforów pamięci i pewnie można byłoby to optymalizować, tylko po co. Mam nadzieję, że te wyniki będą zachętą do dalszej nauki zamiast przemądrzania się na przeróżne tematy.

Link do komentarza
Share on other sites

22 minuty temu, Elvis napisał:

W każdym razie na STM32F030 start systemu, konfiguracja PLL na 48MHz i zapalenie diody zajmuje 0,42ms. FreeRTOS z jednym taskiem to samo osiąga po 2,87 ms

Pomijając "o pisaniu głupot", sam napisałeś, że RTOS startuje  ok 6,8 RAZA dłużej, co przy zasilaniu bateryjnym oznacza 6,8raza większy średni pobór prądu. Zgada się? Jeśli się mylę, to popraw mnie!

Nie wiem jakim cudem masz te 420us przy 48MHz skoro u mnie wyszło 100us przy 12MHz! Albo ja się pomyliłem, alboTy! Coby nie było, nawet te 420us to przepaść w stosunku do prawie 3ms.Zgodzisz się, czy nadal będziesz brnął w swoje wątpliwe racje?

Teraz napisz ile stratuje ESP! Moja uwaga co do RTOS odnosiła się, do użycia go w ESP. Ile stratuje ESP? Czy potrafisz skrócić ten czas? Jeśli tak, to będziesz mógł "może nowy kurs stm32 będzie miał dzięki tej dyskusji odcinek o FreeRTOS" napisać w odniesieniu do tego tematu, czyli RTOS na ESP. Ja będę miał natomiast okazje napisać "To nawet intrygujące jak pisanie głupot może wciągać" zwłaszcza, jak się nie do końca na czymś zna a próbuje się udawać eksperta!

@Elvis, odpocznij, dokształć się i wtedy błyskaj wiedzą, bo jak na razie to się ośmieszasz! Nie znając RTOS wiedziałem, że będzie dłużej stratował! Nie wiedziałem, że aż tak długo a jednocześnie tak krótko ale nie ma mowy o ESP, który w/g moich informacji startuje koszmarnie długo. Ale ja ekspertem od RTOS nie jestem, mogłem nie wiedzieć. Ekspert natomiast, musiał sprawdzić organoleptycznie ile czasu startuje RTOS. Ekspert powinien mniej więcej to wiedzieć ale nie wiedział.Nie wstyd Ci?

 

Edytowano przez es2
Link do komentarza
Share on other sites

Ja mam już dosyć tego offtopu, wydawało mi się, że każdy zrozumiałby już różnicę między RTOS-em, a pełnym systemem operacyjnym. Oczywiście im większy i bardziej rozbudowany jest program, tym dłużej startuje, ale ja tego nigdy nie negowałem - napisałem tylko że 1 sekunda to zupełna bzdura, która pokazuje że ten kto pisze takie głupoty, nie zna się zupełnie na temacie RTOS-ów.

Więc w temacie RTOS-ów, @es2 piszesz głupoty. W kwestii zasilania - też. Nie wiem, na czym się znasz, ale chyba nie na elektronice. Proponuję wrócić do oryginalnego tematu, pomóc autorowi wątku - albo wybrać się na spacer. Co ja akurat zamierzam uczynić.

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

6 minut temu, Elvis napisał:

napisałem tylko że 1 sekunda to zupełna bzdura, która pokazuje że ten kto pisze takie głupoty, nie zna się zupełnie na temacie RTOS-ów.

Ile startuje ESP? Napisz w końcu!

 

Co do zasilania,to popraw moje obliczenia! Co do STM32 i AVR, którego pobór prądu i czas startu w pamięci mogę liczyć jestem pewny.  Co do ESP czy Raspberyy mogę się mylić ale nie pisz, że piszę głupoty, napisz KONKRETNIE JAKI JEST POBÓR PRĄDU i JAKI CZAS STARTU ESP! Bo, że ktoś pisze głupoty, to łatwo się pisze, trudniej to udowodnić, zwłaszcza jak się na czymś nie zna!

Gdzie mogłem dałem konkretne liczby, czekam na takie wyliczenia z Twoje strony! Wydaje mi się, ze coś tam wiesz,słyszysz, że dzwonią ale nie wiesz, w którym kościele.

 

Edytowano przez es2
Link do komentarza
Share on other sites

ESP8266 startuje mi w ok 2 sekundy. Da się to przyspieszyć?

Nie wymagam aby było to 100us jak  w na STM32F1xx ale kilka ms może być. Osiągalne dla ESP?

Link do komentarza
Share on other sites

U mnie ESP8266 startuje 521 ms - tzn. wtedy zaczyna działać task użytkownika. Wykorzystuję płytkę Wemos D1, poniżej wynik pomiarów. Pierwszy kanał to reset, drugi dioda, która sobie miga żeby pokazać że program już działa:

2018-10-22-163856_1918x1059_scrot.thumb.png.731ec78e98c580cca4551df339b8eff6.png

Oczywiście nie jest to pierwszy kod uruchamiany przez esp8266, więc jeśli tego dotyczyło pytanie - to oczywiście można wykonać program dużo szybciej.

Pierwsze co rzuca się w oczy to komunikaty podczas uruchamiania systemu - są piękne, ale zabierają cenny czas. Po zmianie poziomu gadatliwości do raportowania jedynie błędów, włączeniu optymalizacji kodu, czas startu spada do niecałych 300 ms:

2018-10-22-164626_1918x1059_scrot.thumb.png.cb0529742c9d16a81904a16763eaae32.png

Teraz można wypadałoby się zastanowić, jak wygląda start ESP8266 - na szczęście dostępna jest zarówno dokumentacja, jak i kody źródłowe.

Okazuje się, że start tego układu bardziej przypomina start mikroprocesora, niż mikrokontrolera. Odbywa się on w kilku etapach, w każdym wykonywany jest kolejny fragment programu. Najpierw startuje kod z pamięci ROM - do niego pewnie nie uda się dobrać. Następnie ładowany i uruchamiany jest tzw. bootloader, który wczytuje i uruchamia główną aplikację. To w niej jest kod FreeRTOS-a oraz nasz program.

Ponieważ kod bootloadera jest dostępny, można w nim pogrzebać. Można np. sprawdzić w nim czy warto startować system i jeśli nie to nie.

Ja nadal zostanę przy zapalaniu diody jako teście - ale kod umieszczam w bootloaderze. Teraz czas od zwolnienia reset-u do wykonania mojego kodu i zapalenia diody to 64ms:

2018-10-22-170825_1918x1059_scrot.thumb.png.5b7e6972e3f3f80291ca299f7a04ad0d.png

 

Moim zdaniem te 64ms to dolna granica, chociaż może przekopując się przez całą dokumentację układu dałoby się coś jeszcze urwać. Z drugiej strony to chyba i tak niezły wynik - wspomnę tylko na koniec, że to nie ma nic wspólnego z RTOS-em, jest to więc offtop do off-topu i przykład na to jak beznadziejne dyskusje bywają wciągające 🙂

Edytowano przez Elvis
  • Lubię! 2
Link do komentarza
Share on other sites

Ok500ms bez kombinowania, 64 jak się pomęczyć. Kiepski wynik. Gdy budzę ESP co 200ms, 64ms zabierze start, to bateria szybko padnie. Budzenie co 200ms gdy startuje 500mm, nie ma najmniejszego sensu. Musze też sprawdzić, czemu u mnie staruje ok 2 sekundy. Nie pamiętam nazwy płytki, ale ma ona OLED 128x64.

Może ESP32 startuje szybciej? Nigdy tego nie sprawdzałem. Z ESp8266 jako system mikroprocesorowy zrezygnowałem dawno temu. Jeśli coś będę robił to tylko na ESP32. Na razie się trochę nim pobawiłem (ESP32 też mam z OLED) i leży w szufladzie.

Link do komentarza
Share on other sites

Jeszcze na wypadek jakby ktoś chciał sam powtórzyć moje eksperymenty zamieszczam kod programu:

#include "freertos/queue.h"

#include "driver/gpio.h"

#include "esp_log.h"
#include "esp_system.h"

void app_main(void)
{
    gpio_config_t pin_conf;

    pin_conf.pin_bit_mask = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_16;
    pin_conf.mode = GPIO_MODE_OUTPUT;
    pin_conf.pull_up_en = 0;
    pin_conf.pull_down_en = 0;
    pin_conf.intr_type = GPIO_INTR_DISABLE;
    gpio_config(&pin_conf);

    while (1) {
        gpio_set_level(GPIO_NUM_4, 1);
        vTaskDelay(200 / portTICK_RATE_MS);
        gpio_set_level(GPIO_NUM_4, 0);

        gpio_set_level(GPIO_NUM_5, 1);
        vTaskDelay(200 / portTICK_RATE_MS);
        gpio_set_level(GPIO_NUM_5, 0);

        gpio_set_level(GPIO_NUM_16, 1);
        vTaskDelay(200 / portTICK_RATE_MS);
        gpio_set_level(GPIO_NUM_16, 0);

    }
}

Niestety z poziomu bootloadera biblioteki nie są dostępne, zostało więc stare dobre grzebanie w rejestrach. Do funkcji call_start_cpu (plik ESP8266_RTOS_SDK/components/bootloader/subproject/main/bootloader_start.c)  dopisałem następujący fragment:

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO4);
    GPIO_REG_WRITE(GPIO_ENABLE_W1TS_ADDRESS, 1u << 4);
    GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, 1u << 4);

Bootloader jest mocno ograniczony jak chodzi o objętość kodu, ale proste przetestowanie stanu urządzenia można za pomocą rejestrów jak najbardziej wykonać.

ESP32 raczej będzie startować tylko wolniej. 64 ms to i tak bardzo dobry wynik - trzeba pamiętać, że to obejmuje uruchomienie zewnętrznego kwarca, PLL, wczytanie kodu bootloadera z zewnętrznej pamięci flash to musi trwać.

W przypadku mikroprocesorów stosuje się nieco inne podejście - układ jest tylko częściowo usypiany, np. w zadaniu idle. Wtedy powrót do działania zajmuje mikrosekundy - chociaż pobór prądu jest oczywiście znacznie wyższy.

Inna możliwość to dodanie niskomocowego mikrokontrolera, który decyduje kiedy ma uruchomić główny układ. W projekcie przy którym pracuję używany był do tego MSP430, który pracował kilka lat na baterii. Natomiast główny procesor był budzony dopiero gdy miał coś do zrobienia - i to zajmowało czas, jak i kosztowało nieco mocy.

Niestety taka jest zależność - im bardziej rozbudowany układ, tym więcej prądu pobiera i dłużej trwa jego inicjalizacja. Praw fizyki się nie oszuka - to nie elektroda.

  • Lubię! 2
Link do komentarza
Share on other sites

2 godziny temu, Elvis napisał:

ESP32 raczej będzie startować tylko wolniej. 64 ms to i tak bardzo dobry wynik - trzeba pamiętać, że to obejmuje uruchomienie zewnętrznego kwarca, PLL, wczytanie kodu bootloadera z zewnętrznej pamięci flash to musi trwać.

Zapomniałem, że ESP, podobnie jak Raspberry czy niektóre 8051 (np ten który zastosowano w SaleAE) albo układy FPGA, wczytuje program z zewnętrznej pamięci (w przypadku 8051 kiedyś EEPROM po I2C, teraz przez USB) do RAM i tam go wykonuje. Nie ma więc szans na szybki start ESP.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.