як написати хорошу ISR

S

sacrpio

Guest
Дорогий frienends,
Будь ласка, скажіть, що обмеження повинні мати на увазі при написанні гарних звичайних ISR.

Thankx ..

 
nerver перезавантажити нагляд в ISR!Espacially НЕ таймер ISR !!!!!!

 
sacrpio пише:

Дорогий frienends,

Будь ласка, скажіть, що обмеження повинні мати на увазі при написанні гарних звичайних ISR.

 
Привіт,
ISR повинна бути короткою і як можна швидше.
Ви повинні уникати виклику довго і забирає багато часу підпрограм в ISR.
Ви можете використовувати прапори у вашій програмі, кожна подія має свої власні прапор,
буде встановлено в ISR і скинути в головній процедури після обробки події.

 
Змінні, що використовуються в ISR повинні бути позначені як "нестабільною".

 
Не слід викликати будь-який subrutines якщо у вас обмежений розмір стека.

 
Привіт

1 Короткі і швидко (те саме)
2 Якщо система переривання не вектор переривання.
ви б дбати пріоритет переривань
3 перевірити всі конфігурації, що збереження і відновлення
на швидкість зберегти, скільки вам потрібно
Кожен зберегти конфігурації це від чого прийти, а не переписувати
важливих даних
4 Встановити пастку переривання для перевірки в дійсний переривання
5 Не забудьте розмір стека (те саме)

 
Уникайте виклику підпрограми ...............
Mayb спробі встановити прапор (глобальна змінна) і виходом ....

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Прохолодно" border="0" />
 
1.захистити змінні
2.повертатися якомога швидше
3.підпрограми може бути названо, але переконайтеся, що вони задовольняють 1 і 2

 
Якщо програма пам'яті сторінки розділені, це recomanded для збереження сторінки власника реєстру на початок з ISR і відновлення її повернення з ISR.

 
виграш забудьте покласти повернення зі звичайної інструкції наприкінці

 
Mr_Programmer пише:

nerver перезавантажити нагляд в ISR!
Espacially НЕ таймер ISR !!!!!!
 
seyyah пише:

Я планував створити таймер на 0,5 сек або 1 сек, і я планував скинути таймер ISR (який 100usec).
Чи є які-небудь проблеми з цим?
скажіть чому.
 
Власне Є випадки, коли скидання нагляд у таймер ISR можуть бути використані.Щоб розширити наявні Watchdog таймер часу більше часу (наприклад, кілька хвилин).Але тоді ви повинні створити програмне забезпечення сторожовий таймер і бути дуже обережні!
Велику частину часу, коли це потрібно, що щось не в порядку з програмної архітектури!

Antharax

 
Хм, ви маєте рацію.Навіть програма не таймер буде продовжувати працювати і скинути сторожовий таймер так ucontroller не буде resetted що призводить до безкінечного циклу.

 
Що мені робити з таймером справу:

Я приріст лічильника на основний цикл і перевірити його значення в таймер ISR.Якщо лічильник не приріст, то чи коректно блокувати поновлення спрацьовує на зовнішній собака годинник.Таким чином, ви до сих пір контроль WDT, навіть якщо процесор сходить з розуму.

abu_zakan

 

Welcome to EDABoard.com

Sponsor

Back
Top