RMW vs. Bit-band

Cuộc chiến Thao tác Bit trong Vi điều khiển

❗️

Một bit sai, cả hệ thống sập!

Trong các hệ thống nhúng, việc thay đổi một bit duy nhất trong một thanh ghi là thao tác cơ bản nhưng đầy rủi ro. Một xung đột nhỏ có thể dẫn đến lỗi dữ liệu nghiêm trọng. Hai phương pháp chính để giải quyết bài toán này là Read-Modify-Write (RMW) và Bit-band.

Khám Phá Read-Modify-Write (RMW)

Quy trình 3 bước cổ điển

RMW là phương pháp mặc định, thực hiện thay đổi bit thông qua một chuỗi ba hành động tuần tự.

1

Đọc (Read)

Đọc toàn bộ giá trị 32-bit của thanh ghi.

2

Sửa (Modify)

Dùng phép toán logic để thay đổi bit mong muốn.

3

Ghi (Write)

Ghi lại toàn bộ giá trị 32-bit đã sửa đổi.

Hiểm họa: Điều kiện tranh chấp (Race Condition)

Khi hai tác vụ cùng thực hiện RMW trên một thanh ghi, dữ liệu có thể bị ghi đè sai. Đây là "cơn ác mộng" của các hệ thống đa luồng hoặc có ngắt.

Tác vụ A
(Set bit 2)

Ngắt B
(Set bit 5)

1. Đọc giá trị 0b0000
2. Đọc giá trị 0b0000
3. Sửa thành 0b0100
4. Sửa thành 0b10000
5. Ghi 0b0100
6. Ghi 0b10000

Kết quả cuối cùng: 0b10000

Thao tác của Tác vụ A đã bị mất! ❌

Bit-band - Giải pháp từ Phần cứng

Thao tác nguyên tử (Atomic)

Bit-band là một tính năng phần cứng trên ARM Cortex-M, cho phép thay đổi một bit chỉ bằng một lệnh ghi duy nhất, đảm bảo an toàn tuyệt đối, không thể bị xen ngang.

🛡️

1 Lệnh Ghi = 1 Bit Thay Đổi

An toàn. Nhanh chóng. Không xung đột.

Cơ chế Ánh xạ Bộ nhớ

Mỗi bit trong vùng nhớ (RAM/Ngoại vi) được "ánh xạ" tới một địa chỉ 32-bit riêng trong vùng Alias. Ghi vào địa chỉ Alias sẽ thay đổi bit gốc một cách nguyên tử.

Vùng Bit-band

0x40020014

Chứa nhiều bit

...543210

Vùng Alias

0x42400294

Đại diện cho 1 bit

Ghi 1 vào đây để SET bit 5

So sánh Trực quan

Hiệu suất, An toàn & Phức tạp

Bit-band vượt trội về hiệu suất và an toàn, đồng thời giúp mã nguồn đơn giản hơn.

Mức độ Hỗ trợ Phần cứng

RMW là phương pháp phổ thông, trong khi Bit-band là một tính năng đặc biệt chỉ có trên một số dòng MCU.

Bảng Tổng kết

Tiêu chí Read-Modify-Write Bit-band
Tính Nguyên tử KHÔNG (3 bước) (1 bước phần cứng)
An toàn Đồng thời Dễ xảy ra Race Condition ❌ An toàn tuyệt đối ✅
Cần Đồng bộ hóa Có (Tắt ngắt, Mutex) Không cần
Hiệu suất Chậm hơn Nhanh hơn
Hỗ trợ Phần cứng Hầu hết mọi MCU Chỉ ARM Cortex-M3/M4/M7...
Lời khuyên Sử dụng khi không có lựa chọn khác, và phải bảo vệ cẩn thận. Lựa chọn ưu tiên hàng đầu nếu phần cứng hỗ trợ.