[an error occurred while processing this directive]
Ы (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено -=DASM=- 02 мая 2006 г. 14:40
В ответ на: Очень просто отправлено =AVR= 02 мая 2006 г. 14:34


// структура с информацией о таймере
typedef struct
{
UINT uiTime;
UINT uiID;
PTIMERPROC pTimerProc;
void *pvParam;
} TIMERSTRUCT;

// массив таймеров
TIMERSTRUCT aTimers[MAXTIMERS];

void InitTimers(void)
{
char i;
for (i = 0; i < MAXTIMERS; i++) {
aTimers[i].uiID = 0;
}
}


void SetTimer (PTIMERPROC CallBackProc, UINT uiTimeout, UINT uiID, void *pvParam)
{
TIMERSTRUCT *pTimer = aTimers;
ENTER_CRITICAL();
do {
if ((pTimer->uiID) == 0) {
// свободен
pTimer->uiID = uiID;
pTimer->pvParam = pvParam;
pTimer->uiTime = uiTimeout;
pTimer->pTimerProc = CallBackProc;
LEAVE_CRITICAL();
return;
}

} while (++pTimer < &aTimers[MAXTIMERS]);
// если дошли до сюда - таймеров больше нет
LEAVE_CRITICAL();

}

void KillGroupTimers(UCHAR ucID)
{
TIMERSTRUCT *pTimer = aTimers;
ENTER_CRITICAL();
do {
if (((pTimer->uiID >> 8) & 0xff) == ucID) {
// ID совпал, чистим
pTimer->uiID = 0;
}
} while (++pTimer < &aTimers[MAXTIMERS]);
LEAVE_CRITICAL();

}
void KillTimer(UINT uiID)
{
TIMERSTRUCT *pTimer = aTimers;
ENTER_CRITICAL();
do {
if (pTimer->uiID == uiID) {
// ID совпал, чистим
pTimer->uiID = 0;
}
} while (++pTimer < &aTimers[MAXTIMERS]);
LEAVE_CRITICAL();
}


BOOL IsTimerActive (UINT uiID)
{
TIMERSTRUCT *pTimer = aTimers;
ENTER_CRITICAL();
do {
if (pTimer->uiID == uiID) {
// ID совпал
LEAVE_CRITICAL();
return TRUE;
}
} while (++pTimer < &aTimers[MAXTIMERS]);
LEAVE_CRITICAL();
return FALSE;
}


void TimersOnInterrupt()
{

TIMERSTRUCT *pTimer = aTimers;
//ENTER_CRITICAL();
do {
if (pTimer->uiID != 0) {
// uid != 0 ->работает
if (pTimer->uiTime-- == 0) {
// досчитал
pTimer->pTimerProc(pTimer->pvParam);
pTimer->uiID = 0;
}
}

} while (++pTimer <= &aTimers[MAXTIMERS-1]);
//LEAVE_CRITICAL();
}



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru