![]() |
|
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 |
![]() |
![]() |
|
|