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

[复制链接]
1532|0
 楼主| snakeemail 发表于 2010-2-20 18:14 | 显示全部楼层 |阅读模式
所长的分配内存就不好搞,我就分配一个数组,然后让一个指针指向队列,看这样好不?
  1. //文件.h


  2. #ifdef   FIFO_GLOBALS
  3. #define  FIFO_EXT   
  4. #else
  5. #define  FIFO_EXT extern
  6. #endif

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

  15. FIFO_EXT QUEUE TestQueue;

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

  18. #define FIFO_FULL 0
  19. #define FIFO_EMPTY 0xFF

  20. extern void FifoInit( QUEUE *pQueue, unsigned char *pArray, unsigned char MaxCount);
  21. extern unsigned char PutFifo( QUEUE *pQueue, unsigned char Data);
  22. extern unsigned char GetFifo( QUEUE *pQueue );
  23. extern unsigned char GetFifoSize( QUEUE *pQueue );
  24. extern void FifoClear( QUEUE *pQueue );
  25. #endif

  26. //.c文件

  27. #include "Config.h"

  28. /*
  29. typedef struct QueueML{
  30.   unsigned char *pFirst;//
  31.   unsigned char PutFifoPt;//放数据的索引
  32.   unsigned char Size;//当前FIFO放了几个数进去
  33.   unsigned char MaxCount;//FIFO最大长度
  34.   unsigned char Wrap;
  35. }QUEUE;
  36. */

  37. /*
  38. 函数名:void FifoInit(struct Queue *pQueue, unsigned char *pArray)
  39. 入口参数:struct Queue *pQueue:
  40. */
  41. void FifoInit( QUEUE *pQueue, unsigned char *pArray, unsigned char MaxCount)
  42. {
  43.     pQueue->pFirst = pArray;//分配给队列数组的指针
  44.     pQueue->MaxCount = MaxCount;
  45.     pQueue->Wrap = MaxCount - 1;
  46.     pQueue->PutFifoPt = 0;
  47.     pQueue->GetFifoPt = 0;
  48.     pQueue->Size = 0;
  49. }

  50. void FifoClear( QUEUE *pQueue )
  51. {
  52.     pQueue->PutFifoPt = 0;
  53.     pQueue->GetFifoPt = 0;
  54.     pQueue->Size = 0;
  55. }

  56. unsigned char PutFifo(QUEUE *pQueue, unsigned char Data)
  57. {
  58.     if(pQueue->Size == pQueue->MaxCount)  //FIFO FULL
  59.         return ~0;  
  60.     else
  61.     {
  62.         *(pQueue->pFirst + pQueue->PutFifoPt) = Data;// (FIFO首地址  + 索引 ) = 数据
  63.         (pQueue->PutFifoPt)++;
  64.         pQueue->PutFifoPt &= pQueue->Wrap;
  65.         (pQueue->Size)++;
  66.         return 0;
  67.         
  68. /*      *(RecBuf + PutFifoPt) = data;   //put data into fifo
  69.         PutFifoPt++;
  70.         PutFifoPt = PutFifoPt & WRAP;// WRAP Point
  71.         RecCount++;*/
  72.         
  73.     }
  74. }

  75. /*
  76. 功能:返回Fifo当前有多少空间被使用
  77. */
  78. unsigned char GetFifoSize( QUEUE *pQueue )
  79. {
  80.     return pQueue->Size;
  81. }
  82. /*
  83. 函数名:unsigned char GetFifo( QUEUE *pQueue )
  84. 说明:取FIFO要判断Fifo中有没有数据
  85. */
  86. unsigned char GetFifo( QUEUE *pQueue )
  87. {
  88.     unsigned char TempFifo;
  89.    
  90.     TempFifo = *(pQueue->pFirst + pQueue->GetFifoPt);
  91.     (pQueue->GetFifoPt)++;
  92.     (pQueue->GetFifoPt) &= pQueue->Wrap;
  93.     (pQueue->Size)--;
  94.         
  95.     return TempFifo;
  96. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

547

主题

1909

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部