Skocz do zawartości

Ścieżka rozwoju dla przyszłego architekta embedded. Szukam dwóch książek.


Pomocna odpowiedź

Napisano

Cześć wszystkim!

Mam 13 lat i w przyszłości chcę projektować systemy wbudowane jako architekt. Nie zależy mi tylko na samym pisaniu prostego kodu dla jednej płytki, ale chcę nauczyć się projektować działanie całego urządzenia. Interesuje mnie ujęcie systemowe:

Projektowanie architektury oprogramowania i komunikacji (SPI, I2C, UART, CAN itp.).

Planowanie przepływu zadań procesora (harmonogramowanie, maszyny stanów).

Kontrola czasu operacji, obsługa przerwań i sekcji krytycznych.

Mechanizmy "safety" – co ma zrobić układ, jeśli procesor się zawiesi lub dany proces zajmie mu zbyt dużo czasu.

Dodatkowo wiem, że do samego projektowania nie trzeba znać każdego tranzystora, ale myślę, że jak poznam procesor od podstaw – od bramek logicznych, przez działanie pamięci RAM i ROM, aż po sam rdzeń – to będę dużo lepiej rozumiał sprzęt. Łatwiej mi będzie wtedy pisać niezawodny kod i diagnozować dziwne błędy na styku hardware i software.

Jeśli chodzi o mój obecny poziom, to potrafię już robić własne prototypy i kojarzę trochę teorii (na przykład wiem, że SPI jest szybsze niż inne protokoły komunikacyjne). Nie potrafię jednak jeszcze samemu napisać od zera całego kodu w C++.

Z tego powodu szukam dwóch oddzielnych książek po polsku, które mogłyby stać się główną osią mojego rozwoju na najbliższe lata:

Pierwszej – skupionej na architekturze oprogramowania, niezawodności, systemach czasu rzeczywistego (RTOS) i logicznym planowaniu systemu.

Drugiej – skupionej na architekturze samych komputerów/procesorów, która krok po kroku wyjaśni mi sprzęt od bramek logicznych i pamięci aż po rdzeń.

Co konkretnego byście mi polecili w tych dwóch kategoriach, żeby dobrze to zrozumieć i zgrać z moimi obecnymi umiejętnościami?

  • Lubię! 1
(edytowany)

@Teodor26 Hej. Widziałem twój profil i twoje odpowiedzi są spójne i rzeczowe. Cieszę się że tu zajrzałeś. Ja też lubię zrozumieć od podstaw dlaczego coś działa. Odpowiedzi jek to działa nie są dla mnie satysfakcjonujące. Piszesz , że masz 13 lat i prosisz o pomoc... Nie wiem jakie masz umiejętności i szczerze nie umiem Tobie doradzić, jakie źródło wiedzy jest Tobie potrzebne by efektywnie się rozwijać. Jeżeli chcesz programować układy fpga lub cpld i nie wiesz jak zacząć skorzystaj z książki "Układy programowalne dla początkujących" Andrzej Pawluczuk. Podstawy procesora najbardziej zrozumiale opowiada Pan Jakub na kanale YouTube "Mera400". Podstawy C++ moim zdaniem, YouTube "Kanał o Wszystkim". Jak chcesz zrozumieć bramki logiczne to poznaj koniecznie redukcję bramek metodą Karnaugha, Algebra Boole'a tez bardzo przydatna (osobiście nie lubię bo nudne). Jeżeli chcesz zrobić urządzenie to zrozumienie arytmetyki w przetwarzaniu danych w bramkach logicznych jest kluczowe i musisz poświęcić trochę czasu by rozpoznać zależności. Moim zdaniem, najważniejszy w procesorach jest timming, a nie sposób przetwarzania danych... SPI, UART itd możesz zrozumieć czytając specyfikacją układów z którymi się chcesz fizycznie połączyć (PDF jest jak Biblia, tam znajdziesz odpowiedzi)
Zawieszenie działania programu w procesorze patrz Watchdog. to dość niezawodne rozwiązanie. chodzi o to by co jakiś czas kasować licznik Watchdog w kodzie programu. jak kod się zawiesi to licznik dojdzie do overflow i wywołuje reset i program startuje od nowa.

Edytowano przez kroszkanorber
  • Lubię! 1
  • Pomogłeś! 1

