Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 9306|Отговор: 0

Zigbee Journey (8): Няколко важни основни експеримента с CC2430 - watchdogs

[Копирай линк]
Публикувано в 30.10.2014 г. 23:23:37 ч. | | | |
1. Свързване на горния и долния етаж

Без значение колко добра е операционната система – дали е настоящата Win7 или бъдещите Win8 и Win9 – винаги ще има BlueScreen, да не говорим за малък микроконтролер~ Непредсказуеми причини като електрически шум, прекъсване на захранването, електростатично разреждане и др., могат да причинят ненормална работа на вградената система.

Watch Dog, за да бъдем точни, трябва да бъде watchdog таймер – структура на схема, специално използвана за наблюдение на работещото състояние на микроконтролерната програма. Основният принцип е: след стартиране на watchdog таймера, той започва да брои от 0, ако програмата не го изчисти навреме в рамките на определения времеви интервал, watchdog таймерът ще нулира системата (еквивалентно на рестартиране на компютъра), както е показано на фигурата по-долу (нарисувано в Word, рисунката е по-скоро "eggache"~):

Нека въведем един прост метод за прилагане на пазач: Как да пуснете кучето да си тръгне? Как да се храним? Какво ще стане, ако не го храниш?

2. Историята на пазача(1) Въведение в експеримента

Ако кучето е нахранено, системата работи нормално; Ако не храните кучето, системата продължава да се рестартира.

(2) Схема на потока на програмата

(3) Експериментален изходен код и анализ/*
    Описание на експеримента: В експеримента с пазачите, ако кучето не бъде нахранено, системата продължава да се рестартира.
*/

#include

#define led1 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;            //启动看门狗
}

/*喂狗程序
-------------------------------------------------------*/
ПразнотаFeetDog (Празнота)   
{
  WDCTL =0xa0;
  WDCTL =0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
ПразнотаЗабавяне(Празнота)
{
  без подпис intn;
  за(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();

  Delay();
  led1 =0;         //点亮led1
  
  докато(1)
  {
    FeetDog();      Команда за хранене на кучета (системата не се нулира след включване и малката светлина не мига; Ако е анотиран, системата ще продължи да се нулира и малката светлина ще мига на всеки 1 секунди)
  }
}

Както се вижда от горния изходен код, методът на работа на Watch Dog е много прост и целият процес включва само нов SFR, а именноWDCTL。Следва конкретно описание на CC2430 в китайския наръчник:

Използването на пазачите може да се обобщи така:Изберете режим → изберете интервал за таймер → поставете кучето → да нахрани кучето

(1) Режим на избор:

Watchdog таймерът има два режима – "watchdog mode" и "timer" режим.

В режим на таймер той е еквивалентен на нормален таймер и когато се достигне интервалът на таймера, ще създаде прекъсване (можете да го намерите във файла ioCC2430.h с вектор на прекъсване WDT_VECTOR); В режим watchdog, когато се достигне планиран интервал, няма прекъсване, вместо това се изпраща сигнал за нулиране към системата.

В този експеримент тя преминаWDCTL. MODE=0за да изберат режим пазител на вратата.

  (2) Изберете планирания интервал:

Както е показано на горната фигура, има четири часовникови периода за избор, и за удобство на теста избираме времеви интервал от 1s (т.е. ред).WDCTL.INT=00)。

  (3) Пуснете кучето:

РедWDCTL.EN=1За да стартира таймера на Watchdog.

  (4) Хранете кучето:

След като таймерът започне, започва да брои от 0. Преди броят му да достигне 32768 (т.е. <1s), ако нахраним кучето със следния код:

  WDCTL =0xa0;
  WDCTL =0x50;  

След това броещата стойност на таймера ще бъде изчистена до 0 и той започва да брои от 0x0000 отново, което предотвратява изпращането на сигнал за нулиране, който се проявява на платката за разработка: LED1 винаги ще бъде включен и няма да мига;

Ако не подадем на кучето (т.е. не коментираме този код), когато броят на таймерите достигне 32768, ще се издаде сигнал за нулиране и програмата ще се стартира от нулата, което се проявява на разработката на платката: LED1 постоянно мига, а интервалът на мигане е 1 секунди. (Забележка: Програмата за хранене на кучета трябва да е строго съвместима с горния код, а редът, който е обърнат/грешен/написан по-малко, няма да играе роля при изчистване на 0.) )

Съвети за CC2430
Две допълнителни бележки:
(1) ВРежим на кучето за наблюдениеАко таймерът на watchdog е активиран, настройката 0 на WDCTL.EN е невалидна (т.е. този бит не може да изпълнява ролята на спиране на таймера);
(2) ВРежим на таймер, можете да запишете 1 в WDCTL.CLR[0], за да изчистите таймера; Записването на 0 в активния бит WDCTL.EN спира таймера, докато записването на 1 в бита за включване ще рестартира таймера от 0x0000 нататък.


(4) Експериментални резултати:

Ако добавите функцията FeedDog, стартирате кода и установите, че LED1 винаги е включен (системата не се нулира);

Ако коментирате функцията FeedDog, пуснете кода и установите, че LED1 мига на интервали от 1 секунди (системата се нулира на всеки 1 секунди).

3. Заключение

Този раздел описва принципа и употребата на времеви вериги на watchdog. На практика, ако е необходима висока надеждност, пазачът може да се използва в системата. Когато системата спре по някаква причина (вече не може да храни кучето), кучето, което никой не храни, ще лае: "Господарю, има аномалия, има аномалия! ”

За безжична сензорна мрежа консумацията на енергия по време на изпълнение е критичен аспект при оценката на производителността. В следващия раздел ще обсъдим съня в системата CC2430 и неговото прекъснато събуждане.






Предишен:Zigbee Journey (7): Няколко важни основни експеримента с CC2430 - DMA предаване
Следващ:Zigbee Journey (9): Няколко важни основни експеримента с CC2430 – систематичен сън и прекъсната будност
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com