![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
#7 |
|
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Đây là gợi ý về 1 FIFO vòng, tức không cần reset các index, rdCount và wrCount sẽ tự động quay vòng giá trị trên Buffer nếu FIFO chưa đầy.
Code:
#define BUFFER_SIZE (unsigned int)1024
#define BUFFER_SIZE_MASK (unsigned int)(BUFFER_SIZE-1) //1023 = 0x3FF
#ifndef BYTE
typedef unsigned char BYTE;
#endif
unsigned int wrCount=0;
unsigned int rdCount=0;
BYTE fifo_buff[BUFFER_SIZE];
void FIFO_Init()
{
rdCount=wrCount; //With any value -> FIFO Empty
}
BYTE FIFO_Full()
{
return (((wrCount+1)&BUFFER_SIZE_MASK)==rdCount);
}
BYTE FIFO_Empty()
{
return (rdCount==wrCount);
}
unsigned int FIFO_Size()
{
return ((wrCount-rdCount)&BUFFER_SIZE_MASK);
}
void FIFO_Push(BYTE data)
{
fifo_buff[wrCount]=data;
wrCount++;
wrCount&=BUFFER_SIZE_MASK;
}
BYTE FIFO_Pop()
{
BYTE ret;
ret=fifo_buff[rdCount];
rdCount++;
rdCount&=BUFFER_SIZE_MASK;
return (ret);
}
FIFO_Init();
...
if(!FIFO_Full()) FIFO_Push('A');
...
if(!FIFO_Empty()) FIFO_Pop();
...
printf("Current Data Size in FIFO=%d",FIFO_Size());
...
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com |
|
|
|
| Ðiều Chỉnh | |
| Xếp Bài | |
|
|