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

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

Отправлено F8 02 августа 2006 г. 15:40
В ответ на: Кинте плз реализацию програмного FIFO на С или С++ отправлено =NIK= 02 августа 2006 г. 15:04

class CFIFO
{
char buffer[16];
int wr_index;
int rd_index;
volatile int counter;
public:
bool Read(char &data);
bool Write(char data);
CFIFO();
};

CFIFO::CFIFO()
{
wr_index =0;
rd_index =0;
counter = 0;
}

bool CFIFO::Read(char &data)
{
if(counter == 0)return false;
data = buffer[rd_index++];
rd_index &= 0x0F;
__disable_interrupt();
counter--;
__enable_interrupt();
return true;
}

bool CFIFO::Write(char data)
{
if(counter >= 16)return false;
buffer[wr_index++] = data;
wr_index &= 0x0F;
__disable_interrupt();
counter++;
__enable_interrupt();
return true;
}

Чуть менее эффективо но уневерсальней будет если буфер создавть динамически в конструкторе, в нем же задавать размер, но тогда прийдется и деструстор писать.



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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


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