본문 바로가기
임베디드

[임베디드] Watchdog Timer란?

by 코딩히어로 2023. 10. 27.
728x90

Watchdog Timer(WDT)는 임베디드 시스템에서 안정성과 신뢰성을 제고하기 위한 중요한 하드웨어 디바이스입니다. 이 기능은 주로 마이크로컨트롤러나 임베디드 시스템에서 사용되며, 시스템이 정상 동작하고 있는지 지속적으로 감시하며, 시스템이 비정상적인 동작 상태로 빠질 때를 대비하여 동작합니다.

 

1. WDT 동작 원리

  • WDT 설정: WDT를 사용하기 전에 초기화되어야 합니다. 초기화는 주로 레지스터 설정을 통해 이루어지며, 타이머의 주기와 동작 모드를 결정합니다. 이 주기는 일반적으로 몇 초에서 몇 분까지로 설정되며, 이것이 WDT가 시스템을 감시하는 주기입니다.
  • WDT 리셋: 시스템의 주요 루프나 태스크 내에서 주기적으로 WDT를 리셋해야 합니다. 이는 WDT 타이머를 초기 상태로 재설정하며, 시스템이 정상 동작 중임을 나타냅니다. WDT 리셋은 주로 소프트웨어 명령으로 이루어지며, 이를 빠르게 반복하여 시스템의 안정성을 보장합니다.
  • 비정상 상황 처리: 시스템이 비정상 상태에 빠진 경우(예: 무한 루프, 무응답) WDT 타이머가 만료됩니다. 이때 시스템은 초기 상태로 복원하거나 안전한 조치를 취하여 문제를 해결해야 합니다. 이렇게 WDT는 시스템이 자동으로 재부팅되거나 비정상 상황에서 회복될 수 있도록 돕습니다.
  • WDT의 안정성 측정: WDT의 동작은 정확하게 모니터링되어야 합니다. WDT가 만료될 때마다 이를 로그에 남기고, 원격 감시 시스템을 통해 시스템의 상태를 모니터링하고 경고 메시지를 생성할 수 있도록 해야 합니다.

 

2. WDT 간단 예제

 

#include <avr/io.h>
#include <avr/wdt.h>

int main(void) {
    // WDT를 2초 간격으로 설정
    wdt_enable(WDTO_2S);

    // 메인 루프
    while (1) {
        // WDT 리셋
        wdt_reset();
        
        // 여기에 시스템 동작 코드 추가

        // 예: LED를 깜빡이는 코드
        PORTB ^= (1 << PB0);

        // 임의의 시간 지연
        for (int i = 0; i < 10000; i++) {
            _delay_ms(1);
        }
    }

    return 0;
}

예제 코드에서 WDT는 2초의 주기로 설정되었고, 메인 루프에서 주기적으로 WDT를 리셋하고 LED를 깜빡이는 예시가 포함되어 있습니다. WDT를 리셋하는 것은 wdt_reset() 함수를 사용하여 이루어집니다.

주의: WDT를 사용할 때 주기를 신중하게 선택하고, 주기적으로 WDT를 리셋하는 것이 중요합니다. 잘못된 설정은 시스템이 계속 리셋되거나 비정상적인 동작을 유발할 수 있습니다.

이 코드는 AVR 마이크로컨트롤러를 대상으로 작성되었으며, 다른 마이크로컨트롤러 또는 임베디드 시스템에서는 WDT 설정 방법과 레지스터가 다를 수 있으므로 해당 장치의 매뉴얼과 데이터시트를 참조해야 합니다.

 

3. WDT 활용

 

WDT는 임베디드 시스템에서 다양한 분야에서 활용됩니다. 예를 들어, 자동차 제어 시스템, 의료 기기, 산업 자동화 및 네트워크 장비에서 WDT가 사용됩니다. 이를 통해 시스템이 안정적으로 동작하고 비정상 상황에서 신속하게 대응할 수 있습니다.

 

 

결론적으로,

 

Watchdog Timer(WDT)는 임베디드 시스템에서 안정성과 신뢰성을 향상시키는 중요한 요소로 작용합니다. 올바른 설정, 주기적인 리셋, 비정상 상황 대응, 그리고 로깅과 모니터링을 통해 임베디드 시스템의 안정성을 높일 수 있습니다. WDT의 적절한 활용은 시스템의 신뢰성과 안정성을 보장하는 데 중요한 역할을 합니다.

728x90
반응형

'임베디드' 카테고리의 다른 글

[임베디드] ADC 사용하기  (2) 2022.08.25
[임베디드] CAN 통신 Mask & Filter Bit  (6) 2022.03.25
[임베디드] PLL이란?  (4) 2022.01.10
[임베디드] ADC란?  (21) 2022.01.06
[임베디드] CAN 통신이란?  (0) 2021.12.27

댓글