Bỏ qua điều hướng, tới nội dung chính
Học C
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ăngNgoại viPhần
Đọc nhiệt độ, độ ẩmI2CPhần 18
Đọc ánh sángADCPhần 18
Hiển thịOLED qua I2CPhần 18
Ghi log có thời gianSPI thẻ SD, RTCPhần 18
Shell lệnhUART với ring buffer và ngắtPhần 12, 18
Cảnh báo vượt ngưỡngGPIO LED, buzzerPhầ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ử

  1. Không dùng malloc, cấp phát tĩnh hoàn toàn.
  2. Không dùng số thực, dùng số dấu phẩy cố định.
  3. Mọi ISR dưới năm mươi lệnh, chỉ đặt cờ.
  4. Báo cáo RAM và Flash đã dùng bằng arm-none-eabi-size.
  5. Sơ đồ mạch và sơ đồ máy trạng thái.
  6. Đọc cảm biến qua I2C và ADC, hiển thị OLED, ghi log thẻ SD với thời gian từ RTC.
  7. Shell lệnh qua UART dùng ring buffer và ngắt.
  8. 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.