Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 9306|Odpowiedź: 0

Podróż Zigbee (8): Kilka ważnych podstawowych eksperymentów CC2430 – watchdogi

[Skopiuj link]
Opublikowano 30.10.2014 23:23:37 | | | |
1. Połączenie górnego i dolnego poziomu

Bez względu na to, jak dobry jest system operacyjny, czy to obecny Win7, czy przyszłe Win8 i Win9, zawsze będzie pojawiał się BlueScreen, nie wspominając o małym mikrokontrolerze~ Nieprzewidywalne przyczyny, takie jak zakłócenia elektryczne, awarie zasilania, wyładowania elektrostatyczne itp., mogą powodować nieprawidłowe działanie systemu wbudowanego.

Pies strażnik, dokładniej, powinien być timerem watchdog, czyli strukturą układu specjalnie służącą do monitorowania stanu działania programu mikrokontrolera. Podstawowa zasada jest taka: po uruchomieniu timera watchdoga zaczyna on liczyć od zera, jeśli program nie wyczyści go na czas w wyznaczonym przedziale czasowym, timer watchdog zresetuje system (równoważny z restartem komputera), jak pokazano na poniższym rysunku (narysowanym w Word, rysunek to bardziej nieprzyjemne~):

Przedstawmy prostą metodę aplikacji psa stróżującego: Jak puścić psa? Jak się karmić? Co się stanie, jeśli go nie nakarmisz?

2. Historia psa strażnika(1) Wprowadzenie do eksperymentu

Jeśli pies jest karmiony, system działa normalnie; Jeśli nie nakarmisz psa, system ciągle się restartuje.

(2) Schemat przepływu programu

(3) Kod źródłowy eksperymentalny i analiza/*
    Opis eksperymentu: W eksperymencie z psem stróżującym, jeśli pies nie jest karmiony, system ciągle się restartuje.
*/

#include

#define prowadził1 P1_0         
#define LED2 P1_1         
#define LED3 P1_2         
#define LED4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
pustkaxtal_init(pustka)
{
  SEN &= ~0x04;            //都上电
  podczas gdy(! (SEN &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Wybierz oscylator kryształowy 32MHz
  SEN |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
pustkaled_init(pustka)
{
  P1SEL =0x00;              P1 to zwykły port I/O
  P1DIR |=0x0F;              P1.0 P1.1 P1.2 P1.3 wyjście
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*看门狗初始化
-------------------------------------------------------*/
pustkawatchdog_Init(pustka)   
{
  WDCTL =0x00;              //看门狗模式,时间间隔一秒
  WDCTL |=0x08;            //启动看门狗
}

/*喂狗程序
-------------------------------------------------------*/
pustkaFeetDog(pustka)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
pustkaOpóźnienie(pustka)
{
  Niepodpisany intn;
  dla(n=50000; N>0; n--);
  dla(n=50000; N>0; n--);
  dla(n=50000; N>0; n--);
  dla(n=50000; N>0; n--);
  dla(n=50000; N>0; n--);
  dla(n=50000; N>0; n--);
  dla(n=50000; N>0; n--);
}

/*主函数
-------------------------------------------------------*/
pustkamain(pustka)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Delay();
  led1 =0;         //点亮led1
  
  podczas gdy(1)
  {
    FeetDog();      Polecenie karmienia psa (system nie resetuje się po dołączeniu, a mała lampka nie; Jeśli zostanie oznaczony, system będzie się resetował, a małe światło będzie migać co 1 sekundę)
  }
}

Jak widać w kodzie źródłowym powyżej, metoda obsługi Watch Dog jest bardzo prosta, a cały proces obejmuje tylko nowy SFR, mianowicieWDCTL。Poniżej znajduje się szczegółowy opis CC2430 w chińskim podręczniku:

Użycie watchdogów można podsumować następująco:Wybierz tryb → wybierz interwał timera → umieść psa → karmienia psa

(1) Wybierz tryb:

Timer watchdog ma dwa tryby: "watchdog mode" oraz "timer".

W trybie timera jest równoważny zwykłemu timerowi, a po osiągnięciu interwału timera generuje przerwanie (można go znaleźć w pliku ioCC2430.h z wektorem przerwania WDT_VECTOR); W trybie watchdog, gdy osiągnięty jest zaplanowany interwał, nie ma przerwy, zamiast tego wysyłany jest sygnał resetu do systemu.

W tym eksperymencie przeszedłWDCTL. MODE=0aby wybrać tryb strażnika.

  (2) Wybierz zaplanowany interwał:

Jak pokazano na powyższym rysunku, do wyboru są cztery okresy zegara, a dla wygody testu wybieramy przedział czasowy 1 (czyli kolejność).WDCTL.INT=00)。

  (3) Wypuść psa:

ZamówienieWDCTL.EN=1Aby uruchomić timer watchdog.

  (4) Nakarm psa:

Gdy timer się zacznie, zaczyna liczyć od zera. Zanim liczba osiągnie 32768 (czyli <1s), jeśli nakarmimy psa następującym kodem:

  WDCTL =0xa0;
  WDCTL =0x50;  

Następnie wartość licznika zostaje wyczyszczona do 0, a następnie zaczyna się liczyć od 0x0000, co uniemożliwia wysłanie sygnału resetu, który manifestuje się na płycie deweloperskiej: LED1 będzie zawsze włączony i nie będzie migać;

Jeśli nie nakarmimy psa (czyli nie skomentujemy tego kodu), to gdy licznik timera osiągnie 32768, zostanie wysłany sygnał resetu, a program uruchomi się od zera, co jest widoczne na płycie deweloperskiej: LED1 ciągle, a interwał to 1s. (Uwaga: Program karmienia psa musi być ściśle zgodny z powyższym kodem, a polecenie odwrócone/błędne/zapisane mniej nie odegra roli w wyjściu 0.) )

Porady CC2430
Dwie dodatkowe uwagi:
(1) WTryb Watch DogJeśli timer watchdog został włączony, ustawienie 0 na WDCTL.EN jest nieprawidłowe (tzn. ten bit nie może pełnić roli zatrzymania timera);
(2) WTryb timera, możesz zapisać 1 do WDCTL.CLR[0], aby wyczyścić timer; Zapisanie 0 do bitu włączenia WDCTL.EN zatrzyma timer, natomiast zapisanie 1 do bitu enable zrestartuje timer od 0x0000.


(4) Wyniki eksperymentalne:

Jeśli dodasz funkcję FeedDog, uruchomisz kod i okaże się, że LED1 jest zawsze włączone (system się nie resetuje);

Jeśli wpiszesz funkcję FeedDog, uruchom kod i zobaczysz, że LED1 co 1 sekundę (system resetuje się co 1 sekundę).

3. Podsumowanie

Ta sekcja opisuje zasadę i zastosowanie układów zegarowych watchdog. W praktycznych zastosowaniach, jeśli wymagana jest wysoka niezawodność, w systemie można zastosować watchdog. Gdy system z jakiegoś powodu przestaje karmić psa), pies, którego nikt nie karmi, szczeka: "Mistrzu, jest anomalia, jest anomalia! ”

W bezprzewodowej sieci sensorów jej zużycie energii w czasie działania jest kluczowym aspektem oceny wydajności. W następnej sekcji omówimy sen systemu CC2430 oraz jego przerwane budzenie.






Poprzedni:Podróż Zigbee (7): Kilka ważnych podstawowych eksperymentów CC2430 – transmisja DMA
Następny:Podróż Zigbee (9): Kilka ważnych, podstawowych eksperymentów CC2430 – systematyczny sen i przerwana czuwność
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com