- RAM (Random Access Memory - Bộ nhớ truy cập ngẫu nhiên)
-
không gian làm việc tạm thời" của vi xử lý. Nó xử lý dữ liệu đang được sử dụng ngay tại thời điểm hiện tại.
-
Đặc tính lưu trữ: Dễ bay hơi (Volatile). Khi mất nguồn điện, toàn bộ dữ liệu trên RAM sẽ biến mất sạch sẽ.
-
Tốc độ: Cực kỳ nhanh. CPU có thể đọc và ghi dữ liệu trực tiếp vào bất kỳ vị trí nào trên RAM gần như ngay lập tức.
-
Lưu trữ các biến số (variables), stack, heap và các giá trị tính toán thay đổi liên tục trong quá trình chương trình đang chạy.
2. ROM (Read-Only Memory - Bộ nhớ chỉ đọc)
-
chứa các dữ liệu cố định, thường được nhà sản xuất nạp sẵn và rất hiếm khi (hoặc không bao giờ) bị thay đổi.
-
Đặc tính lưu trữ: Bất biến (Non-volatile). Dữ liệu vẫn được giữ nguyên ngay cả khi tắt nguồn.
-
Tốc độ: Chậm hơn RAM khá nhiều. Việc ghi dữ liệu lên ROM thường rất khó khăn, đòi hỏi quy trình đặc biệt hoặc hoàn toàn không thể ghi lại (tùy thế hệ ROM).
-
Vai trò: Lưu trữ các đoạn mã thiết yếu để khởi động hệ thống (như System Bootloader của chip từ nhà máy hoặc BIOS/UEFI trên máy tính cũ).
3. Flash
-
tiến hóa từ ROM (cụ thể là công nghệ EEPROM), kết hợp được khả năng lưu trữ vĩnh viễn của ROM và khả năng ghi/xóa linh hoạt hơn.
-
Đặc tính lưu trữ: Bất biến (Non-volatile). Tắt điện không mất dữ liệu.
-
Tốc độ: Nhanh hơn các ổ cứng cơ học và ROM cũ, nhưng vẫn chậm hơn RAM. Đặc biệt, thao tác ghi/xóa trên Flash bắt buộc phải thực hiện theo từng "khối" (block/sector) chứ không thể ghi từng byte đơn lẻ nhanh như RAM. Mạch Flash cũng có tuổi thọ giới hạn về số lần ghi/xóa.
-
Là bộ nhớ lưu trữ chính hiện nay. Ổ cứng SSD, USB, thẻ nhớ, và không gian lưu trữ Firmware trong các vi điều khiển hiện đại đều sử dụng bộ nhớ Flash.
II. Các phần bộ nhớ lưu trữ phần tử gì
1. Những phần tử nằm cố định ở Flash (Bộ nhớ chỉ đọc)
-
Mã lệnh (Text/Code Segment): Toàn bộ các dòng lệnh C sau khi biên dịch thành mã máy sẽ nằm ở đây. Vi xử lý sẽ đọc (fetch) từng lệnh trực tiếp từ Flash để thực thi.
-
Dữ liệu hằng số (RoData - Read-Only Data): * Bất kỳ biến nào bạn khai báo với từ khóa
const(ví dụ:const float PI = 3.14159;).-
Các chuỗi ký tự cố định (string literals). Ví dụ: Trong lệnh
printf("Error: Motor Overload");, đoạn text"Error: Motor Overload"sẽ được cất giữ vĩnh viễn trong vùng Flash. - Các số: 5,...
-
2. Trên RAM:
-
1. Data Segment (Vùng dữ liệu đã khởi tạo): * Chỉ chứa: Các biến toàn cục (global) và biến
staticđã được gán sẵn một giá trị khác 0 ngay từ đầu.-
Ví dụ:
int global_var = 100;hoặcstatic int count = 5;
-
-
2. BSS Segment (Vùng dữ liệu chưa khởi tạo):
-
Chỉ chứa: Các biến toàn cục (global) và biến
staticchưa được gán giá trị hoặc được gán bằng 0. -
Ví dụ:
int score;hoặcstatic int status = 0;
-
-
3. Heap (Vùng nhớ cấp phát động):
-
Chỉ chứa: Những mảng/vùng nhớ mà bạn chủ động xin cấp phát thủ công bằng các lệnh như
malloc(),calloc(),realloc(). Vùng này do lập trình viên tự quản lý (phải tự xóa bằng lệnhfree()).
-
- 5. Stack (Ngăn xếp): Tất cả những phần tử còn lại sẽ vào Stack!