Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 9306|Ответ: 0

Zigbee Journey (8): Несколько важных базовых экспериментов CC2430 — сторожевые собаки

[Скопировать ссылку]
Опубликовано 30.10.2014 23:23:37 | | | |
1. Соединение верхнего и нижнего уровней

Независимо от того, насколько хороша операционная система — будь то нынешний Win7 или будущие Win8 и Win9 — всегда будет BlueScreen, не говоря уже о небольшом микроконтроллере~ Непредсказуемые причины, такие как электрический шум, отключение питания, электростатический разряд и т.д., могут привести к ненормальной работе встроенной системы.

Точнее, Watch Dog должен быть таймером watchdog — это структура схемы, специально используемая для мониторинга состояния работы программы микроконтроллера. Основной принцип таков: после запуска таймера сторожевой собаки он начнёт отсчёт с 0, если программа не выполнит его вовремя в указанный временной интервал, таймер сбросит систему (эквивалентно перезагрузке компьютера), как показано на рисунке ниже (нарисован в Word, рисунок более болезненный~):

Давайте представим простой способ применения сторожевой собаки: как отпустить собаку? Как кормить? Что будет, если не кормить его?

2. История сторожевой собаки(1) Введение в эксперимент

Если собака накормлена, система работает нормально; Если не кормить собаку, система постоянно перезагружается.

(2) Блок-схема программы

(3) Экспериментальный исходный код и анализ/*
    Описание эксперимента: В эксперименте с сторожем, если собаку не кормят, система продолжает перезапускаться.
*/

#include

#define led1 P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
пустотаxtal_init(пустота)
{
  SLEEP &= ~0x04;            //都上电
  в то время как(! (SLEEP &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Выберите кристаллический осциллятор на 32 МГц
  СОН |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
пустотаled_init(пустота)
{
  P1SEL =0x00;              P1 — это обычный порт ввода-вывода
  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();

  Задержка();
  led1 =0;         //点亮led1
  
  в то время как(1)
  {
    FeetDog();      Команда кормления собаки (система не сбрасывается после подключения, и маленький индикатор не мигает; Если аннотировать, система будет продолжать сбрасываться, и маленький индикатор будет мигать каждые 1 секунды)
  }
}

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

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

(1) Режим выбора:

Таймер сторожевой собаки имеет два режима: «режим сторожевой собаки» и режим «таймер».

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

В этом эксперименте она прошлаWDCTL. MODE=0чтобы выбрать режим хранителя.

  (2) Выберите запланированный интервал:

Как показано на рисунке выше, есть четыре тактовых периода на выбор, и для удобства проверки мы выбираем интервал времени в 1с (то есть порядок).WDCTL.INT=00)。

  (3) Отпустить собаку:

ПорядокWDCTL.EN=1Чтобы запускать таймер сторожевой собаки.

  (4) Кормить собаку:

Как только таймер запускается, он начинает считать с 0. Пока её количество не достигнет 32768 (то есть <1), если мы кормим собаку следующим кодом:

  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. Заключение

В этом разделе описывается принцип и использование часовых схем наблюдения. На практике, если требуется высокая надёжность, в системе может использоваться сторожевой дог. Когда система по какой-то причине выходит из строя (она больше не может кормить собаку), собака, которую никто не кормит, лает: «Хозяин, есть аномалия, есть аномалия! ”

Для беспроводной сенсорной сети энергопотребление во время выполнения является ключевым аспектом оценки производительности. В следующем разделе мы обсудим сон системы CC2430 и его прерванный сигнал пробуждения.






Предыдущий:Zigbee Journey (7): Несколько важных базовых экспериментов CC2430 — передача DMA
Следующий:Zigbee Journey (9): Несколько важных базовых экспериментов CC2430 — систематический сон и прерванное бодрствование
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com