Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 9306|Відповідь: 0

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

[Копіювати посилання]
Опубліковано 30.10.2014 23:23:37 | | | |
1. З'єднання верхнього та нижнього рівнів

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

Watch Dog, якщо бути точним, має бути таймером watchdog — структурою схеми, що спеціально використовується для моніторингу робочого стану програми мікроконтролера. Основний принцип такий: після запуску таймера watchdog він почне рахувати з 0, якщо програма не очистить його вчасно у визначений часовий проміжок, таймер watchdog скине систему (еквівалентно перезавантаженню комп'ютера), як показано на рисунку нижче (намальовано в 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) Режим вибору:

Таймер watchdog має два режими: «режим watchdog» і режим «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. Висновок

У цьому розділі описується принцип і використання схем вимірювання часу з наглядовим органом. У практичних застосуваннях, якщо потрібна висока надійність, у системі може використовуватися сторожовий дог. Коли система з якоїсь причини виходить з ладу (вона більше не може годувати собаку), собака, якого ніхто не годує, гавкає: «Майстре, є аномалія, є аномалія! ”

Для бездротової сенсорної мережі її енергоспоживання під час виконання є критичним аспектом оцінки продуктивності. У наступному розділі ми розглянемо сон системи CC2430 та його перерваний сигнал пробудження.






Попередній:Zigbee Journey (7): Кілька важливих базових експериментів CC2430 — передача DMA
Наступний:Zigbee Journey (9): Кілька важливих базових експериментів CC2430 — систематичний сон і перерване неспання
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com