Đây là một chủ đề lớn và tôi không thể đưa ra một câu trả lời đơn giản nhưng ...
Bạn có thể tiến gần hơn một chút đến câu trả lời này bằng cách chia nhỏ và chinh phục, và vì câu trả lời khác cố gắng tấn công vấn đề này từ quan điểm hw, tôi sẽ thử từ chế độ xem SW cấp cao.
Nếu bạn viết một số phần mềm bằng giả sử mã c (mức độ trừu tượng rất cao), bạn không thực sự thấy những gì đang xảy ra không thực sự hiểu tất cả những thứ người yêu mà bạn đang hỏi về.
Nhưng dù sao hãy bắt đầu từ đó.
Một chương trình đơn giản chỉ cần inc một biến.
int main(void)
{
int i=0;
while(1) {
i++;
}
}
Sau đó, chúng ta cần lấy mã trình biên dịch để chúng ta có thể hiểu những gì đang xảy ra. Bước này có thể được thực hiện trên bất kỳ nền tảng nào bạn sử dụng, nhưng để đơn giản, tôi sử dụng gcc trên máy tính (nhưng nó không quan trọng ...)
gcc -O0 -S main.c -o main.lst
Sau đó, chúng tôi kết thúc với một cái gì đó như thế này:
.file "main.c"
.text
.globl main
.type main, @function
main:
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
Sau đó, bạn cố gắng hiểu từng dòng mã và những gì nó làm.
Và sau đó bạn bắt đầu xem xét cách mọi hướng dẫn được thực hiện ... Ví dụ: subl
subl $16, %esp
Tại thời điểm này, nó khác nhau trên các kiến trúc khác nhau và x86, arm, pic là loại khác nhau ... Nhưng vì ví dụ của tôi là x86.
Và ở cấp độ này khi bạn đọc bản sao, hầu hết các hành động sẽ trông giống như bạn chỉ đang di chuyển số xung quanh, và trong một số ý nghĩa, đây là những gì đang xảy ra. Chúng tôi có một chương trình xác định trước mà chúng tôi bước qua, chương trình này được lưu trữ trong một loại bộ nhớ flash thường là một loại logic điện tử nào đó sẽ bẫy một mức logic.
Nếu bạn thấy một số loại " Flip-flop " cho mỗi bit thì bạn là người gần gũi, và sau đó chúng ta cần rất nhiều thứ đó. Ở đây chúng tôi bắt đầu để tìm những người và số không của bạn.
Sau đó, để một số hành động xảy ra, chúng tôi thêm một số logic thú vị có thể chuyển đổi một số thành một số khác (CPU tự nó).
Và sau đó chúng tôi theo dõi chương trình từng bước một và để biết chúng tôi có bộ đếm chương trình (PC) ở đâu. Và di chuyển các số trở lại và thứ tư và lưu trữ chúng trong một bộ nhớ khác cũng là một loại lưới có flip-flop.
Nhưng chúng ta hãy quay lại một số ví dụ cụ thể một lần nữa, để hiểu rõ hơn về CPU, chúng ta có thể xem ALU và bức tranh đơn giản này . Nơi bạn có thể thấy rằng khi chúng ta di chuyển dữ liệu vào khối logic này và chọn một số thao tác với các chân OP, chúng ta sẽ nhận được kết quả mới ở đầu ra. Rằng chúng ta lần lượt có thể di chuyển trở lại vào một nơi nào đó trong bộ nhớ.
Và lời nguyền ALU của bạn trong phần CPU của MCU của bạn phức tạp hơn cái này, nhưng nó hoạt động với cùng một nguyên tắc cơ bản.
Tại thời điểm này, chúng ta có thể thấy một số mạch logic thực hiện "hoạt động" ở một bên và một số lưu trữ ở phía bên kia. Và bộ lưu trữ có hai phần, một cho chương trình và một cho dữ liệu. Nhưng làm thế nào để chúng ta thực sự "di chuyển" sau đó, những thứ đó phải được kết nối theo một cách nào đó ...
Và đây là nơi chúng tôi kết nối những bộ phận đó với một số xe buýt.
Một bus chỉ là một số dây kết nối các phần khác nhau lại với nhau, và sau đó logic điều khiển sẽ cho bộ nhớ biết dữ liệu nào sẽ gửi lên bus này và phần nào của CPU sẽ nghe dữ liệu này được gửi. Và điều này được thực hiện với một số dòng điều khiển song song sẽ bật / tắt các phần khác nhau.
...
Vì vậy, nếu bạn chọn lựa một chương trình rất nhỏ và miễn là bạn không hiểu điều gì đang xảy ra, bạn sẽ mổ xẻ nó nhiều hơn cho đến khi bạn có một câu đố nhỏ có thể được sử dụng để tạo ra một "mcu".
Và đừng quên đọc bảng dữ liệu cho mcu của bạn và xem xét loại phần nào được tạo ra, như loại bộ nhớ, alu, bus, v.v.
Hy vọng điều này sẽ giúp một chút ???
Chúc may mắn