|
1. 상하층 연결 현재 윈도우 7이든 미래의 윈도우 8과 윈도우 9 등 운영체제가 아무리 좋더라도, 항상 블루스크린이 존재하며, 작은 마이크로컨트롤러도 마찬가지입니다~ 전기 소음, 정전, 정전기 방전 등 예측 불가능한 원인이 임베디드 시스템의 비정상 작동을 초래할 수 있습니다. 정확히 말하면, 워치 독은 마이크로컨트롤러 프로그램의 실행 상태를 모니터링하기 위해 특별히 사용되는 회로 구조인 워치독 타이머여야 합니다. 기본 원리는 다음과 같습니다: 워드로 그린 그림과 같이 워드로 그린 그림과 같이, 워드로 그린 그림과 같이 0부터 시작해 0부터 카운트를 시작합니다.
간단한 경비견 적용 방법을 소개해 보겠습니다: 개를 어떻게 놓아줄 수 있을까요? 어떻게 먹여야 할까요? 먹이를 주지 않으면 어떻게 될까요? 2. 감시견의 이야기(1) 실험 소개개가 먹이를 주면 시스템은 정상적으로 작동하며; 개에게 밥을 주지 않으면 시스템이 계속 재시작됩니다. (2) 프로그램 플로우차트
(3) 실험적 소스 코드 및 분석/*
실험 설명: 감시견 실험에서는 개에게 먹이를 주지 않으면 시스템이 계속 재시작됩니다.
*/
#include
#define 이끄는 1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3
/*系统时钟初始化
-------------------------------------------------------*/
공허xtal_init(공허)
{ 잠 &= ~0x04; //都上电
반면(! (잠 그리고0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; 32MHz 크리스털 발진기를 선택하세요 잠 |=0x04;
}
/*LED初始化
-------------------------------------------------------*/
공허led_init(공허)
{ P1SEL =0x00; P1은 일반 I/O 포트입니다 P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 출력
LED1 =1; //关闭所有LED led2 =1; led3 =1; LED4 =1;
}
/*看门狗初始化
-------------------------------------------------------*/
공허watchdog_Init(공허)
{ WDCTL =0x00; //看门狗模式,时间间隔一秒 WDCTL |=0x08; //启动看门狗
}
/*喂狗程序
-------------------------------------------------------*/
공허피트독(공허)
{ WDCTL =0xa0; WDCTL =0x50;
}
/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
공허지연(공허)
{
서명 없음 지능n;
에 대해(n=50000; N>0; n--);
에 대해(n=50000; N>0; n--);
에 대해(n=50000; N>0; n--);
에 대해(n=50000; N>0; n--);
에 대해(n=50000; N>0; n--);
에 대해(n=50000; N>0; n--);
에 대해(n=50000; N>0; n--);
}
/*主函数
-------------------------------------------------------*/
공허주요(공허)
{ xtal_init(); led_init(); watchdog_Init();
지연(); LED1 =0; //点亮led1
반면(1) { 피트독(); 개 먹이 명령 (시스템이 가입 후 재설정되지 않고, 작은 불빛이 깜빡이지 않음; 주석이 붙으면 시스템은 계속 초기화되고, 작은 불빛은 1초마다 깜빡입니다) }
}
위 소스 코드를 보시다시피, Watch Dog의 운영 방식은 매우 간단하며, 전체 과정은 새로운 SFR만 포함합니다.WDCTL.다음은 중국 매뉴얼에 나오는 CC2430에 대한 구체적인 설명입니다:
감시견의 사용은 다음과 같이 요약할 수 있습니다:모드를 선택→ 타이머 간격을 선택→ 개에게 먹이를 주기→ (1) 모드 선택: 워치독 타이머는 "워치독 모드"와 "타이머" 모드 두 가지 모드를 가지고 있습니다. 타이머 모드에서는 일반 타이머와 동등하며, 타이머 간격에 도달하면 인터럽트가 발생합니다(ioCC2430.h 파일에 인터럽트 벡터가 WDT_VECTOR로 표시되어 있습니다); 워치독 모드에서는 예약된 간격에 도달하면 중단이 발생하지 않고 대신 리셋 신호가 시스템에 전송됩니다. 이 실험에서는 통과했다WDCTL. MODE=0게이트키퍼 모드를 선택하려면, (2) 예정된 간격 선택: 위 그림에서 보듯이, 선택할 수 있는 시계 주기는 네 가지이며, 검사의 편의를 위해 1s(즉, 순서)의 시간 구간을 선택합니다.WDCTL.INT=00)。 (3) 개를 풀어주기: 순서WDCTL.EN=1워치독 타이머를 시작하려고요. (4) 개에게 먹이를 주기: 타이머가 시작되면 0부터 카운트를 시작해요. 개의 개수가 32768(즉, <1초)에 도달하기 전에, 다음과 같은 코드로 개에게 먹이를 주면: WDCTL =0xa0; WDCTL =0x50;
그 후 타이머의 카운트 값이 0으로 해제되고, 다시 0x0000에서 카운트가 시작되어 리셋 신호를 보내지 못하게 됩니다. 이 신호는 개발판에 나타납니다: LED1은 항상 켜져 있고 깜빡이지 않습니다; 만약 개에게 먹이를 주지 않으면(즉, 이 코드를 주석 삭제하지 않고), 타이머 수가 32768에 도달하면 리셋 신호가 발송되고 프로그램이 처음부터 다시 실행됩니다. 이는 개발판에 나타납니다: LED1이 계속 깜빡이고, 깜빡임 간격은 1입니다. (참고: 개 먹이 프로그램은 위 코드와 엄격히 일치해야 하며, 순서가 뒤집히거나 틀렸거나 적게 쓰여도 0을 지우는 데 영향을 미치지 않습니다.) ) CC2430 팁두 가지 추가 노트: (1)워치독 모드워치독 타이머가 활성화되어 있을 경우, 0을 WDCTL.EN으로 설정하는 것은 유효하지 않습니다(즉, 이 비트는 타이머를 멈추는 역할을 할 수 없습니다); (2)타이머 모드, 타이머를 지우기 위해 WDCTL.CLR[0]에 1을 쓸 수 있습니다; 활성화 비트 WDCTL.EN에 0을 쓰면 타이머가 멈추고, 활성화 비트에 1을 쓰면 타이머가 0x0000부터 다시 시작됩니다.
(4) 실험 결과:FeedDog 기능을 추가하고 코드를 실행하면 LED1이 항상 켜져 있고(시스템이 리셋되지 않음), FeedDog 함수에 주석을 지우고 코드를 실행해 보면 LED1이 1초 간격으로 깜빡임을 확인하는데(시스템은 1초마다 초기화됩니다). 3. 결론이 절에서는 워치독 타이밍 회로의 원리와 사용법을 설명합니다. 실용에서는 높은 신뢰성이 요구될 경우 시스템에서 감시독을 사용할 수 있습니다. 시스템이 어떤 이유로(더 이상 개에게 먹이를 줄 수 없는) 다운되면, 아무도 먹이를 주지 않는 개가 짖습니다: "주인님, 이상이 있습니다, 이상이 있습니다! ” 무선 센서 네트워크의 경우, 실행 시 전력 소비는 성능 평가에서 매우 중요한 요소입니다. 다음 섹션에서는 CC2430 시스템 절전 상태와 그에 따른 중단된 기상 호출에 대해 논의하겠습니다.
|