Skocz do zawartości

Czy, kiedy i dlaczego warto operować na rejestrach?


Pomocna odpowiedź

Napisano

Notka od administratora: poniższe posty zostały wydzielone z tego tematu: 

 

----

1 godzinę temu, Elvis napisał:

Chyba nie tylko na AVR można programować bezpośrednio do rejestrów

Pewnie. STM-y również, tylko po co? Pozwól więc, że rozwinę swoje stwierdzenie.

Po to wymyślili HAL żeby po rejestrach nie gmerać (przy czym nie mówię tu o wynalazku STM-a tylko o Hardware Abstraction Layer ogólnie). Po to Espressif opracował API, aby z niego korzystać.

Jeśli w danym języku programowania nie mam dostępu do owego API, to znaczy tyle, że ów język (w tym przypadku micropython) nie nadaje się do pewnych zastosowań.

Prosty przykład: stwórz w micropythonie na ESP32 zmienną, która przeżyje sprzętowy reset. Oczywiście nie chodzi mi o pchanie zmiennej do flasha czy jakiejś pamięci nieulotnej. Coś w rodzaju tego, co robię w Arduino IDE:

RTC_NOINIT_ATTR int zmienna;

 

Mam dzisiaj przed sobą cały dzień zabawy rejestrami i to w układzie trochę bardziej skomplikowanym niż AVR, a w sumie ESP32 i STM32 razem wzięte również. Dlatego napisałem poprzedni komentarz 🙂

Nie wiem, czy to nie jest zbytni offtopic, ale mogę zapewnić, że nie tylko w przypadku AVR programowanie na poziomie rejestrów jest używane. Faktycznie często ma miejsce w HAL, czy też jądrze systemu, albo raczej sterownikach.

Ale i tak kiedyś trzeba do rejestrów się odwołać i ktoś to musi napisać. Więc przećwiczenie na ESP32 mogłoby być interesujące moim zdaniem.

  • Lubię! 1
19 minut temu, Elvis napisał:

nie tylko w przypadku AVR programowanie na poziomie rejestrów jest używane

Elvis, błagam, nie łap mnie za słówka i sprawdź przy okazji znaczenie terminu "skrót myślowy".

A co do rejestrów ESP32... przypomina mi się pewna dykteryjka.

Sun Li uczył się u mistrza Ling Pao sztuki zabijania smoków. Po trzydziestu latach opanował tę sztukę do perfekcji. Cóż - nie było żadnego smoka, na którym mógłby znajomość owej sztuki wypróbować...

22 minuty temu, Elvis napisał:

i tak kiedyś trzeba do rejestrów się odwołać

Podaj konkretny przykład z ESP32 (pomijając ULP, ale tam też raczej fizycznymi rejestrami nie operujesz).

24 minuty temu, Elvis napisał:

Mam dzisiaj przed sobą cały dzień zabawy rejestrami

Możemy się zamienić - zabawa z tworzeniem filtrów do Adwordsów z uwzględnieniem błędnej pisowni i fleksji 🙂

 

Nie chciałem niczego się czepiać, łapać za słówka, ani tym bardziej wywoływać _burzy. O ile wiem do micropythona można dopisywać własne moduły w innych językach, jak chociażby w C, więc napisanie odpowiedniej biblioteki do brakujących peryferiów jest pewnie możliwe. Taka biblioteka zapewne będzie odwoływała się do rejestrów, stąd moja opinia, że umiejętność posługiwania się takimi narzędziami bywa przydatna.

4 minuty temu, ethanak napisał:

Podaj konkretny przykład z ESP32

Biblioteka, jakkolwiek by się nie nazywała (SDK, HAL) wewnętrznie używa rejestrów. Jeśli ktoś potrafi z rejestrów korzystać, może bibliotekę rozbudować o brakujące funkcje - tak samo dla C, jak i dla micropythona, Rusta, Go, czy JavaScriptu.

Sterowniki zawarte w jądrze Linux-a operują bezpośrednio na rejestrach - a działają często na nieco bardziej rozbudowanych układach od AVR. Więc zabawa rejestrami bywa przydatna, tym bardziej że w kodzie jądra nie zawsze można używać dziwnych bibliotek dostarczanych przez producenta.

  • Lubię! 1
(edytowany)
9 minut temu, Elvis napisał:

Taka biblioteka zapewne będzie odwoływała się do rejestrów

No, w przypadku ESP32 raczej będzie albo wywoływać funkcje z ROM-u, albo korzystać z API Espressifa dla C. Tym bardziej, że ESP32 to nie "jeden konkretny procesor" a kilka różnych, z różnymi architekturami włącznie i nie jestem pewien, czy mapa rejestrów dla DOWD będzie aktualna w przypadku RISC...

Aha, żadnej burzy tu nie chcę, ja po prostu stwierdziłem że w danym przypadku użycie micropythona mija się z celem. Tyle.

Edytowano przez ethanak

Nie znam niskopoziomowo ESP32, tym co mnie zawsze odpychało od tej architektury był właśnie brak dokumentacji dla niskopoziomowych funkcji - ale fakt że też nigdy za długo nie szukałem, więc jeśli coś np. dokumentacja asemblera jest dostępna, chętnie uzupełnię braki wiedzy.

A jeśli odpowiednie procedury są już w ROM, to użycie micropythona będzie jeszcze łatwiejsze - wystarczy je wywołać.

