+1

Cơ bản về WatchDog Timer trong hệ thống nhúng (Embedded System)

Khái Niệm

Trong hệ thống nhúng, a WatchDog Timer (Bộ đếm thời gian giám sát) là một thành phần hoặc tính năng của phần cứng được thiết kế để giám sát hoạt động của hệ thống và thực hiện hành động khắc phục nếu cần thiết. Nó thường được sử dụng để nâng cao độ tin cậy và độ bền của các thiết bị nhúng đặc biệt là trong các tình huống mà sự cố hoặc lỗi hệ thống có thể gây ra hậu quả nghiêm trọng.

image.png

WatchDog Timer hoạt động như thế nào?

1. Timer Initialization (Khởi tạo thời gian)

  • Khi bắt đầu vận hành hệ thống, bộ đếm thời gian giám sát được khởi tạo với giá trị thời gian chờ được xác định trước. Giá trị này xác định thời gian hệ thống có thể hoạt động mà không cần đặt lại cơ quan giám sát.

2. Watchdog Timer Petting

  • Trong quá trình hoạt động bình thường, phần mềm reset định kỳ hoặc pets bộ đếm thời gian của cơ quan giám sát. Hành động này ngăn cơ quan giám sát hết thời gian chờ và kích hoạt thiết lập hệ thống. Quá trình "Petting" bao gồm việc ghi vào một thanh ghi hoặc vị trí bộ nhớ cụ thể được liên kết với bộ đếm thời gian của cơ quan giám sát.

3. Phát hiện Timeout

  • Nếu phần mềm không thể duy trì cơ quan giám sát trong khoảng thời gian chờ được chỉ định, bộ đếm thời gian của Watchdog timer sẽ hết hạn hoặc "timeout". Điều này cho thấy phần mềm hệ thống đã ngừng hoạt động bình thường hoặc không phản hồi.

4. Reset Triggering

  • Khi phát hiện thời gian chờ, bộ đếm thời gian giám sát sẽ thực hiện hành động để thiết lập lại hệ thống. Điều này thường liên quan đến việc tạo tín hiệu đặt lại để khởi động lại bộ vi điều khiển hoặc thiết bị nhúng. Việc đặt lại sẽ khôi phục hệ thống về trạng thái đã biết và cho phép hệ thống tiếp tục hoạt động bình thường.

Use Cases

  1. Giám sát tình trạng hệ thống

    • Bộ hẹn giờ của cơ quan giám sát được sử dụng để thoe dõi tình trạng và tính toàn vẹn của các hệ thống điều khiển công nghiệp, thiết bị điện tử ô tô và thiết bị y tế. Họ đảm bảo rằng hệ thống vẫn hoạt động và phản hồi nhanh, ngay cả khi có lỗi phần mềm hoặc các điều kiện không mong muốn.
  2. Kiểm soát lỗi (Fault Tolerance)

    • Bộ hẹn giờ của Watchdog timer góp phần nâng cao khả năng chịu lỗi bằng cách phát hiện và khôi phục sau các lỗi hệ thông. Chúng giúp ngăn ngừa tình trạng khóa hệ thống, treo máy và các hành vi bất thường khác có thể dẫn đến thời gian ngừng hoạt động tốn kém hoặc các mối nguy hiểm về an toàn.
  3. Embedded Software Development

    • Các nhà phát triển phần mềm nhúng tận dụng bộ tính giờ của cơ quan giám sát trong giai đoạn phát triển và thử nghiệm để xác định và giải quyết các lỗi phần mềm, điều kiện chạy đua và xung đột tài nguyên. Việc đặt lại Watchdog cho thất các lĩnh vực tiềm năng cần cải tiến trong thiết kế và triển khai phần mềm.

Sumary

Watchdog timer là một thành phần quan trọng trong các hệ thống nhúng, cung cấp cơ chế phát hiện và phục hồi sau các lỗi phần mềm. Bằng cách giám sát hoạt động của hệ thống và bắt đầu các hành động khắc phục cần thiết, bộ định thời của Watchdog timer nâng cao độ tin cậy, độ bền độ an toàn của các thiết bị nhúng trong các lĩnh vực khác nhau.

Ví Dụ

ESP32 là một bộ vi điều khiển phổ biến thường được sử dụng trong các ứng dụng IoT (Internet of Things). Nó có thiết bị ngoại vi hẹn giờ giám sát tích hợp vớ thể được sử dụng để nâng cao độ tin cậy của các hệ thống nhưng.

Dưới đây là một ví dụ về cách bạn có thể sử dụng Watchdog Timer trong hệ thống nhúng dựa trên ESP32.

#include <Arduino.h>

// Function to pet the watchdog timer
void petWatchdog() {
 // Viết một giá trị vào thanh ghi bộ đếm thời gian của cơ quan giám sát để đặt lại nó
 // Điều này ngăn bộ đếm thời gian của cơ quan giám sát hết thời gian chờ
 // Thanh ghi và giá trị cụ thể có thể khác nhau tùy thuộc vào bảng và khung ESP32 được sử dụng
 // Tham khảo tài liệu và SDK của ESP32 để triển khai chính xác
  ESP.wdtFeed();
}

void setup() {
  Serial.begin(115200);
  
  // Khởi tạo bộ đếm Watchdog với thời gian chờ 3s
  // Giá trị thời gian chờ có thể thay đổi tùy theo yêu cầu ứng dụng
  // Giá trị thời gian chờ thực tế có thể phụ thuộc vào các yếu tố như khả năng phản hồi của hệ thống
  // và thời gian hoạt động dự kiến
  // Bộ đếm thời gian giám sát phải được khởi tạo sớm trong quá trình thiết lập để đảm bảo hoạt động đúng
  // Quá trình khởi tạo ESP32's watchdog timer có thể tùy theo từng frameworks (e.g., Arduino, ESP-IDF)
  // Here's a generic example:
  ESP.wdtDisable();
  ESP.wdtEnable(WDTO_3S);

  // Ngoài ra, bạn có thể sử dụng thư viện Arduino watchdog tích hợp cho ESP32
  esp_task_wdt_init(3, true);

  Serial.println("Watchdog timer initialized.");
}

void loop() {
  // Thực hiện các tác vụ chính của ứng dụng tại đây
  
  // Pet the watchdog timer để ngăn nó hết thời gian
  petWatchdog();

  // Thêm độ trễ hoặc thời gian ngủ trong vòng lặp chính để tránh thời gian chờ của cơ quan giám sát trong các hoạt động kéo dài
  delay(1000); // Example: Delay for 1 second
}
  • Hàm petWatchdog() đặt lại bộ đếm thời gian của Watchdog timers bằng cách ghi một giá trị vào thanh ghi bộ nhớ đếm thời gian. Hàm này phải được gọi định kỳ trong vòng lặp chính để ngăn Watchdog Timer hết thời gian chờ.
  • Trong hàm setup(), bộ đếm thời gian giám sát được khởi tọa với thời gian chờ là 3s. Mã khởi tạo có thể khác nhau tùy thuộc vào Framework ESP32 đang được sử dụng.
  • Hàm loop() thực hiện các tác vụ chính của ứng dụng. Bên trong vòng lặp, hàm petWatchdog() được gọi định kỳ để đặt lại bộ đếm thời gian của cơ quan giám sát và ngăn nó hết thời gian chờ.
  • Việc sử dụng hợp lý độ trễ hoặc khoảng thời gian ngủ trong vòng lặp chính đảm bảo rằng bộ đếm thời gian của cơ quan giám sát được điều chỉnh thường xuyên đủ để tránh hết thời gian chờ, ngay cả khi hoạt động kéo dài.

Ví dụ này minh họa cách bạn có thể tận dụng tính năng hẹn giờ theo dõi của bộ vi điều khiển ESP32 để nâng cao độ tin cậy và độ bền của các ứng dụng hệ thống nhúng của bạn.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí