BÀI 13 – STRUCT + ENUM + TYPEDEF: GHÉP CÁC MẢNH LẠI VỚI NHAU
Ở Bài 10–12, bạn đã học:
enum→ tạo tập hợp các trạng thái có têntypedef→ đặt tên mới cho kiểu dữ liệustruct→ gom nhiều biến khác kiểu thành một đối tượng
Hôm nay chúng ta ghép cả 3 lại. Đây là bài rất quan trọng nếu mục tiêu của bạn là lập trình C cho STM32.
1. Tại sao STM32 rất cần struct + enum?
Hãy tưởng tượng ta có một động cơ:
Nhìn riêng lẻ thì không biết biến nào thuộc về động cơ nào.
Ta có thể gom chúng lại:
Nhưng direction mà dùng 0, 1, 2 thì rất khó đọc.
Thay vào đó:
Bây giờ:
Đọc code sẽ dễ hiểu hơn rất nhiều.
2. enum làm cho trạng thái có ý nghĩa
Ví dụ:
Compiler hiểu:
Ta có:
Thay vì:
Hai cách có thể tạo ra cùng giá trị, nhưng:
con người đọc hiểu ngay.
3. Đưa enum vào struct
Ví dụ hoàn chỉnh:
Tạo một biến:
Gán dữ liệu:
Ta có một đối tượng:
4. typedef giúp code gọn hơn
Nếu không dùng typedef, mỗi lần khai báo phải viết:
Có thể dùng:
Bây giờ chỉ cần:
Đây chính là kiểu code bạn sẽ gặp rất nhiều trong STM32.
5. Có thể typedef luôn cả enum
Thay vì:
ta viết:
Bây giờ:
thay vì:
6. Ghép cả typedef + enum + struct
Đây là mẫu rất quan trọng:
Sau đó:
Đọc code:
rất tự nhiên.
7. struct có thể chứa nhiều enum
Ví dụ một thiết bị STM32:
Tạo:
Gán:
Ta đang mô tả một thiết bị hoàn chỉnh bằng một biến device1.
8. Đây chính là tư duy lập trình Embedded
Ví dụ một hệ thống điều khiển động cơ:
Khai báo:
Điều khiển:
Bây giờ motor1 chứa toàn bộ trạng thái của động cơ.
9. Đặc biệt quan trọng: STM32 thường dùng kiểu này
Ví dụ bạn có nút nhấn:
Sau đó:
Khai báo:
Trong chương trình:
Đây là tư duy rất gần với cách xây dựng driver/module trong Embedded C.
10. Bài tập thực hành
Hãy tự viết chương trình quản lý STM32 LED.
Yêu cầu:
Bước 1
Tạo enum:
Bước 2
Tạo enum:
Bước 3
Tạo struct Led gồm:
Trong đó:
Bước 4
Tạo:
Bước 5
Thiết lập:
Bước 6
In ra màn hình:
11. Một câu hỏi rất quan trọng
Hãy nhìn đoạn này:
Bạn hãy thử trả lời:
Led là gì?
A. Một biến
B. Một kiểu dữ liệu mới
C. Một hàm
D. Một giá trị enum
👉 Đáp án: B.
Led là một kiểu dữ liệu mới do chúng ta tự định nghĩa.
Sau đó:
thì led1 mới là một biến thuộc kiểu Led.
12. Điều cực kỳ quan trọng cần nhớ
Bạn hãy phân biệt:
với:
Dòng đầu:
→ kiểu dữ liệu
Dòng sau:
→ biến
Tương tự:
State → kiểu dữ liệu
state1 → biến
13. Và đây là cầu nối sang STM32
Sau này bạn sẽ gặp kiểu như:
hoặc:
rồi:
và chương trình có thể chạy theo:
Đây chính là nền tảng của state machine (máy trạng thái) trong lập trình STM32.
🎯 Sau Bài 13, bạn cần nắm chắc 5 thứ
Bài 14 chúng ta nên chuyển sang một chủ đề cực kỳ quan trọng: con trỏ + struct (struct *) và toán tử ->. Đây là chỗ C bắt đầu trở thành công cụ thực sự mạnh cho STM32.***