Bài 60.726 phút đọc
Level 7: Hệ thống nhúng
Sau bài này bạn sẽ làm được
- Thiết kế hệ nhúng không dùng malloc và không dùng số thực
- Đọc cảm biến và điều khiển thiết bị ngoại vi qua I2C, SPI
- Viết trình xử lý ngắt ngắn chỉ đặt cờ
- Đo và báo cáo RAM và Flash đã dùng
Hệ thống nhúng đảo ngược mọi thói quen: không malloc, không số thực, không sập được vì không có ai khởi động lại. Dự án này là một trạm quan trắc trên STM32, và nó dạy lập trình C trong ràng buộc khắc nghiệt nhất.
#Mục tiêu
STM32
GPIO LED, nut bam
UART giao tiep PC, shell lenh
SPI the SD (ghi log)
I2C cam bien nhiet do do am, RTC
ADC cam bien anh sang
Timer tick he thong, PWM
DMA lay mau ADC lien tuc
Ngat xu ly su kien thoi gian thuc| Chức năng | Ngoại vi | Phần |
|---|---|---|
| Đọc nhiệt độ, độ ẩm | I2C | Phần 18 |
| Đọc ánh sáng | ADC | Phần 18 |
| Hiển thị | OLED qua I2C | Phần 18 |
| Ghi log có thời gian | SPI thẻ SD, RTC | Phần 18 |
| Shell lệnh | UART với ring buffer và ngắt | Phần 12, 18 |
| Cảnh báo vượt ngưỡng | GPIO LED, buzzer | Phần 18 |
#Không malloc
#Số dấu phẩy cố định
terminal
# Minh hoa logic bang C thuan (chay o may nao cung duoc)
./fixed
3.5 * 2.0 = 7.000 (phan nguyen 7) 3.5 + 2.0 = 5.500 nhiet = 25.6 do C
#Ngắt gọn
#Yêu cầu
Tự làm thử
- Không dùng
malloc, cấp phát tĩnh hoàn toàn. - Không dùng số thực, dùng số dấu phẩy cố định.
- Mọi ISR dưới năm mươi lệnh, chỉ đặt cờ.
- Báo cáo RAM và Flash đã dùng bằng
arm-none-eabi-size. - Sơ đồ mạch và sơ đồ máy trạng thái.
- Đọc cảm biến qua I2C và ADC, hiển thị OLED, ghi log thẻ SD với thời gian từ RTC.
- Shell lệnh qua UART dùng ring buffer và ngắt.
- Watchdog chống treo, chế độ tiết kiệm năng lượng.
Trình chấm điểm tự động sẽ được bổ sung ở giai đoạn sau. Hiện tại bạn tự chạy thử trên máy.
Tóm tắt
- Hệ nhúng đảo ngược thói quen: không
malloc, không số thực, không được phép sập. - Cấp phát tĩnh và ring buffer thay cho cấu trúc động; ring buffer là cấu trúc trung tâm.
- Số dấu phẩy cố định thay
float; nhân phải dùng 64 bit trung gian để tránh tràn. - ISR ngắn dưới năm mươi lệnh chỉ đặt cờ; biến chia sẻ với ISR phải là
volatile. - Tự phát hiện tràn ngăn xếp bằng số kỳ diệu, và dùng watchdog chống treo.