打印

改了所长队列的代码,各位看有问题吧

[复制链接]
1121|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snakeemail|  楼主 | 2010-2-20 18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
所长的分配内存就不好搞,我就分配一个数组,然后让一个指针指向队列,看这样好不?
//文件.h


#ifdef   FIFO_GLOBALS
#define  FIFO_EXT   
#else
#define  FIFO_EXT extern
#endif

typedef struct QueueML{
  unsigned char *pFirst;//数组的首地址
  unsigned char PutFifoPt;//放数据的索引
  unsigned char GetFifoPt;
  unsigned char Size;//当前FIFO放了几个数进去
  unsigned char MaxCount;//FIFO最大长度
  unsigned char Wrap;
}QUEUE;

FIFO_EXT QUEUE TestQueue;

#ifndef __FIFO_H__
#define __FIFO_H__ 1 //有的编译器不接受#define __FIFO_H__????

#define FIFO_FULL 0
#define FIFO_EMPTY 0xFF

extern void FifoInit( QUEUE *pQueue, unsigned char *pArray, unsigned char MaxCount);
extern unsigned char PutFifo( QUEUE *pQueue, unsigned char Data);
extern unsigned char GetFifo( QUEUE *pQueue );
extern unsigned char GetFifoSize( QUEUE *pQueue );
extern void FifoClear( QUEUE *pQueue );
#endif

//.c文件

#include "Config.h"

/*
typedef struct QueueML{
  unsigned char *pFirst;//
  unsigned char PutFifoPt;//放数据的索引
  unsigned char Size;//当前FIFO放了几个数进去
  unsigned char MaxCount;//FIFO最大长度
  unsigned char Wrap;
}QUEUE;
*/

/*
函数名:void FifoInit(struct Queue *pQueue, unsigned char *pArray)
入口参数:struct Queue *pQueue:
*/
void FifoInit( QUEUE *pQueue, unsigned char *pArray, unsigned char MaxCount)
{
    pQueue->pFirst = pArray;//分配给队列数组的指针
    pQueue->MaxCount = MaxCount;
    pQueue->Wrap = MaxCount - 1;
    pQueue->PutFifoPt = 0;
    pQueue->GetFifoPt = 0;
    pQueue->Size = 0;
}

void FifoClear( QUEUE *pQueue )
{
    pQueue->PutFifoPt = 0;
    pQueue->GetFifoPt = 0;
    pQueue->Size = 0;
}

unsigned char PutFifo(QUEUE *pQueue, unsigned char Data)
{
    if(pQueue->Size == pQueue->MaxCount)  //FIFO FULL
        return ~0;  
    else
    {
        *(pQueue->pFirst + pQueue->PutFifoPt) = Data;// (FIFO首地址  + 索引 ) = 数据
        (pQueue->PutFifoPt)++;
        pQueue->PutFifoPt &= pQueue->Wrap;
        (pQueue->Size)++;
        return 0;
        
/*      *(RecBuf + PutFifoPt) = data;   //put data into fifo
        PutFifoPt++;
        PutFifoPt = PutFifoPt & WRAP;// WRAP Point
        RecCount++;*/
        
    }
}

/*
功能:返回Fifo当前有多少空间被使用
*/
unsigned char GetFifoSize( QUEUE *pQueue )
{
    return pQueue->Size;
}
/*
函数名:unsigned char GetFifo( QUEUE *pQueue )
说明:取FIFO要判断Fifo中有没有数据
*/
unsigned char GetFifo( QUEUE *pQueue )
{
    unsigned char TempFifo;
   
    TempFifo = *(pQueue->pFirst + pQueue->GetFifoPt);
    (pQueue->GetFifoPt)++;
    (pQueue->GetFifoPt) &= pQueue->Wrap;
    (pQueue->Size)--;
        
    return TempFifo;
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:提供500W线性 交流电源。0~300VAC,45~500Hz 提供10KW,0-330V直流电源,具体见http://blog.21ic.com/user1/3639/archives/2012/88528.html

547

主题

1910

帖子

8

粉丝