Dzięki za odpowiedź. Szczerze mówiąc, nie widziałem jeszcze nigdy tych kanałów na YouTube. Kiedyś oglądałem pana z RS Elektronika. Z tym Watchdog nie rozumiem jednej rzeczy – jeżeli procesor się zawiesił, to nie jest w stanie liczyć czasu. Timer leci, ale procesor nie "myśli", więc o niczym nie wie. Jak na razie znalazłem książkę "Programowanie współbieżne. Systemy czasu rzeczywistego" Pawła Majdzika. Przy niektórych książkach po prostu "zasypiam", to znaczy, że podświadomie czytam literki, ale myślę o czymś innym. Tak miałem przy książce Mariana Doległo "Podstawy elektrotechniki i elektroniki". Przejrzałem fragment książki Majdzika i tę czytało mi się dobrze. Co myślisz o tym wyborze?

(edytowany)

@Teodor26 RS Elektronika podaje treści w bardzo ogólnej formie. Każdy uczy się jak lubi... Nie mogę się donieść do tych książek ponieważ ich nie czytałem. (nie pomogę). Uczyłem sie programując i czytając treści wybiórczo z internetu. Książki są pewnie ok i zawsze się czegoś dowiesz...

Watchdog to licznik sprzętowy i działa niezależnie od procesora. Posiada wejście reset, a kasujesz licznik kodem w programie zanim się przepełni.

Przepełnienie licznika Watchdog jest wykrywane przez dekoder, który podaje sygnał kasowania licznika programu (PC).

Licznik programu jest programowalnym licznikiem binarnym i dzięki temu możesz wykonywać skoki np 3 instrukcje do przodu.

Licznik programu = adres instrukcji ponieważ wyjściami licznika sterujesz bezpośrednio wejściami adresowymi pamięci programu, a dane pod tym adresem zapisane w tej pamięci to są instrukcje dla procesora.

Podsumowując gdy licznik programu wskazuje na 4 ('100') do znaczy że adresujesz 4 komórkę pamięci, a kodem pod tym adresem zapisanym w tej pamięci może być na przykład "nop" (nie wykonuj żadnej operacji). W tym przypadku licznik programu po wykonanej (pustej) operacji zwiększy swoją zawartość o 1 i będzie równy 5. Itd... W sumie proste jak budowa cepa, tylko trzeba zrozumieć idee. Komplikacje zaczynają się w dekodowaniu instrukcji, ale do tego jeszcze możemy wrócić w innym czasie.

Edytowano przez kroszkanorber
  • Lubię! 1

@Teodor26 bardzo podoba mi się , że chcesz się wiele nauczyć, ale nie możesz czytać książek o zbyt wysokim poziomie jak nie znasz podstaw. Rozumiem podstawy są nudne - człowiek (chyba każdy), chce  od razu pojąć wszystko. Niestety lepiej iść jak żółw , a dalej dojdziesz niż zając. Proponuje Arduino bo jest proste i można się dobrze bawić przy małym nakładzie intelektu 🙂 (przynajmniej ja tak mam). Ale jeszcze raz Powodzenia !!!!

  • Lubię! 1
Dnia 27.07.2026 o 19:59, Teodor26 napisał:

Z tym Watchdog nie rozumiem jednej rzeczy – jeżeli procesor się zawiesił, to nie jest w stanie liczyć czasu. Timer leci, ale procesor nie "myśli", więc o niczym nie wie.

Zazwyczaj jak procesor się zawiesił, to watchdog jest w stanie liczyć czas. Raczej zawiesza się tylko jakiś kawałek procesora. Żeby watchdog przestał działać, to by musiał się zepsuć układ taktujący itp. np. zewnętrzny kwarc, więc jak się procesor zawiesi to w większości przypadków watchdog działa. Zresztą są czasami dwa rodzaje watchdoga (np. w STM32): jeden pracuje z tym samym zegarem co procesor , a drugi z jest niezależny od zegara procesora. 

 

Jeśli chcesz się trochę nauczyć jak działa procesor, to polecam kanał Bena Eatera. Możesz też spróbować zagrać w Nandgame.

 

Zgadzam się z moim poprzednikiem, że najlepiej najpierw zacząć od Arduino. Niektóre rzeczy z niego przydadzą Ci się później, np. będziesz wiedział jak działa jakiś interfejs, jak coś do niego podłączyć albo co robi ADC. Przy czym ja bym polecił płytkę Arduino z mikrokontrolerem architektury AVR, najlepiej z ATmega328 (np. Arduino Uno Rev3 - A000066 lub Arduino Nano - A000005). Potem możesz programować mikrokontroler na płytce Arduino na rejestrach, co jest stosunkowo łatwe w przypadku tych mikrokontrolerów o których piszę niż jak być chciał programować w taki sposób coś współczesnego. Łatwo też znaleźć pomoc. Wtedy zaczyna się prawdziwy rozwój, bo uczysz się pisać procedury przerwań, maszyn stanów, używać timerów, podstaw planowania architektury programu. Dopiero potem warto uczyć się nowszych mikrokontrolerów, i tu są dobre STM32.

(edytowany)

@kroszkanorber  Ciekawe i to wszystko mieści się w takim małym mikrokontrolerze… . Jak na razie sprawdzę książkę Pawła Majdzika. Nauka z internetu też jest dobra, ale ja ją wykorzystuję przy wybiorczych tematach i datasheetach. Wolę jednak trzymać się kolejności nauki z podręczników, bo tutaj mam pewność że będę wiedział mniej więcej wszystko co mi jest potrzebne (chociaż tutaj człowiek nigdy się wszystkiego nie nauczy) do stworzenia projektu. Nie chciałbym utknąć w połowie projektu i siedzieć tydzień przed teorią, bo nie dowiedziałem się wcześniej (kiedy był na nią czas) jak np. odfiltrować zakłócenia czujnika. Dzięki za wyjaśnienie tego Watchdoga.@Santiago  Tak, zgadzam się z Tobą. Elektroniką zajmuję się już prawie rok i na początku faktycznie zacząłem od mikrokontrolerów (chociaż mój pierwszy program był na ESP32-S3, a Arduino UNO leży w szafce), ale to był początek – musiałem przejść do teorii, bo jedynie ona pokaże mi jak to wszystko wygląda na poziomie krzemu i bramek logicznych. W Arduino IDE wpiszę:

void setup() {
pinMode(5,INPUT_PULLUP);
Serial.begin(115200);

}

void loop() {
Serial.println(digitalRead(5));
delay(100);
}


i wszystko działa. Nie muszę przejmować się tym, jak dane są rozmieszczane w pamięci ani wieloma szczegółami działania sprzętu. Rozbudowane biblioteki są bardzo wygodne, ale mogą utrudniać zrozumienie tego, co dzieje się na poziomie sprzętu, oraz analizę czasu wykonania kodu. Dlatego chciałbym najpierw poznać podstawy działania mikrokontrolerów. Mówisz, że ta książka jest za trudna – czy jesteś w stanie podać jakiś tytuł, który byłby bardziej na moim poziomie?

@74HC04  Dzięki że wytłumaczyłeś. Nie wiedziałem że w niektórych mikrokontrolerach są dwa timery! Miałeś na myśli też rdzenie ("Raczej zawiesza się tylko jakiś kawałek procesora.")? Jeżeli dobrze zrozumiem działanie mikrokontrolera i nauczę się rozwiązywać takie problemy, to później łatwiej będzie mi pisać programy w C++. W książkach i w internecie jest już mnóstwo wiedzy, więc nie muszę wszystkiego odkrywać samodzielnie. Na razie będę ćwiczył w symulatorze (Taki prostszy to Falstad.com, a trudniejszy to aplikacja Qucs-S).

Edytowano przez Teodor26
Błąd formatowania kodu.
36 minut temu, Teodor26 napisał:

Nie wiedziałem że w niektórych mikrokontrolerach są dwa timery!

Chodzi Ci o watchdogi, które są specjalnymi timerami resetującymi MCU. Nie każdy timer jest watchdogiem. Mikrokontrolery mają jeszcze mnóstwo timerów ogólnego przeznaczenia, które służą do innych rzeczy np. generowania PWM, cyklicznych przerwań itp.

  • Lubię! 1
42 minuty temu, Teodor26 napisał:

Nie wiedziałem że w niektórych mikrokontrolerach są dwa timery!

Żeby tylko dwa 🙂 

43 minuty temu, Teodor26 napisał:

Miałeś na myśli też rdzenie ("Raczej zawiesza się tylko jakiś kawałek procesora.")?

Niekoniecznie rdzenie, czasem można zapomnieć o odpowiednim przełączaniu rejestrów peryferiów i wtedy konkretny moduł się zawiesza np. UART (chociaż w tym przypadku trzeba się nieco postarać).

Ogólnie w mikrokontrolerach kod programu to tylko jakaś część funkcjonalności i informuje on konkretne podukłady jak mają działać. Jeżeli zawiesi się program to rzeczy typu UART raczej nie będą działały, ale za to np. miganie diodą za pomocą timera czy watchdog już jak najbardziej. Nawet ten nieszczęsny UART może wysyłać wiadomości w specyficznych przypadkach (gdy jest kontrolowany przez DMA).

  • Lubię! 1

@Teodor26 to zawieszenie procesora czy uC, to nie jest do końca tak, po prostu on sobie działa ale już w swoim wymiarze , a PilnującyPies po prostu jak nie otrzyma w odpowiednim czasie jedzenia to zaczyna wyć :), aż wszystkich obudzi ze snu :), zdaje się że Stmy mają 2 te pieski 🙂

 

  • Lubię! 1

@Santiago @H1M4W4R1 @74HC04  Bardzo dziękuję Wam wszystkim za tak potężną dawkę wiedzy sprzętowej! Dyskusja o działaniu Watchdoga i mikrokontrolerów STM jest niesamowicie ciekawa, ale widzę, że trochę odpłynęliśmy od mojego głównego pytania.
Chciałbym na tym etapie zatrzymać dyskusję o samej architekturze procesorów, dopóki nie zdobędę solidniejszych podstaw teoretycznych. Tak jak pisałem, mój sposób nauki najlepiej sprawdza się przy uporządkowanych podręcznikach, żeby nie utknąć w połowie drogi.
Chciałbym więc wrócić do sedna mojego wątku. Skoro wspomniana przeze mnie książka Pawła Majdzika o systemach czasu rzeczywistego może być dla mnie w tym momencie za trudna ze względu na akademicki język, to jaki konkretny tytuł książki (najlepiej po polsku) polecacie mi jako tę główną oś rozwoju (jako pierwsza książka stricte o architekturze systemów embedded)?

@Teodor26 Wątpię w to, czy znajdziesz książkę,  która wszystko wyjaśni od podstaw. Procesory to nie jedna architektura powielana i udoskonalana. To zagadnienie jest trochę bardziej skomplikowane. Procesory mają różną budowę i nie działają tak samo na poziomie sprzętowym. Są procesory które działają bez zegara i też jest parę odmian. To co szukasz to nie jedna książka tylko biblioteka. Zacznij od prostego kontrolera byś zrozumiał jak przepływają dane w każdym cyklu instrukcji, napisz program w assemblerze byś nauczył się jakie instrukcje są przypisane dla twojego kontrolera. Porównaj z innym kontrolerem i zrozumiesz że nie wszystkie są takie same. Nie staraj sie zrozumieć spraw które wynikają z zagadnień podstawowych o których nie masz pojęcia, bo niedługo zderzysz się ze ścianą niewiedzy (szkoda czasu).

  • Lubię! 2

@Teodor26 to co napisał @kroszkanorber to 100% fakty ! 30 lat temu pisałem w Asemblerze programy - ale z książki i działały, niewiele z tego rozumiałem. 40 lat temu na Atari - to już była super zabawa - wszystko proste. Zacznij od Atmegi 328P na Arduino. Tam jest dosłownie wszystko co może Tobie pomóc iść dalej.

A jak chcesz poznać jak działają rejestry to przejdź kurs elektroniki cyfrowej na Forbocie. Ja osobiście znając te rzeczy od kilkudziesięciu lat zakupiłem zestaw z kursu i sobie go spokojnie przeszedłem. 

Jest takie przysłowie " Śpiesz się powoli"  - ja też tego nie przestrzegam :), no ale warto wiedzieć .

A tak na marginesie to dzisiaj jadąc do pracy na rowerze , wpadłem na pomysł abyś sam sobie taki rejestr napisał na Arduino. Niech Ardu 8 bitowe zacznie nieco emulować jakiś układ 4 bitowy (na przykład)

  • Lubię! 1

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