To duży temat i nie mogę udzielić prostej odpowiedzi, ale ...
Możesz podejść do tej odpowiedzi trochę bliżej, robiąc coś podzielonego i podbijającego, a ponieważ druga odpowiedź próbuje Aby zaatakować ten problem z punktu widzenia HW, spróbuję z perspektywy SW wysokiego poziomu.
Jeśli piszesz jakieś oprogramowanie w kodzie powiedzmy c (bardzo wysoki poziom abstrakcji), tak naprawdę nie widzisz to, co się dzieje, nie do końca rozumie wszystkie zakochane rzeczy, o które pytasz.
Ale i tak zacznijmy.
Prosty program, który po prostu zawiera zmienną.
int main (void) {int i = 0; while (1) {i ++; }}
Następnie musimy pobrać kod asemblera, abyśmy mogli zrozumieć, co się dzieje. Ten krok można wykonać na dowolnej platformie, z której korzystasz, ale dla uproszczenia używam gcc na komputerze (ale to nie ma znaczenia ...)
gcc -O0 -S main.c -o main.lst
Następnie kończymy coś takiego:
.file "main.c" .text.globl main .type main, @functionmain: pushl% ebp movl% esp,% ebp subl $ 16,% esp movl $ 0, -4 (% ebp) .L2: addl $ 1, -4 (% ebp) jmp .L2 .size main,.-Main .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3" .section. note.GNU-stack, "", @ progbits
Następnie próbujesz zrozumieć każdy wiersz kodu i co on robi.
A potem zaczynasz przyglądać się jak każda instrukcja jest wdrażana ... Na przykład podrzędna
subl $ 16,% esp
W tym momencie jest inaczej na różnych architekturach i x86, ramię, pic jest trochę inne ... Ale ponieważ moim przykładem był x86.
I na tym poziomie, kiedy czytasz kopię, większość działań będzie wyglądać tak, jakbyś po prostu przesuwał liczby i w pewnym sensie to jest to, co dzieje się.
Mamy predefiniowany program, przez który przechodzimy, ten program jest przechowywany w jakiejś pamięci flash, która jest zwykle rodzajem logiki elektronicznej, która uwięzi jeden poziom logiczny.
Jeśli widzisz coś w rodzaju „ Flip-flop” za każdym razem, oznacza to, że jesteś blisko, a wtedy potrzebujemy ich dużo. Tutaj zaczynamy znajdować jedynki i zera.
Następnie, aby wykonać jakąś akcję, dodajemy fajną logikę, która może przekształcić jedną liczbę w inną liczbę (sam procesor).
Następnie postępujemy zgodnie z programem krok po kroku i aby wiedzieć, gdzie jesteśmy, mamy licznik programów (PC). I cofnij liczby do tyłu i do czwartej i przechowuj je w innej pamięci, która jest także rodzajem siatki z przerzutnikami.
Wróćmy jednak do konkretnego przykładu, aby trochę lepiej zrozumieć procesor możemy rzucić okiem na ALU i to uproszczone zdjęcie. Gdzie widać, że kiedy przenosimy dane do tego bloku logicznego i wybieramy jakąś operację za pomocą pinów OP, otrzymamy nowy wynik na wyjściu, który z kolei możemy przenieść z powrotem w jakieś miejsce w pamięci.
I przeklinam, że twoja jednostka ALU w części procesora twojego MCU jest o wiele bardziej złożona niż ta, ale działa na tej samej podstawowej zasadzie.
W tym momencie możemy zobaczyć jakiś obwód logiczny, który „działa” po jednej stronie, a trochę pamięci po drugiej. Pamięć składa się z dwóch części, jednej przeznaczonej na program, a drugiej na dane. Ale jak właściwie to „przenosimy”, te muszą być w jakiś sposób połączone ...
I tu się łączymy te części z jakąś magistralą.
Magistrala to tylko kilka przewodów, które łączą ze sobą różne części, a następnie logika sterowania mówi pamięci, jakie dane mają wysłać na tę magistralę i jaką część procesora powinien nasłuchiwać tych danych, które zostały wysłane. Odbywa się to za pomocą kilku równoległych linii kontrolnych, które włączają / wyłączają różne części.
...
Więc jeśli weźmiesz swój wybrany MCU i przeanalizujesz bardzo mały program,
i dopóki nie rozumiesz, co się dzieje, analizujesz to jeszcze dokładniej, aż uzyskasz ładną małą łamigłówkę, której można użyć do stworzenia „MCU”.
I nie zapomnij przeczytać arkusza danych dla Twojego MCU i sprawdź, z jakich części został on wykonany, np. z jaką pamięcią, aluminium, autobusami itp.
Mam nadzieję, że to trochę pomoże ???
Dobrze szczęście