Przy okazji mała prośba do admina (@Treker) o wydzielenie offtopic-u. Strasznie zaśmieciliśmy wątek, a dyskusji o używaniu lub nie rejestrów o wiele bliżej do niedawno poruszanego wątku o programowaniu w asemblerze niż pytaniu o wybór platformy dla linefollowera.

18 minut temu, Elvis napisał:

zawsze odpychało od tej architektury był właśnie brak dokumentacji dla niskopoziomowych funkcji

Hm... ostatnio chciałem sobie przypomnieć funkcje do ADC. Mam je tutaj: https://docs.espressif.com/projects/esp-idf/en/v4.2/esp32/api-reference/peripherals/adc.html

Nie wiem, czego jeszcze byś potrzebował, mi to wystarczy...

A z wydzieleniem postów zgadzam się w stu procentach.

 

8 minut temu, Elvis napisał:

Przy okazji mała prośba do admina (@Treker) o wydzielenie offtopic-u.

Gotowe. To ciekawy temat, więc tutaj można dyskutować o samych rejestrach 🙂

Ja po prostu lubię rozumieć jak działa dany układ. W przypadku STM32, ale i wielu innych mikrokontrolerów, dostępna jest pełna dokumentacja do poziomu rejestrów, czyli w przypadku STM32L4 przykładowo: https://www.st.com/resource/en/reference_manual/rm0394-stm32l41xxx42xxx43xxx44xxx45xxx46xxx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

Reference manual najczęściej dokładnie opisuje działanie danego modułu, w przypadku ADC i STM32L4 mamy prawie 80 stron opisu, a dopiero później listę rejestrów. To bardzo cenna wiedza, pozwalająca nauczyć się o wiele więcej o sprzęcie niż tylko opis którą funkcję wywołać i z jakim parametrem.

Nawet jeśli później wykorzystamy gotową bibliotekę, powiedzmy CubeHAL, LL, czy nawet biblioteki Arduino, sprzęt i tak będzie działał w sposób opisany w RM, a biblioteki mają najczęściej o wiele gorszą dokumentację od dostarczanej przez producenta układu.

  • Lubię! 1

Jak pamiętacie napisałem w poście że podobno "nie warto" programować w arduino. zasłyszałem to od takiego jednego i dzisiaj udało mi się dopytać co miał na myśli. Stwierdził że mimo że arduino jest prostsze to jest mało przyszłościowe bo projektów komercjalnych na tym się już nie robi i na studiach lub przy pracy nad jakimś startupem też się go nie wykorzystuje. Moglibyście się do tego jakoś odnieść? Do pracy zawodowej jeszcze trochę daleko (do studiów 1,5 roku) ale może warto byłoby chociażby zdecydować się na esp idf ?

 

Ciężko jest generalizować, ale w pracy nigdy nie widziałem projektu opartego o biblioteki Arduino, prawdę mówiąc nic na ESP32 też nigdy nie spotkałem. W sumie mniej mnie zaskoczy Arduino niż ESP - no chyba że jako moduł wifi.

Najlepiej jest przeglądać oferty pracy, wtedy można zobaczyć jakie technologie są poszukiwane i cenione. O ile wiem Python jest znacznie bardziej ceniony niż Arduino, a o ESP nigdy nie słyszałem.

  • Lubię! 2

Edit: czyli przykładowo wchodzimy na https://nofluffjobs.com/pl i wpisujemy:

ESP32 - brak ofert

Arduino - 2 oferty od 6k do 11k PLN

STM32 - 3 oferty 6k do 20k PLN

Micropython - brak ofert

Python - 16 stron z ofertami... na pierwszej do 42k PLN

To chyba sporo wyjaśnia w kwestii wyboru technologii - o ile oczywiście chcemy na tym zarabiać.

  • Lubię! 1
21 minut temu, morteusz napisał:

Stwierdził że mimo że arduino jest prostsze to jest mało przyszłościowe bo projektów komercjalnych na tym się już nie robi

Moment, uściślijmy jedną rzecz.

Ty chcesz zrobić tego robota żeby pojechał na zawodach czy jako przygotowanie do przyszłej pracy? Bo jeśli to drugie - nie ma sensu pchanie się w ESP.

Jeśli natomiast chcesz żeby to pojechało na ESP - pchanie się w esp-idf to niespecjalnie dobry pomysł. Przede wszystkim z poziomu Arduino masz dostęp do 99.9% tego co daje esp-idf (te 0.1% to rzeczy, których raczej nie wykorzystasz), natomiast większość potrzebnych bibliotek jest właśnie pod Arduino. Poza tym przejście z Arduino na esp-idf jest w razie czego raczej bezbolesne (przecież nie ma różnicy czy daną funkcję z API wywołasz z kodu pisanego w Arduino czy nie), natomiast start jest łatwiejszy.

A zarabiać na ESP pewnie się da - w końcu to układ zaprojektowany przede wszystkim do IoT, a ta dziedzina ma raczej przyszłość. Nie wiem, nie sprawdzałem.

  • Lubię! 1

Wiadomo że nie uczę się esp żeby wejść na rynek pracy ale nawet do własnych projektów zgodzisz się chyba że lepiej używać aktualnych  rzeczywiście używanych rozwiązań żeby w razie czego nie musieć się uczyć od nowa a podobno micropythona można stosować nie tylko w esp. W tym przypadku raczej nie ma mowy o uczeniu się "od nowa" bo zdaje mi się że micropython  i arduino to głównie kwestia języka i ewentualnie ogarnięcie nowego ide dlatego postawię faktycznie na ardu.

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