📄 myfifo.c
字号:
/****************************************************************************/
/* MODULE: */
/* Myfifo.c */
/****************************************************************************/
/*
* TCC Version 0.0
* Copyright (c) telechips, Inc.
* ALL RIGHTS RESERVED
*/
/****************************************************************************/
#include "resource/tccresource.h"
#include "Myfifo.h"
int pGetFifoElement(void* handle, PPFIFOELEMENT ppBuf);
int pPushFifo(void* handle, PFIFOELEMENT pBuf);
int pPopFifo(void* handle, PPFIFOELEMENT ppBuf);
int pShowFifo(void* handle, PPFIFOELEMENT ppBuf);
void pFlushFifo(void* handle);
pfGetFifoElement GetFifoElement = pGetFifoElement;
pfPushFifo PushFifo = pPushFifo;
pfPopFifo PopFifo = pPopFifo;
pfShowFifo ShowFifo = pShowFifo;
pfFlushFifo FlushFifo = pFlushFifo;
int pGetFifoElement(void* handle, PPFIFOELEMENT ppBuf)
{
unsigned int i, iLoopCnt;
PMYFIFO pMyFifo;
PPFIFOELEMENT ppFifoBufArray;
PFIFOELEMENT pFifoElement;
// LOCK_FIFO;
pMyFifo = (PMYFIFO)handle;
iLoopCnt = pMyFifo->uiMaxNumOfElement;
ppFifoBufArray = pMyFifo->ppFifoBufArray;
for(i=0 ; i<iLoopCnt ; ++i)
{
pFifoElement = ppFifoBufArray[i];
if(pFifoElement->uiIsUsing == 0)
{
*ppBuf = pFifoElement;
// UNLOCK_FIFO;
return 1;
}
}
// UNLOCK_FIFO;
return 0;
}
int pPushFifo(void* handle, PFIFOELEMENT pBuf)
{
PMYFIFO pMyFifo;
PPFIFOELEMENT ppFifo;
PFIFOELEMENT pFifoElement;
unsigned int uiWriteIdx;
unsigned int uiMaxNumOfElement;
pMyFifo = (PMYFIFO)handle;
ppFifo = pMyFifo->ppFIFO;
uiWriteIdx = pMyFifo->uiWriteIdx;
pFifoElement = ppFifo[uiWriteIdx];
#if 0 // Why need this function ?
if(pFifoElement != (PFIFOELEMENT)0)
{
return 0;
}
#endif
ppFifo[uiWriteIdx] = pBuf;
uiMaxNumOfElement = pMyFifo->uiMaxNumOfElement;
pMyFifo->uiWriteIdx = (uiWriteIdx + 1) & (uiMaxNumOfElement - 1);
pBuf->uiIsUsing = 1;
return 1;
}
int pPopFifo(void* handle, PPFIFOELEMENT ppBuf)
{
PMYFIFO pMyFifo;
PPFIFOELEMENT ppFifo;
PFIFOELEMENT pFifoElement;
unsigned int uiReadIdx;
unsigned int uiMaxNumOfElement;
pMyFifo = (PMYFIFO)handle;
uiReadIdx = pMyFifo->uiReadIdx;
ppFifo = pMyFifo->ppFIFO;
pFifoElement = ppFifo[uiReadIdx];
if(pFifoElement == (PFIFOELEMENT)0)
{
return 0;
}
uiMaxNumOfElement = pMyFifo->uiMaxNumOfElement;
pMyFifo->uiReadIdx = (uiReadIdx + 1) & (uiMaxNumOfElement - 1);
ppFifo[uiReadIdx] = (PFIFOELEMENT)0;
*ppBuf = pFifoElement;
return 1;
}
int pShowFifo(void* handle, PPFIFOELEMENT ppBuf)
{
PMYFIFO pMyFifo;
PPFIFOELEMENT ppFifo;
PFIFOELEMENT pFifoElement;
unsigned int uiReadIdx;
pMyFifo = (PMYFIFO)handle;
uiReadIdx = pMyFifo->uiReadIdx;
ppFifo = pMyFifo->ppFIFO;
pFifoElement = ppFifo[uiReadIdx];
if(pFifoElement == (PFIFOELEMENT)0)
{
return 0;
}
*ppBuf = pFifoElement;
return 1;
}
void pFlushFifo(void* handle)
{
PMYFIFO pMyFifo;
PPFIFOELEMENT ppFifo;
PPFIFOELEMENT ppFifoBufArray;
PFIFOELEMENT pFifoElement;
unsigned int uiMaxNumOfElement, i;
pMyFifo = (PMYFIFO)handle;
uiMaxNumOfElement = pMyFifo->uiMaxNumOfElement;
ppFifo = pMyFifo->ppFIFO;
ppFifoBufArray = pMyFifo->ppFifoBufArray;
for(i=0; i<uiMaxNumOfElement ; ++i)
{
// if(ppFifoBufArray[i])
// memset(ppFifoBufArray[i]->pBuf,ppFifoBufArray[i]->uiMaxBufSize);
pFifoElement = ppFifoBufArray[i];
pFifoElement->uiIsUsing = 0;
pFifoElement->uiRealBufSize = 0;
ppFifo[i] = 0;
}
pMyFifo->uiReadIdx = 0;
pMyFifo->uiWriteIdx = 0;
}
int CreateFIFO(void* handle, unsigned int uiNumOfElement, unsigned int uiSizeOfElement)
{
PMYFIFO pMyFifo;
PPFIFOELEMENT ppFifoBuf;
PPFIFOELEMENT ppFifoBufArray;
PFIFOELEMENT pFifoElement;
unsigned int pMem;
unsigned int i;
pMem = (unsigned int)handle;
pMyFifo = (PMYFIFO)pMem;
pMem += sizeof(MYFIFO);
pMyFifo->uiReadIdx = 0;
pMyFifo->uiWriteIdx = 0;
pMyFifo->uiMaxNumOfElement = uiNumOfElement;
pMyFifo->ppFIFO = ppFifoBuf = (PPFIFOELEMENT)pMem;
pMem += uiNumOfElement * sizeof(PFIFOELEMENT);
pMyFifo->ppFifoBufArray = ppFifoBufArray = (PPFIFOELEMENT)pMem;
pMem += uiNumOfElement * sizeof(PFIFOELEMENT);
uiSizeOfElement = ((uiSizeOfElement) & 0xffffffff);
for(i=0; i<uiNumOfElement ; ++i)
{
pFifoElement = (PFIFOELEMENT)(pMem + i * (sizeof(FIFOELEMENT) + uiSizeOfElement));
pFifoElement->uiIsUsing = 0;
pFifoElement->uiMaxBufSize = uiSizeOfElement;
pFifoElement->uiRealBufSize = 0;
pFifoElement->pBuf = (unsigned int*)(pFifoElement + 1);
ppFifoBufArray[i] = pFifoElement;
ppFifoBuf[i] = (PFIFOELEMENT)0;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -