[an error occurred while processing this directive]
|
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;
}Чуть менее эффективо но уневерсальней будет если буфер создавть динамически в конструкторе, в нем же задавать размер, но тогда прийдется и деструстор писать.