프로그램이 MSP430에서 워치 독 타이머를 중지하는 이유는 무엇입니까?


11

MSP430의 많은 샘플 프로그램은 다음과 같이 첫 번째 라인을 갖습니다.

WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

그들은 왜 이것을 하는가?

답변:


15

워치 독 타이머 (WDT)는 기본적으로 켜져 있으며 더 복잡한 응용 프로그램에서 사용하는 것이 유용하지만 많은 새로운 사람들이 트립됩니다. 그들은 종종 코드에서 WDT를 서비스하지 않거나 WDT 이벤트를 처리하기 위해 ISR (인터럽트 서비스 루틴)을 포함하지 않기 때문에 칩 리셋이 계속되면 매우 실망하게됩니다. 또한 샘플 프로그램은 대부분 WDT를 시연하지 않으므로 꺼져 있습니다.

편집 : 워치 독 타이머의 이름은 "dead man 's switch"일 수 있습니다. 펌웨어가 주기적으로 모든 것이 잘 작동하고 있음을 알리지 않는 한 기본 동작은 마이크로 컨트롤러를 재설정하는 것입니다. 이것을 "개에게 먹이기"또는 "개를 걷어차"라고합니다. 이런 식으로 펌웨어가 루프에 걸리거나 예상대로 작동을 멈 추면 워치 독이 공급되지 않고 칩이 재설정됩니다 (신선하게 작동하는 상태).

WDT를 주기적 인터럽트로 사용하여 상상할 수있는 다른 작업을 수행 할 수도 있습니다. 관련 ISR 만 작성하면됩니다.


+1 덕분에 i와 다른 독자가 찾아 볼 수는 있지만 WDT가 칩을 재설정하는 이유에 대한 아주 간단한 근거를 아는 것이 좋습니다. (하지만 추가에 대해 걱정하지 마십시오. 귀하의 답변은 그대로 받아 들일 수있을만큼 충분합니다 (다른 가능한 답변을 몇 시간 더 기다린 후)
necromancer

나는 또한 워치 독 타이머가 무엇인지 전혀 알지 못하는 절대적인 초보자라는 질문에서 언급 했어야한다고 생각한다. :)
necromancer

2
@necromancer 아, 걱정 마세요. 관련 정보를 추가했습니다.
사무엘

2
Samuel- 거의 모든 경우에 WDT를 재설정하기 위해 ISR을 사용해서는 안됩니다. 거의 항상 잘못된 일입니다. 프로그램의 다른 부분이 la-la 땅에서 꺼져있는 동안 인터럽트는 계속 진행될 수 있습니다. ISR과 다른 두 부분의 WDT를 효과적으로 설정하는 펌웨어의 다른 부분 사이의 통신을 통해 때때로 가능하거나 필요하지만 초보자에게 첫 번째 방법으로 제안해서는 안됩니다.
Spehro Pefhany

9

사람들이 실수로 WDT를 넘어 뜨리는 것에 대한 사무엘의 요점 외에도 처음에 WDT를 비활성화해야하는 또 다른 중요한 이유가 있습니다.

애플리케이션이 일반적으로 타이머를 올바르게 재설정 할 수있는 경우에도 다음 두 가지 이유로 초기화 코드 중에 타이머를 재설정하지 못할 수 있습니다.

  • 초기화는 단일 WDT 틱보다 오래 걸릴 수 있지만 인터럽트를 비활성화해야합니다. 즉, 타이머를 재설정하기 위해 타이머 ISR에 의존하는 경우 무한 부팅 루프에 들어갈 수 있습니다.
  • 모든 MCU에서 타이머 레지스터의 상태를 반드시 알 필요는 없습니다 (즉, 레지스터가 0에서 시작하지 않을 수 있으므로 다음 틱이 예상보다 훨씬 빠를 수 있습니다).

따라서 WDT를 활성화하지 않은 경우에도 WDT를 가장 먼저 수행하지 않는 것이 좋습니다 .

사용하려는 경우 초기화 코드의 마지막 단계로 인터럽트를 켜기 전에 즉시 다시 활성화 할 수 있습니다.


+1 답변에 추가해 주셔서 감사합니다. 이전에 int _system_pre_init(void)실행되는 기능을 사용하여 초기화하기 전에 비활성화 할 수 있음을 발견했습니다.main
necromancer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.